<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jason sturges</title>
	<atom:link href="http://www.jasonsturges.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jasonsturges.com</link>
	<description>avant-garde experimental artist</description>
	<lastBuildDate>Sat, 20 Apr 2013 08:20:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Away3d Caurina Tweener</title>
		<link>http://www.jasonsturges.com/2013/03/away3d-caurina-tweener/</link>
		<comments>http://www.jasonsturges.com/2013/03/away3d-caurina-tweener/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 08:42:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[Stage3D]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2216</guid>
		<description><![CDATA[An example creating tweens with Caurina in Away3D inspired by Papervision Matrix3D Tween example from wonderfl. Press f for fullscreen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20&#8230;]]></description>
				<content:encoded><![CDATA[<p>An example creating tweens with Caurina in Away3D inspired by Papervision Matrix3D Tween example from <a href="http://wonderfl.net/c/6xey">wonderfl</a>.</p>
<p><span id="more-2216"></span></p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/caurina-tweener/Away3dTweenExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/caurina-tweener/Away3dTweenExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/caurina-tweener/Away3dTweenExample.html" target="_self">Launch website</a>
<p><em>Press f for fullscreen.</em></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">core</span>.<span style="color: #006600;">base</span>.<span style="color: #006600;">Object3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">entities</span>.<span style="color: #006600;">Mesh</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">ColorMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FilteredShadowMapMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">CubeGeometry</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> caurina.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">Tweener</span>;
	<span style="color: #0066CC;">import</span> caurina.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">properties</span>.<span style="color: #006600;">CurveModifiers</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dViewport</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">model</span>.<span style="color: #0066CC;">Color</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #0066CC;">time</span>.<span style="color: #006600;">RandomTimer</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">TimerEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">geom</span>.<span style="color: #006600;">Vector3D</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">utils</span>.<span style="color: #0066CC;">getTimer</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0x0, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #808080; font-style: italic;">/**
	 *
	 * Inspired by Papervision Matrix3D Tween example from wonderfl.
	 * http://wonderfl.net/c/6xey
	 *
	 * @author jsturges
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Away3dTweenExample <span style="color: #0066CC;">extends</span> Away3dViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> materials:Vector.<span style="color: #66cc66;">&lt;</span>ColorMaterial<span style="color: #66cc66;">&gt;</span>;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> meshes:Vector.<span style="color: #66cc66;">&lt;</span>Mesh<span style="color: #66cc66;">&gt;</span>;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> light:DirectionalLight;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> timer:RandomTimer;
&nbsp;
		protected const COUNT:uint = <span style="color: #cc66cc;">64</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Away3dTweenExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> initialize3d<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initialize3d</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			CurveModifiers.<span style="color: #006600;">init</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			timer = <span style="color: #000000; font-weight: bold;">new</span> RandomTimer<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">1500</span><span style="color: #66cc66;">&#41;</span>;
			timer.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>TimerEvent.<span style="color: #006600;">TIMER</span>, timerHandler<span style="color: #66cc66;">&#41;</span>;
			timer.<span style="color: #0066CC;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeCamera</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">10000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = <span style="color: #cc66cc;">50</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeLights</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			light = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">500</span><span style="color: #66cc66;">&#41;</span>;
			light.<span style="color: #0066CC;">color</span> = 0xefefef;
			light.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>light<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> light <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeMaterials</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			materials = <span style="color: #000000; font-weight: bold;">new</span> Vector.<span style="color: #66cc66;">&lt;</span>ColorMaterial<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> f:<span style="color: #0066CC;">Number</span> = 0xff <span style="color: #66cc66;">/</span> COUNT;
&nbsp;
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:uint = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> COUNT; i++<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> material:ColorMaterial = <span style="color: #000000; font-weight: bold;">new</span> ColorMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Color</span>.<span style="color: #0066CC;">getRGB</span><span style="color: #66cc66;">&#40;</span>i <span style="color: #66cc66;">*</span> f, i <span style="color: #66cc66;">*</span> f, i <span style="color: #66cc66;">*</span> f<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
				material.<span style="color: #006600;">shadowMethod</span> = <span style="color: #000000; font-weight: bold;">new</span> FilteredShadowMapMethod<span style="color: #66cc66;">&#40;</span>light<span style="color: #66cc66;">&#41;</span>;
				material.<span style="color: #006600;">lightPicker</span> = lightPicker;
				materials.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>material<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeObjects</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			meshes = <span style="color: #000000; font-weight: bold;">new</span> Vector.<span style="color: #66cc66;">&lt;</span>Mesh<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:uint = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> COUNT; i++<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> mesh:Mesh = <span style="color: #000000; font-weight: bold;">new</span> Mesh<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> CubeGeometry<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">20</span>, <span style="color: #cc66cc;">20</span>, <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span>, materials<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
				mesh.<span style="color: #006600;">castsShadows</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
				meshes.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>mesh<span style="color: #66cc66;">&#41;</span>;
				view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>mesh<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> timerHandler<span style="color: #66cc66;">&#40;</span>event:TimerEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> sx:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span>;
			<span style="color: #000000; font-weight: bold;">var</span> sy:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span>;
			<span style="color: #000000; font-weight: bold;">var</span> sz:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span>;
			<span style="color: #000000; font-weight: bold;">var</span> yaw:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1000</span>;
			<span style="color: #000000; font-weight: bold;">var</span> pitch:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1200</span>;
			<span style="color: #000000; font-weight: bold;">var</span> dist:<span style="color: #0066CC;">Number</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">500</span> + <span style="color: #cc66cc;">250</span>;
			<span style="color: #000000; font-weight: bold;">var</span> lookAtZero:<span style="color: #0066CC;">Boolean</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">random</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">0.5</span> ? <span style="color: #000000; font-weight: bold;">true</span> : <span style="color: #000000; font-weight: bold;">false</span>;
&nbsp;
			<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:uint = <span style="color: #cc66cc;">0</span>; i <span style="color: #66cc66;">&lt;</span> meshes.<span style="color: #0066CC;">length</span>; i++<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> mesh:Mesh = meshes<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;
				<span style="color: #000000; font-weight: bold;">var</span> n:<span style="color: #0066CC;">Number</span> = i <span style="color: #66cc66;">/</span> meshes.<span style="color: #0066CC;">length</span> - <span style="color: #cc66cc;">0.5</span>;
&nbsp;
				<span style="color: #000000; font-weight: bold;">var</span> o:Object3D = <span style="color: #000000; font-weight: bold;">new</span> Object3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				o.<span style="color: #006600;">yaw</span><span style="color: #66cc66;">&#40;</span>yaw <span style="color: #66cc66;">*</span> n<span style="color: #66cc66;">&#41;</span>;
				o.<span style="color: #006600;">pitch</span><span style="color: #66cc66;">&#40;</span>pitch <span style="color: #66cc66;">*</span> n<span style="color: #66cc66;">&#41;</span>;
				o.<span style="color: #006600;">moveForward</span><span style="color: #66cc66;">&#40;</span>dist<span style="color: #66cc66;">&#41;</span>;
				o.<span style="color: #006600;">scaleX</span> = sx;
				o.<span style="color: #006600;">scaleY</span> = sy;
				o.<span style="color: #006600;">scaleZ</span> = sz;
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>lookAtZero<span style="color: #66cc66;">&#41;</span>
					o.<span style="color: #006600;">lookAt</span><span style="color: #66cc66;">&#40;</span>Vector3D.<span style="color: #006600;">X_AXIS</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
				Tweener.<span style="color: #006600;">addTween</span><span style="color: #66cc66;">&#40;</span>mesh,
								 <span style="color: #66cc66;">&#123;</span>
									 <span style="color: #0066CC;">time</span>: <span style="color: #66cc66;">&#40;</span>timer.<span style="color: #006600;">delay</span> - <span style="color: #cc66cc;">250</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">1000</span>,
									 scaleX: o.<span style="color: #006600;">scaleX</span>,
									 scaleY: o.<span style="color: #006600;">scaleY</span>,
									 scaleZ: o.<span style="color: #006600;">scaleZ</span>,
									 rotationX: o.<span style="color: #006600;">rotationX</span>,
									 rotationY: o.<span style="color: #006600;">rotationY</span>,
									 rotationZ: o.<span style="color: #006600;">rotationZ</span>,
									 x: o.<span style="color: #006600;">x</span>,
									 y: o.<span style="color: #006600;">y</span>,
									 z: o.<span style="color: #006600;">z</span>,
									 _bezier:
									 <span style="color: #66cc66;">&#123;</span>
										 x: o.<span style="color: #006600;">x</span>,
										 y: o.<span style="color: #006600;">y</span>,
										 z: o.<span style="color: #006600;">z</span>
									 <span style="color: #66cc66;">&#125;</span>
								 <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
				o.<span style="color: #006600;">dispose</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				o = <span style="color: #000000; font-weight: bold;">null</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			light.<span style="color: #006600;">direction</span> = Vector3D.<span style="color: #006600;">X_AXIS</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lookAt</span><span style="color: #66cc66;">&#40;</span>Vector3D.<span style="color: #006600;">X_AXIS</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span> = light.<span style="color: #006600;">x</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">sin</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">getTimer</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">3000</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span> = light.<span style="color: #006600;">z</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">cos</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">getTimer</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">3000</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1000</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2013/03/away3d-caurina-tweener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity 3D terrain from Blender ANT Landscape Generator</title>
		<link>http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/</link>
		<comments>http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/#comments</comments>
		<pubDate>Thu, 20 Dec 2012 03:50:03 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[terrain]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2113</guid>
		<description><![CDATA[Terrains in Unity may be generated using Blender&#8217;s ANT Landscape Generator. Please view the full post to see the Unity content. Install ANT Landscape Generator if not already in Blender. In Blender, select File » User Preferences&#8230;: Under the Addons&#8230;]]></description>
				<content:encoded><![CDATA[<p>Terrains in Unity may be generated using Blender&#8217;s ANT Landscape Generator.</p>
<p><span id="more-2113"></span></p>
<p><em>Please view the full post to see the Unity content.</em></p>
<a class="button  " href="http://jasonsturges.com/labs/unity/terrain-blender-ant-landscape-generator/terrain-blender-ant-landscape-generator.html" target="_self">Launch website</a>
<p>Install ANT Landscape Generator if not already in Blender.</p>
<p>In Blender, select <i>File » User Preferences&#8230;</i>:</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-user-preferences/" rel="attachment wp-att-2114"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-user-preferences-226x300.png" alt="blender-user-preferences" width="226" height="300" class="alignnone size-medium wp-image-2114" /></a></p>
<p>Under the <i>Addons</i> group, select the <i>Install Addon…</i> button.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-addons/" rel="attachment wp-att-2115"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-addons-300x188.png" alt="blender-addons" width="300" height="188" class="alignnone size-medium wp-image-2115" /></a></p>
<p>Navigate to the <i>add_mesh_ant_landscape.py</i> script, and with the script selected press the <i>Install Addon&#8230;</i> button.</p>
<p>Once installed, enable the add-on by placing a check in the <i>Add Mesh: ANT Landscape</i> group.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-enable-addon/" rel="attachment wp-att-2116"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-enable-addon-300x188.png" alt="blender-enable-addon" width="300" height="188" class="alignnone size-medium wp-image-2116" /></a></p>
<p>With a new scene ready in Blender, the default camera and lamp may be removed.  Only the terrain is needed for import to Unity.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-new-scene/" rel="attachment wp-att-2117"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-new-scene-300x173.png" alt="blender-new-scene" width="300" height="173" class="alignnone size-medium wp-image-2117" /></a></p>
<p>Create a landscape in Blender by selecting <i>Add » Mesh » Landscape</i>.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-add-landscape/" rel="attachment wp-att-2118"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-add-landscape-300x239.png" alt="blender-add-landscape" width="300" height="239" class="alignnone size-medium wp-image-2118" /></a></p>
<p>Blender will generate a 3D mesh of a landscape.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-new-landscape/" rel="attachment wp-att-2119"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-new-landscape-300x214.png" alt="blender-new-landscape" width="300" height="214" class="alignnone size-medium wp-image-2119" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-new-landscape-perspective/" rel="attachment wp-att-2120"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-new-landscape-perspective-300x103.png" alt="blender-new-landscape-perspective" width="300" height="103" class="alignnone size-medium wp-image-2120" /></a></p>
<p>Landscape parameters may be tuned to different terrains.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-mesh-options/" rel="attachment wp-att-2121"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-mesh-options-68x300.png" alt="blender-mesh-options" width="68" height="300" class="alignnone size-medium wp-image-2121" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-new-landscape-islands/" rel="attachment wp-att-2122"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-new-landscape-islands-300x140.png" alt="blender-new-landscape-islands" width="300" height="140" class="alignnone size-medium wp-image-2122" /></a></p>
<p>With the landscacpe selected in Blender, export the mesh to a Wavefront OBJ file by selecting <i>File » Export » Wavefront (.obj)</i>.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/blender-export-landscape-obj/" rel="attachment wp-att-2123"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/blender-export-landscape-obj-300x254.png" alt="blender-export-landscape-obj" width="300" height="254" class="alignnone size-medium wp-image-2123" /></a></p>
<p>In unity, create a new terrain by selecting <i>Terrain » Create Terrain</i></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/create-terrain/" rel="attachment wp-att-2073"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/create-terrain.png" alt="create-terrain" width="278" height="164" class="alignnone size-full wp-image-2073" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-new-terrain-2/" rel="attachment wp-att-2124"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-new-terrain1.png" alt="unity-new-terrain" width="512" height="275" class="alignnone size-full wp-image-2124" /></a></p>
<p>Import the landscape Wavefront OBJ file.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-terrain-asset/" rel="attachment wp-att-2125"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-asset.png" alt="unity-terrain-asset" width="726" height="272" class="alignnone size-full wp-image-2125" /></a></p>
<p>Drag the default mesh from the terrain OBJ file, and drop it on the Unity terrain.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-terrain-asset-default-mesh/" rel="attachment wp-att-2126"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-asset-default-mesh.png" alt="unity-terrain-asset-default-mesh" width="726" height="273" class="alignnone size-full wp-image-2126" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-drop-mesh-on-terrain/" rel="attachment wp-att-2127"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-drop-mesh-on-terrain.png" alt="unity-drop-mesh-on-terrain" width="431" height="273" class="alignnone size-full wp-image-2127" /></a></p>
<p>This will result in the mesh as a child of the Terrain hierarchy.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-terrain-mesh-hierarchy/" rel="attachment wp-att-2128"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-mesh-hierarchy.png" alt="unity-terrain-mesh-hierarchy" width="429" height="273" class="alignnone size-full wp-image-2128" /></a></p>
<p>To apply to the imported landscape mesh to the terrain object in Unity, use the Object2Terrain.js script.</p>
<p>Under the Unity project assets, create an <i>Editor</i> folder, and place the Object2Terrain.js script in the folder.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-object2terrain-editor-script/" rel="attachment wp-att-2129"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-object2terrain-editor-script.png" alt="unity-object2terrain-editor-script" width="726" height="273" class="alignnone size-full wp-image-2129" /></a></p>
<p>Now with the default mesh of the terrain selected in the hierarchy, select <i>Terrain » Object to Terrain</i>.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-terrain-menu-object-to-terrain/" rel="attachment wp-att-2130"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-menu-object-to-terrain.png" alt="unity-terrain-menu-object-to-terrain" width="282" height="185" class="alignnone size-full wp-image-2130" /></a></p>
<p>Unity terrain object now reflects the imported landscape mesh from Blender.</p>
<p><a href="http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/unity-terrain-from-mesh/" rel="attachment wp-att-2131"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-from-mesh.png" alt="unity-terrain-from-mesh" width="482" height="270" class="alignnone size-full wp-image-2131" /></a></p>
<p>Children of the Unity may now be deleted from the terrain object.</p>
<h4>Scripts</h4>
<h5>Blender ANT Landscape Generator &#8211; add_mesh_ant_landscape.py</h5>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># ##### BEGIN GPL LICENSE BLOCK #####</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#  This program is free software; you can redistribute it and/or</span>
<span style="color: #808080; font-style: italic;">#  modify it under the terms of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;">#  as published by the Free Software Foundation; either version 2</span>
<span style="color: #808080; font-style: italic;">#  of the License, or (at your option) any later version.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#  This program is distributed in the hope that it will be useful,</span>
<span style="color: #808080; font-style: italic;">#  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span style="color: #808080; font-style: italic;">#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span style="color: #808080; font-style: italic;">#  GNU General Public License for more details.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#  You should have received a copy of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;">#  along with this program; if not, write to the Free Software Foundation,</span>
<span style="color: #808080; font-style: italic;">#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># ##### END GPL LICENSE BLOCK #####</span>
&nbsp;
bl_info <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span>
    <span style="color: #483d8b;">&quot;name&quot;</span>: <span style="color: #483d8b;">&quot;ANT Landscape&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;author&quot;</span>: <span style="color: #483d8b;">&quot;Jimmy Hazevoet&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;version&quot;</span>: <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;blender&quot;</span>: <span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">6</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;location&quot;</span>: <span style="color: #483d8b;">&quot;View3D &gt; Add &gt; Mesh&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;description&quot;</span>: <span style="color: #483d8b;">&quot;Add a landscape primitive&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;warning&quot;</span>: <span style="color: #483d8b;">&quot;&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;"># used for warning icon and text in addons panel</span>
    <span style="color: #483d8b;">&quot;wiki_url&quot;</span>: <span style="color: #483d8b;">&quot;http://wiki.blender.org/index.php/Extensions:2.6/Py/&quot;</span>\
        <span style="color: #483d8b;">&quot;Scripts/Add_Mesh/ANT_Landscape&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;tracker_url&quot;</span>: <span style="color: #483d8b;">&quot;https://projects.blender.org/tracker/index.php?&quot;</span>\
        <span style="color: #483d8b;">&quot;func=detail&amp;aid=23130&quot;</span><span style="color: #66cc66;">,</span>
    <span style="color: #483d8b;">&quot;category&quot;</span>: <span style="color: #483d8b;">&quot;Add Mesh&quot;</span><span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #483d8b;">&quot;&quot;&quot;
Another Noise Tool: Landscape mesh generator
&nbsp;
MESH OPTIONS:
Mesh update:     Turn this on for interactive mesh update.
Sphere:          Generate sphere or a grid mesh. (Turn height falloff off for sphere mesh)
Smooth:          Generate smooth shaded mesh.
Subdivision:     Number of mesh subdivisions, higher numbers gives more detail but also slows down the script.
Mesh size:       X,Y size of the grid mesh (in blender units).
&nbsp;
NOISE OPTIONS: ( Most of these options are the same as in blender textures. )
Random seed:     Use this to randomise the origin of the noise function.
Noise size:      Size of the noise.
Noise type:      Available noise types: multiFractal, ridgedMFractal, hybridMFractal, heteroTerrain, Turbulence, Distorted Noise, Cellnoise, Shattered_hTerrain, Marble
Noise basis:     Blender, Perlin, NewPerlin, Voronoi_F1, Voronoi_F2, Voronoi_F3, Voronoi_F4, Voronoi_F2-F1, Voronoi Crackle, Cellnoise
VLNoise basis:   Blender, Perlin, NewPerlin, Voronoi_F1, Voronoi_F2, Voronoi_F3, Voronoi_F4, Voronoi_F2-F1, Voronoi Crackle, Cellnoise
Distortion:      Distortion amount.
Hard:            Hard/Soft turbulence noise.
Depth:           Noise depth, number of frequencies in the fBm.
Dimension:       Musgrave: Fractal dimension of the roughest areas.
Lacunarity:      Musgrave: Gap between successive frequencies.
Offset:          Musgrave: Raises the terrain from sea level.
Gain:            Musgrave: Scale factor.
Marble Bias:     Sin, Tri, Saw
Marble Sharpnes: Soft, Sharp, Sharper
Marble Shape:    Shape of the marble function: Default, Ring, Swirl, X, Y
&nbsp;
HEIGHT OPTIONS:
Invert:          Invert terrain height.
Height:          Scale terrain height.
Offset:          Terrain height offset.
Falloff:         Terrain height falloff: Type 1, Type 2, X, Y
Sealevel:        Flattens terrain below sealevel.
Platlevel:       Flattens terrain above plateau level.
Strata:          Strata amount, number of strata/terrace layers.
Strata type:     Strata types, Smooth, Sharp-sub, Sharp-add
&quot;&quot;&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># import modules</span>
<span style="color: #ff7700;font-weight:bold;">import</span> bpy
<span style="color: #ff7700;font-weight:bold;">from</span> bpy.<span style="color: black;">props</span> <span style="color: #ff7700;font-weight:bold;">import</span> *
<span style="color: #ff7700;font-weight:bold;">from</span> mathutils <span style="color: #ff7700;font-weight:bold;">import</span> *
<span style="color: #ff7700;font-weight:bold;">from</span> mathutils.<span style="color: black;">noise</span> <span style="color: #ff7700;font-weight:bold;">import</span> *
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">math</span> <span style="color: #ff7700;font-weight:bold;">import</span> *
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;"># Create a new mesh (object) from verts/edges/faces.</span>
<span style="color: #808080; font-style: italic;"># verts/edges/faces ... List of vertices/edges/faces for the</span>
<span style="color: #808080; font-style: italic;">#                    new mesh (as used in from_pydata).</span>
<span style="color: #808080; font-style: italic;"># name ... Name of the new mesh (&amp; object).</span>
<span style="color: #ff7700;font-weight:bold;">def</span> create_mesh_object<span style="color: black;">&#40;</span>context<span style="color: #66cc66;">,</span> verts<span style="color: #66cc66;">,</span> edges<span style="color: #66cc66;">,</span> faces<span style="color: #66cc66;">,</span> name<span style="color: black;">&#41;</span>:
    <span style="color: #808080; font-style: italic;"># Create new mesh</span>
    mesh <span style="color: #66cc66;">=</span> bpy.<span style="color: black;">data</span>.<span style="color: black;">meshes</span>.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span>name<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># Make a mesh from a list of verts/edges/faces.</span>
    mesh.<span style="color: black;">from_pydata</span><span style="color: black;">&#40;</span>verts<span style="color: #66cc66;">,</span> edges<span style="color: #66cc66;">,</span> faces<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># Update mesh geometry after adding stuff.</span>
    mesh.<span style="color: black;">update</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">from</span> bpy_extras <span style="color: #ff7700;font-weight:bold;">import</span> object_utils
    <span style="color: #ff7700;font-weight:bold;">return</span> object_utils.<span style="color: black;">object_data_add</span><span style="color: black;">&#40;</span>context<span style="color: #66cc66;">,</span> mesh<span style="color: #66cc66;">,</span> <span style="color: #dc143c;">operator</span><span style="color: #66cc66;">=</span><span style="color: #008000;">None</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># A very simple &quot;bridge&quot; tool.</span>
<span style="color: #808080; font-style: italic;"># Connects two equally long vertex rows with faces.</span>
<span style="color: #808080; font-style: italic;"># Returns a list of the new faces (list of  lists)</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># vertIdx1 ... First vertex list (list of vertex indices).</span>
<span style="color: #808080; font-style: italic;"># vertIdx2 ... Second vertex list (list of vertex indices).</span>
<span style="color: #808080; font-style: italic;"># closed ... Creates a loop (first &amp; last are closed).</span>
<span style="color: #808080; font-style: italic;"># flipped ... Invert the normal of the face(s).</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Note: You can set vertIdx1 to a single vertex index to create</span>
<span style="color: #808080; font-style: italic;">#    a fan/star of faces.</span>
<span style="color: #808080; font-style: italic;"># Note: If both vertex idx list are the same length they have</span>
<span style="color: #808080; font-style: italic;">#    to have at least 2 vertices.</span>
<span style="color: #ff7700;font-weight:bold;">def</span> createFaces<span style="color: black;">&#40;</span>vertIdx1<span style="color: #66cc66;">,</span> vertIdx2<span style="color: #66cc66;">,</span> closed<span style="color: #66cc66;">=</span><span style="color: #008000;">False</span><span style="color: #66cc66;">,</span> flipped<span style="color: #66cc66;">=</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span>:
    faces <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> vertIdx1 <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #ff7700;font-weight:bold;">not</span> vertIdx2:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx1<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">2</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx2<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">2</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
    fan <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx1<span style="color: black;">&#41;</span> <span style="color: #66cc66;">!=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx2<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx1<span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx2<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
            fan <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
    total <span style="color: #66cc66;">=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vertIdx2<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> closed:
        <span style="color: #808080; font-style: italic;"># Bridge the start with the end.</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> flipped:
            face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                vertIdx1<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span>
                vertIdx2<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span>
                vertIdx2<span style="color: black;">&#91;</span>total - <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> fan:
                face.<span style="color: black;">append</span><span style="color: black;">&#40;</span>vertIdx1<span style="color: black;">&#91;</span>total - <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
            faces.<span style="color: black;">append</span><span style="color: black;">&#40;</span>face<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>vertIdx2<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx1<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> fan:
                face.<span style="color: black;">append</span><span style="color: black;">&#40;</span>vertIdx1<span style="color: black;">&#91;</span>total - <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
            face.<span style="color: black;">append</span><span style="color: black;">&#40;</span>vertIdx2<span style="color: black;">&#91;</span>total - <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
            faces.<span style="color: black;">append</span><span style="color: black;">&#40;</span>face<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># Bridge the rest of the faces.</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> num <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>total - <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> flipped:
            <span style="color: #ff7700;font-weight:bold;">if</span> fan:
                face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>vertIdx2<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx1<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx2<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>vertIdx2<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx1<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span>
                    vertIdx1<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx2<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            faces.<span style="color: black;">append</span><span style="color: black;">&#40;</span>face<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> fan:
                face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>vertIdx1<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx2<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx2<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                face <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>vertIdx1<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx2<span style="color: black;">&#91;</span>num<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span>
                    vertIdx2<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> vertIdx1<span style="color: black;">&#91;</span>num + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#93;</span>
            faces.<span style="color: black;">append</span><span style="color: black;">&#40;</span>face<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> faces
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># some functions for marble_noise</span>
<span style="color: #ff7700;font-weight:bold;">def</span> sin_bias<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0.5</span> + <span style="color: #ff4500;">0.5</span> * sin<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> tri_bias<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    b <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">2</span> * pi
    a <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span> - <span style="color: #ff4500;">2</span> * <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span>floor<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>a * <span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>/b<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> - <span style="color: black;">&#40;</span>a*<span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>/b<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> a
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> saw_bias<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    b <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">2</span> * pi
    n <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>a/b<span style="color: black;">&#41;</span>
    a -<span style="color: #66cc66;">=</span> n * b
    <span style="color: #ff7700;font-weight:bold;">if</span> a <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">0</span>: a +<span style="color: #66cc66;">=</span> b
    <span style="color: #ff7700;font-weight:bold;">return</span> a / b
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> soft<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> a
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> sharp<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> a**<span style="color: #ff4500;">0.5</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> sharper<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> sharp<span style="color: black;">&#40;</span>sharp<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> shapes<span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>shape<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> shape <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>:
        <span style="color: #808080; font-style: italic;"># ring</span>
        x <span style="color: #66cc66;">=</span> x*<span style="color: #ff4500;">2</span>
        y <span style="color: #66cc66;">=</span> y*<span style="color: #ff4500;">2</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span>-cos<span style="color: black;">&#40;</span>x**<span style="color: #ff4500;">2</span>+y**<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>/<span style="color: black;">&#40;</span>x**<span style="color: #ff4500;">2</span>+y**<span style="color: #ff4500;">2</span>+<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> shape <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>:
        <span style="color: #808080; font-style: italic;"># swirl</span>
        x <span style="color: #66cc66;">=</span> x*<span style="color: #ff4500;">2</span>
        y <span style="color: #66cc66;">=</span> y*<span style="color: #ff4500;">2</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span> x*sin<span style="color: black;">&#40;</span> x*x+y*y <span style="color: black;">&#41;</span> + y*cos<span style="color: black;">&#40;</span> x*x+y*y <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span> / <span style="color: black;">&#40;</span>x**<span style="color: #ff4500;">2</span>+y**<span style="color: #ff4500;">2</span>+<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> shape <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">3</span>:
        <span style="color: #808080; font-style: italic;"># bumps</span>
        x <span style="color: #66cc66;">=</span> x*<span style="color: #ff4500;">2</span>
        y <span style="color: #66cc66;">=</span> y*<span style="color: #ff4500;">2</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>cos<span style="color: black;">&#40;</span> x*pi <span style="color: black;">&#41;</span> + cos<span style="color: black;">&#40;</span> y*pi <span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>-<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> shape <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">4</span>:
        <span style="color: #808080; font-style: italic;"># y grad.</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span>y*pi<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> shape <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">5</span>:
        <span style="color: #808080; font-style: italic;"># x grad.</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span>x*pi<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #808080; font-style: italic;"># marble</span>
        s <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x+y<span style="color: black;">&#41;</span>*<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> s
&nbsp;
<span style="color: #808080; font-style: italic;"># marble_noise</span>
<span style="color: #ff7700;font-weight:bold;">def</span> marble_noise<span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: #66cc66;">,</span> origin<span style="color: #66cc66;">,</span> size<span style="color: #66cc66;">,</span> shape<span style="color: #66cc66;">,</span> bias<span style="color: #66cc66;">,</span> sharpnes<span style="color: #66cc66;">,</span> turb<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> hard<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span>:
    x <span style="color: #66cc66;">=</span> x / size
    y <span style="color: #66cc66;">=</span> y / size
    z <span style="color: #66cc66;">=</span> z / size
    s <span style="color: #66cc66;">=</span> shapes<span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>shape<span style="color: black;">&#41;</span>
&nbsp;
    x +<span style="color: #66cc66;">=</span> origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    y +<span style="color: #66cc66;">=</span> origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
    z +<span style="color: #66cc66;">=</span> origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
    value <span style="color: #66cc66;">=</span> s + turb * turbulence_vector<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> hard<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> bias <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>:
        value <span style="color: #66cc66;">=</span> tri_bias<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> bias <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>:
        value <span style="color: #66cc66;">=</span> saw_bias<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        value <span style="color: #66cc66;">=</span> sin_bias<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> sharpnes <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>:
        value <span style="color: #66cc66;">=</span> sharp<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> sharpnes <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>:
        value <span style="color: #66cc66;">=</span> sharper<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        value <span style="color: #66cc66;">=</span> soft<span style="color: black;">&#40;</span> value <span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> value
&nbsp;
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># custom noise types</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># shattered_hterrain:</span>
<span style="color: #ff7700;font-weight:bold;">def</span> shattered_hterrain<span style="color: black;">&#40;</span> x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: #66cc66;">,</span> H<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> octaves<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> distort<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span>:
    d <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> turbulence_vector<span style="color: black;">&#40;</span> <span style="color: black;">&#40;</span> x<span style="color: #66cc66;">,</span> y<span style="color: #66cc66;">,</span> z <span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">6</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span> <span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> * <span style="color: #ff4500;">0.5</span> + <span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span>*distort*<span style="color: #ff4500;">0.5</span>
    t1 <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> turbulence_vector<span style="color: black;">&#40;</span> <span style="color: black;">&#40;</span> x+d<span style="color: #66cc66;">,</span> y+d<span style="color: #66cc66;">,</span> z <span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">7</span> <span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span>
    t2 <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> hetero_terrain<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span> x*<span style="color: #ff4500;">2</span><span style="color: #66cc66;">,</span> y*<span style="color: #ff4500;">2</span><span style="color: #66cc66;">,</span> z*<span style="color: #ff4500;">2</span> <span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> H<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> octaves<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span>*<span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span> t1*t2 <span style="color: black;">&#41;</span>+t2*<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> * <span style="color: #ff4500;">0.5</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># strata_hterrain</span>
<span style="color: #ff7700;font-weight:bold;">def</span> strata_hterrain<span style="color: black;">&#40;</span> x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: #66cc66;">,</span> H<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> octaves<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> distort<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span>:
    value <span style="color: #66cc66;">=</span> hetero_terrain<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span> x<span style="color: #66cc66;">,</span> y<span style="color: #66cc66;">,</span> z <span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> H<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> octaves<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> basis <span style="color: black;">&#41;</span>*<span style="color: #ff4500;">0.5</span>
    steps <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> sin<span style="color: black;">&#40;</span> value*<span style="color: black;">&#40;</span>distort*<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.1</span>/<span style="color: black;">&#40;</span>distort*<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span> value * <span style="color: black;">&#40;</span><span style="color: #ff4500;">1.0</span>-<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> + steps*<span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># landscape_gen</span>
<span style="color: #ff7700;font-weight:bold;">def</span> landscape_gen<span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: #66cc66;">,</span>falloffsize<span style="color: #66cc66;">,</span>options<span style="color: #66cc66;">=</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">6</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">2.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">2.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
&nbsp;
    <span style="color: #808080; font-style: italic;"># options</span>
    rseed    <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    nsize    <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
    ntype      <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    nbasis     <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    vlbasis    <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    distortion <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span>
    hardnoise  <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span>
    depth      <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span>
    dimension  <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span><span style="color: black;">&#93;</span>
    lacunarity <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">9</span><span style="color: black;">&#93;</span>
    offset     <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span>
    gain       <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">11</span><span style="color: black;">&#93;</span>
    marblebias     <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">12</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    marblesharpnes <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">13</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    marbleshape    <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">14</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    invert       <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">15</span><span style="color: black;">&#93;</span>
    height       <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">16</span><span style="color: black;">&#93;</span>
    heightoffset <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">17</span><span style="color: black;">&#93;</span>
    falloff      <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">18</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span>
    sealevel     <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">19</span><span style="color: black;">&#93;</span>
    platlevel    <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">20</span><span style="color: black;">&#93;</span>
    strata       <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">21</span><span style="color: black;">&#93;</span>
    stratatype   <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">22</span><span style="color: black;">&#93;</span>
    sphere       <span style="color: #66cc66;">=</span> options<span style="color: black;">&#91;</span><span style="color: #ff4500;">23</span><span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># origin</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> rseed <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:
        origin <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0.0</span>
        origin_x <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0.0</span>
        origin_y <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0.0</span>
        origin_z <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0.0</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #808080; font-style: italic;"># randomise origin</span>
        seed_set<span style="color: black;">&#40;</span> rseed <span style="color: black;">&#41;</span>
        origin <span style="color: #66cc66;">=</span> random_unit_vector<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        origin_x <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.5</span> - origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">1000.0</span>
        origin_y <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.5</span> - origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">1000.0</span>
        origin_z <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.5</span> - origin<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">1000.0</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># adjust noise size and origin</span>
    ncoords <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> x / nsize + origin_x<span style="color: #66cc66;">,</span> y / nsize + origin_y<span style="color: #66cc66;">,</span> z / nsize + origin_z <span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># noise basis type's</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> nbasis <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">9</span>: nbasis <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">14</span>  <span style="color: #808080; font-style: italic;"># to get cellnoise basis you must set 14 instead of 9</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> vlbasis <span style="color: #66cc66;">==</span><span style="color: #ff4500;">9</span>: vlbasis <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">14</span>
    <span style="color: #808080; font-style: italic;"># noise type's</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:   value <span style="color: #66cc66;">=</span> multi_fractal<span style="color: black;">&#40;</span>        ncoords<span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">0.5</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>: value <span style="color: #66cc66;">=</span> ridged_multi_fractal<span style="color: black;">&#40;</span> ncoords<span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> gain<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">0.5</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>: value <span style="color: #66cc66;">=</span> hybrid_multi_fractal<span style="color: black;">&#40;</span> ncoords<span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> gain<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">0.5</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">3</span>: value <span style="color: #66cc66;">=</span> hetero_terrain<span style="color: black;">&#40;</span>       ncoords<span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">0.25</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">4</span>: value <span style="color: #66cc66;">=</span> fractal<span style="color: black;">&#40;</span>              ncoords<span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">5</span>: value <span style="color: #66cc66;">=</span> turbulence_vector<span style="color: black;">&#40;</span>    ncoords<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> hardnoise<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">6</span>: value <span style="color: #66cc66;">=</span> variable_lacunarity<span style="color: black;">&#40;</span>            ncoords<span style="color: #66cc66;">,</span> distortion<span style="color: #66cc66;">,</span> nbasis<span style="color: #66cc66;">,</span> vlbasis <span style="color: black;">&#41;</span> + <span style="color: #ff4500;">0.5</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">7</span>: value <span style="color: #66cc66;">=</span> marble_noise<span style="color: black;">&#40;</span> x*<span style="color: #ff4500;">2.0</span>/falloffsize<span style="color: #66cc66;">,</span>y*<span style="color: #ff4500;">2.0</span>/falloffsize<span style="color: #66cc66;">,</span>z*<span style="color: #ff4500;">2</span>/falloffsize<span style="color: #66cc66;">,</span> origin<span style="color: #66cc66;">,</span> nsize<span style="color: #66cc66;">,</span> marbleshape<span style="color: #66cc66;">,</span> marblebias<span style="color: #66cc66;">,</span> marblesharpnes<span style="color: #66cc66;">,</span> distortion<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> hardnoise<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">8</span>: value <span style="color: #66cc66;">=</span> shattered_hterrain<span style="color: black;">&#40;</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> distortion<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> ntype <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">9</span>: value <span style="color: #66cc66;">=</span> strata_hterrain<span style="color: black;">&#40;</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> ncoords<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> dimension<span style="color: #66cc66;">,</span> lacunarity<span style="color: #66cc66;">,</span> depth<span style="color: #66cc66;">,</span> offset<span style="color: #66cc66;">,</span> distortion<span style="color: #66cc66;">,</span> nbasis <span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        value <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0.0</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># adjust height</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> invert <span style="color: #66cc66;">!=</span><span style="color: #ff4500;">0</span>:
        value <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>-value<span style="color: black;">&#41;</span> * height + heightoffset
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        value <span style="color: #66cc66;">=</span> value * height + heightoffset
&nbsp;
    <span style="color: #808080; font-style: italic;"># edge falloff</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> sphere <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>: <span style="color: #808080; font-style: italic;"># no edge falloff if spherical</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> falloff <span style="color: #66cc66;">!=</span> <span style="color: #ff4500;">0</span>:
            fallofftypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> sqrt<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x*x<span style="color: black;">&#41;</span>**<span style="color: #ff4500;">2</span>+<span style="color: black;">&#40;</span>y*y<span style="color: black;">&#41;</span>**<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> sqrt<span style="color: black;">&#40;</span>x*x+y*y<span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> sqrt<span style="color: black;">&#40;</span>y*y<span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> sqrt<span style="color: black;">&#40;</span>x*x<span style="color: black;">&#41;</span> <span style="color: black;">&#93;</span>
            dist <span style="color: #66cc66;">=</span> fallofftypes<span style="color: black;">&#91;</span> falloff<span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> falloff <span style="color: #66cc66;">==</span><span style="color: #ff4500;">1</span>:
                radius <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span>falloffsize/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>**<span style="color: #ff4500;">2</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                radius <span style="color: #66cc66;">=</span> falloffsize/<span style="color: #ff4500;">2</span>
            value <span style="color: #66cc66;">=</span> value - sealevel
            <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span> dist <span style="color: #66cc66;">&lt;</span> radius <span style="color: black;">&#41;</span>:
                dist <span style="color: #66cc66;">=</span> dist / radius
                dist <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> <span style="color: black;">&#40;</span>dist<span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span>dist<span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span> <span style="color: #ff4500;">3</span>-<span style="color: #ff4500;">2</span>*<span style="color: black;">&#40;</span>dist<span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
                value <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> value - value * dist <span style="color: black;">&#41;</span> + sealevel
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                value <span style="color: #66cc66;">=</span> sealevel
&nbsp;
    <span style="color: #808080; font-style: italic;"># strata / terrace / layered</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> stratatype <span style="color: #66cc66;">!=</span><span style="color: #483d8b;">'0'</span>:
        strata <span style="color: #66cc66;">=</span> strata / height
    <span style="color: #ff7700;font-weight:bold;">if</span> stratatype <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'1'</span>:
        strata *<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">2</span>
        steps <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> sin<span style="color: black;">&#40;</span> value*strata*pi <span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.1</span>/strata*pi <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
        value <span style="color: #66cc66;">=</span> <span style="color: black;">&#40;</span> value * <span style="color: black;">&#40;</span><span style="color: #ff4500;">1.0</span>-<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> + steps*<span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">2.0</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> stratatype <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'2'</span>:
        steps <span style="color: #66cc66;">=</span> -<span style="color: #008000;">abs</span><span style="color: black;">&#40;</span> sin<span style="color: black;">&#40;</span> value*<span style="color: black;">&#40;</span>strata<span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.1</span>/<span style="color: black;">&#40;</span>strata<span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
        value <span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span> value * <span style="color: black;">&#40;</span><span style="color: #ff4500;">1.0</span>-<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> + steps*<span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">2.0</span> 
    <span style="color: #ff7700;font-weight:bold;">elif</span> stratatype <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'3'</span>:
        steps <span style="color: #66cc66;">=</span> <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span> sin<span style="color: black;">&#40;</span> value*<span style="color: black;">&#40;</span>strata<span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> * <span style="color: black;">&#40;</span> <span style="color: #ff4500;">0.1</span>/<span style="color: black;">&#40;</span>strata<span style="color: black;">&#41;</span>*pi <span style="color: black;">&#41;</span> <span style="color: black;">&#41;</span>
        value <span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span> value * <span style="color: black;">&#40;</span><span style="color: #ff4500;">1.0</span>-<span style="color: #ff4500;">0.5</span><span style="color: black;">&#41;</span> + steps*<span style="color: #ff4500;">0.5</span> <span style="color: black;">&#41;</span> * <span style="color: #ff4500;">2.0</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        value <span style="color: #66cc66;">=</span> value
&nbsp;
    <span style="color: #808080; font-style: italic;"># clamp height</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span> value <span style="color: #66cc66;">&lt;</span> sealevel <span style="color: black;">&#41;</span>: value <span style="color: #66cc66;">=</span> sealevel
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span> value <span style="color: #66cc66;">&gt;</span> platlevel <span style="color: black;">&#41;</span>: value <span style="color: #66cc66;">=</span> platlevel
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> value
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;"># generate grid</span>
<span style="color: #ff7700;font-weight:bold;">def</span> grid_gen<span style="color: black;">&#40;</span> sub_d<span style="color: #66cc66;">,</span> size_me<span style="color: #66cc66;">,</span> options <span style="color: black;">&#41;</span>:
&nbsp;
    verts <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    faces <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    edgeloop_prev <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
    delta <span style="color: #66cc66;">=</span> size_me / <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>sub_d - <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
    start <span style="color: #66cc66;">=</span> -<span style="color: black;">&#40;</span>size_me / <span style="color: #ff4500;">2.0</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">for</span> row_x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>sub_d<span style="color: black;">&#41;</span>:
        edgeloop_cur <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        x <span style="color: #66cc66;">=</span> start + row_x * delta
        <span style="color: #ff7700;font-weight:bold;">for</span> row_y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>sub_d<span style="color: black;">&#41;</span>:
            y <span style="color: #66cc66;">=</span> start + row_y * delta
            z <span style="color: #66cc66;">=</span> landscape_gen<span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span>size_me<span style="color: #66cc66;">,</span>options<span style="color: black;">&#41;</span>
&nbsp;
            edgeloop_cur.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>verts<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            verts.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: #66cc66;">,</span>z<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>edgeloop_prev<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
            faces_row <span style="color: #66cc66;">=</span> createFaces<span style="color: black;">&#40;</span>edgeloop_prev<span style="color: #66cc66;">,</span> edgeloop_cur<span style="color: black;">&#41;</span>
            faces.<span style="color: black;">extend</span><span style="color: black;">&#40;</span>faces_row<span style="color: black;">&#41;</span>
&nbsp;
        edgeloop_prev <span style="color: #66cc66;">=</span> edgeloop_cur
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> verts<span style="color: #66cc66;">,</span> faces
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;"># generate sphere</span>
<span style="color: #ff7700;font-weight:bold;">def</span> sphere_gen<span style="color: black;">&#40;</span> sub_d<span style="color: #66cc66;">,</span> size_me<span style="color: #66cc66;">,</span> options <span style="color: black;">&#41;</span>:
&nbsp;
    verts <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    faces <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    edgeloop_prev <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">for</span> row_x <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>sub_d<span style="color: black;">&#41;</span>:
        edgeloop_cur <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> row_y <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>sub_d<span style="color: black;">&#41;</span>:
            u <span style="color: #66cc66;">=</span> sin<span style="color: black;">&#40;</span>row_y*pi*<span style="color: #ff4500;">2</span>/<span style="color: black;">&#40;</span>sub_d-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> * cos<span style="color: black;">&#40;</span>-pi/<span style="color: #ff4500;">2</span>+row_x*pi/<span style="color: black;">&#40;</span>sub_d-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> * size_me/<span style="color: #ff4500;">2</span>
            v <span style="color: #66cc66;">=</span> cos<span style="color: black;">&#40;</span>row_y*pi*<span style="color: #ff4500;">2</span>/<span style="color: black;">&#40;</span>sub_d-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> * cos<span style="color: black;">&#40;</span>-pi/<span style="color: #ff4500;">2</span>+row_x*pi/<span style="color: black;">&#40;</span>sub_d-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> * size_me/<span style="color: #ff4500;">2</span>
            w <span style="color: #66cc66;">=</span> sin<span style="color: black;">&#40;</span>-pi/<span style="color: #ff4500;">2</span>+row_x*pi/<span style="color: black;">&#40;</span>sub_d-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> * size_me/<span style="color: #ff4500;">2</span>
            h <span style="color: #66cc66;">=</span> landscape_gen<span style="color: black;">&#40;</span>u<span style="color: #66cc66;">,</span>v<span style="color: #66cc66;">,</span>w<span style="color: #66cc66;">,</span>size_me<span style="color: #66cc66;">,</span>options<span style="color: black;">&#41;</span> / size_me
            u<span style="color: #66cc66;">,</span>v<span style="color: #66cc66;">,</span>w <span style="color: #66cc66;">=</span> u+u*h<span style="color: #66cc66;">,</span> v+v*h<span style="color: #66cc66;">,</span> w+w*h
&nbsp;
            edgeloop_cur.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>verts<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            verts.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>u<span style="color: #66cc66;">,</span> v<span style="color: #66cc66;">,</span> w<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>edgeloop_prev<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
            faces_row <span style="color: #66cc66;">=</span> createFaces<span style="color: black;">&#40;</span>edgeloop_prev<span style="color: #66cc66;">,</span> edgeloop_cur<span style="color: black;">&#41;</span>
            faces.<span style="color: black;">extend</span><span style="color: black;">&#40;</span>faces_row<span style="color: black;">&#41;</span>
&nbsp;
        edgeloop_prev <span style="color: #66cc66;">=</span> edgeloop_cur
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> verts<span style="color: #66cc66;">,</span> faces
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Add landscape</span>
<span style="color: #ff7700;font-weight:bold;">class</span> landscape_add<span style="color: black;">&#40;</span>bpy.<span style="color: #dc143c;">types</span>.<span style="color: black;">Operator</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;Add a landscape mesh&quot;&quot;&quot;</span>
    bl_idname <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;mesh.landscape_add&quot;</span>
    bl_label <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Landscape&quot;</span>
    bl_options <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'REGISTER'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'UNDO'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'PRESET'</span><span style="color: black;">&#125;</span>
    bl_description <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Add landscape mesh&quot;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># properties</span>
    AutoUpdate <span style="color: #66cc66;">=</span> BoolProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Mesh update&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Update mesh&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    SphereMesh <span style="color: #66cc66;">=</span> BoolProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Sphere&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #008000;">False</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Generate Sphere mesh&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    SmoothMesh <span style="color: #66cc66;">=</span> BoolProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Smooth&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Shade smooth&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    Subdivision <span style="color: #66cc66;">=</span> IntProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Subdivisions&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">4</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">6400</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">64</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Mesh x y subdivisions&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    MeshSize <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Mesh Size&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">100000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">2.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Mesh size&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    RandomSeed <span style="color: #66cc66;">=</span> IntProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Random Seed&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">9999</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Randomize noise origin&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    NoiseSize <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Noise Size&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Noise size&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    NoiseTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;multiFractal&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;multiFractal&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;ridgedMFractal&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;ridgedMFractal&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;hybridMFractal&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;hybridMFractal&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;heteroTerrain&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;heteroTerrain&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;fBm&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;fBm&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;5&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Turbulence&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Turbulence&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;6&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Distorted Noise&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Distorted Noise&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;7&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Marble&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Marble&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;8&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Shattered_hTerrain&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Shattered_hTerrain&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;9&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Strata_hTerrain&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Strata_hTerrain&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
&nbsp;
    NoiseType <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Type&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Noise type&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>NoiseTypes<span style="color: black;">&#41;</span>
&nbsp;
    BasisTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Blender&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Blender&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Perlin&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Perlin&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;NewPerlin&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;NewPerlin&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;5&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F3&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;6&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F4&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;7&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2-F1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2-F1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;8&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi Crackle&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi Crackle&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;9&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Cellnoise&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Cellnoise&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    BasisType <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Basis&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Noise basis&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>BasisTypes<span style="color: black;">&#41;</span>
&nbsp;
    VLBasisTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Blender&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Blender&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Perlin&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Perlin&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;NewPerlin&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;NewPerlin&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;5&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F3&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;6&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F4&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;7&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2-F1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi_F2-F1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;8&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi Crackle&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Voronoi Crackle&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;9&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Cellnoise&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Cellnoise&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    VLBasisType <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;VLBasis&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;VLNoise basis&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>VLBasisTypes<span style="color: black;">&#41;</span>
&nbsp;
    Distortion <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Distortion&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">1000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Distortion amount&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    HardNoise <span style="color: #66cc66;">=</span> BoolProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Hard&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Hard noise&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    NoiseDepth <span style="color: #66cc66;">=</span> IntProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Depth&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">16</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">6</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Noise Depth - number of frequencies in the fBm&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    mDimension <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Dimension&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">2.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;H - fractal dimension of the roughest areas&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    mLacunarity <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Lacunarity&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">6.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">2.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Lacunarity - gap between successive frequencies&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    mOffset <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Offset&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">6.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Offset - raises the terrain from sea level&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    mGain <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Gain&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">6.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Gain - scale factor&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    BiasTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sin&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sin&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Tri&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Tri&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Saw&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Saw&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    MarbleBias <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Bias&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Marble bias&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>BiasTypes<span style="color: black;">&#41;</span>
&nbsp;
    SharpTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Soft&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Soft&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sharp&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sharp&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sharper&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Sharper&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    MarbleSharp <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Sharp&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Marble sharp&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>SharpTypes<span style="color: black;">&#41;</span>
&nbsp;
    ShapeTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Default&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Default&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Ring&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Ring&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Swirl&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Swirl&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Bump&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Bump&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Y&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Y&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;5&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;X&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;X&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    MarbleShape <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Shape&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Marble shape&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>ShapeTypes<span style="color: black;">&#41;</span>
&nbsp;
    Invert <span style="color: #66cc66;">=</span> BoolProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Invert&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #008000;">False</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Invert noise input&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    Height <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Height&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.5</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Height scale&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    Offset <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Offset&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span>-<span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Height offset&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    fallTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 2&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Y&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Y&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;4&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;X&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;X&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    Falloff <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Falloff&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Edge falloff&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>fallTypes<span style="color: black;">&#41;</span>
&nbsp;
    Sealevel <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Sealevel&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span>-<span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Sealevel&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    Plateaulevel <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Plateau&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span>-<span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">10000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Plateau level&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    Strata <span style="color: #66cc66;">=</span> FloatProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Strata&quot;</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">min</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.01</span><span style="color: #66cc66;">,</span>
                <span style="color: #008000;">max</span><span style="color: #66cc66;">=</span><span style="color: #ff4500;">1000.0</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #ff4500;">3.0</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Strata amount&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    StrataTypes <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 1&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 1&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 2&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 2&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span>
                <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 3&quot;</span><span style="color: #66cc66;">,</span><span style="color: #483d8b;">&quot;Type 3&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    StrataType <span style="color: #66cc66;">=</span> EnumProperty<span style="color: black;">&#40;</span>name<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Strata&quot;</span><span style="color: #66cc66;">,</span>
                description<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Strata type&quot;</span><span style="color: #66cc66;">,</span>
                default<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;0&quot;</span><span style="color: #66cc66;">,</span>
                items<span style="color: #66cc66;">=</span>StrataTypes<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
    <span style="color: #808080; font-style: italic;"># Draw</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> draw<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> context<span style="color: black;">&#41;</span>:
        layout <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">layout</span>
&nbsp;
        box <span style="color: #66cc66;">=</span> layout.<span style="color: black;">box</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'AutoUpdate'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'SphereMesh'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'SmoothMesh'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Subdivision'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'MeshSize'</span><span style="color: black;">&#41;</span>
&nbsp;
        box <span style="color: #66cc66;">=</span> layout.<span style="color: black;">box</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseType'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">!=</span> <span style="color: #483d8b;">'7'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'BasisType'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'RandomSeed'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseSize'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'0'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'1'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mOffset'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mGain'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'2'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mOffset'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mGain'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'3'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mOffset'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'4'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'5'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'HardNoise'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'6'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'VLBasisType'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Distortion'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'7'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'MarbleShape'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'MarbleBias'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'MarbleSharp'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Distortion'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'HardNoise'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'8'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mOffset'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Distortion'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'9'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'NoiseDepth'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mDimension'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mLacunarity'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'mOffset'</span><span style="color: black;">&#41;</span>
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Distortion'</span><span style="color: black;">&#41;</span>
&nbsp;
        box <span style="color: #66cc66;">=</span> layout.<span style="color: black;">box</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Invert'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Height'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Offset'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Plateaulevel'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Sealevel'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">SphereMesh</span> <span style="color: #66cc66;">==</span> <span style="color: #008000;">False</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Falloff'</span><span style="color: black;">&#41;</span>
        box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'StrataType'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">StrataType</span> <span style="color: #66cc66;">!=</span> <span style="color: #483d8b;">'0'</span>:
            box.<span style="color: black;">prop</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'Strata'</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
    <span style="color: #808080; font-style: italic;"># Execute</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> execute<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> context<span style="color: black;">&#41;</span>:
&nbsp;
        <span style="color: #808080; font-style: italic;">#mesh update</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">AutoUpdate</span> <span style="color: #66cc66;">!=</span> <span style="color: #ff4500;">0</span>:
&nbsp;
            <span style="color: #808080; font-style: italic;"># turn off undo</span>
            undo <span style="color: #66cc66;">=</span> bpy.<span style="color: black;">context</span>.<span style="color: black;">user_preferences</span>.<span style="color: black;">edit</span>.<span style="color: black;">use_global_undo</span>
            bpy.<span style="color: black;">context</span>.<span style="color: black;">user_preferences</span>.<span style="color: black;">edit</span>.<span style="color: black;">use_global_undo</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># deselect all objects when in object mode</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">select_all</span>.<span style="color: black;">poll</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
                bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">select_all</span><span style="color: black;">&#40;</span>action<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'DESELECT'</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># options</span>
            options <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">RandomSeed</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#0</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">NoiseSize</span><span style="color: #66cc66;">,</span>     <span style="color: #808080; font-style: italic;">#1</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">NoiseType</span><span style="color: #66cc66;">,</span>     <span style="color: #808080; font-style: italic;">#2</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">BasisType</span><span style="color: #66cc66;">,</span>     <span style="color: #808080; font-style: italic;">#3</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">VLBasisType</span><span style="color: #66cc66;">,</span>   <span style="color: #808080; font-style: italic;">#4</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Distortion</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#5</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">HardNoise</span><span style="color: #66cc66;">,</span>     <span style="color: #808080; font-style: italic;">#6</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">NoiseDepth</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#7</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">mDimension</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#8</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">mLacunarity</span><span style="color: #66cc66;">,</span>   <span style="color: #808080; font-style: italic;">#9</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">mOffset</span><span style="color: #66cc66;">,</span>       <span style="color: #808080; font-style: italic;">#10</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">mGain</span><span style="color: #66cc66;">,</span>         <span style="color: #808080; font-style: italic;">#11</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">MarbleBias</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#12</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">MarbleSharp</span><span style="color: #66cc66;">,</span>   <span style="color: #808080; font-style: italic;">#13</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">MarbleShape</span><span style="color: #66cc66;">,</span>   <span style="color: #808080; font-style: italic;">#14</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Invert</span><span style="color: #66cc66;">,</span>        <span style="color: #808080; font-style: italic;">#15</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Height</span><span style="color: #66cc66;">,</span>        <span style="color: #808080; font-style: italic;">#16</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Offset</span><span style="color: #66cc66;">,</span>        <span style="color: #808080; font-style: italic;">#17</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Falloff</span><span style="color: #66cc66;">,</span>       <span style="color: #808080; font-style: italic;">#18</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Sealevel</span><span style="color: #66cc66;">,</span>      <span style="color: #808080; font-style: italic;">#19</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Plateaulevel</span><span style="color: #66cc66;">,</span>  <span style="color: #808080; font-style: italic;">#20</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">Strata</span><span style="color: #66cc66;">,</span>        <span style="color: #808080; font-style: italic;">#21</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">StrataType</span><span style="color: #66cc66;">,</span>    <span style="color: #808080; font-style: italic;">#22</span>
                <span style="color: #008000;">self</span>.<span style="color: black;">SphereMesh</span>     <span style="color: #808080; font-style: italic;">#23</span>
                <span style="color: black;">&#93;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Main function</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">SphereMesh</span> <span style="color: #66cc66;">!=</span><span style="color: #ff4500;">0</span>:
                <span style="color: #808080; font-style: italic;"># sphere</span>
                verts<span style="color: #66cc66;">,</span> faces <span style="color: #66cc66;">=</span> sphere_gen<span style="color: black;">&#40;</span> <span style="color: #008000;">self</span>.<span style="color: black;">Subdivision</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">MeshSize</span><span style="color: #66cc66;">,</span> options <span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #808080; font-style: italic;"># grid</span>
                verts<span style="color: #66cc66;">,</span> faces <span style="color: #66cc66;">=</span> grid_gen<span style="color: black;">&#40;</span> <span style="color: #008000;">self</span>.<span style="color: black;">Subdivision</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">MeshSize</span><span style="color: #66cc66;">,</span> options <span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># create mesh object</span>
            obj <span style="color: #66cc66;">=</span> create_mesh_object<span style="color: black;">&#40;</span>context<span style="color: #66cc66;">,</span> verts<span style="color: #66cc66;">,</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> faces<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Landscape&quot;</span><span style="color: black;">&#41;</span>
            bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">mode_set</span><span style="color: black;">&#40;</span>mode<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'EDIT'</span><span style="color: black;">&#41;</span>
            bpy.<span style="color: black;">ops</span>.<span style="color: black;">mesh</span>.<span style="color: black;">normals_make_consistent</span><span style="color: black;">&#40;</span>inside<span style="color: #66cc66;">=</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
            bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">mode_set</span><span style="color: black;">&#40;</span>mode<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'OBJECT'</span><span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># sphere, remove doubles</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">SphereMesh</span> <span style="color: #66cc66;">!=</span><span style="color: #ff4500;">0</span>:
                bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">mode_set</span><span style="color: black;">&#40;</span>mode<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'EDIT'</span><span style="color: black;">&#41;</span>
                bpy.<span style="color: black;">ops</span>.<span style="color: black;">mesh</span>.<span style="color: black;">remove_doubles</span><span style="color: black;">&#40;</span>mergedist<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.0001</span><span style="color: black;">&#41;</span>
                bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">mode_set</span><span style="color: black;">&#40;</span>mode<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'OBJECT'</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Shade smooth</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">SmoothMesh</span> <span style="color: #66cc66;">!=</span><span style="color: #ff4500;">0</span>:
                <span style="color: #ff7700;font-weight:bold;">if</span> bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">shade_smooth</span>.<span style="color: black;">poll</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
                    bpy.<span style="color: black;">ops</span>.<span style="color: #008000;">object</span>.<span style="color: black;">shade_smooth</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">else</span>: <span style="color: #808080; font-style: italic;"># edit mode</span>
                    bpy.<span style="color: black;">ops</span>.<span style="color: black;">mesh</span>.<span style="color: black;">faces_shade_smooth</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># restore pre operator undo state</span>
            bpy.<span style="color: black;">context</span>.<span style="color: black;">user_preferences</span>.<span style="color: black;">edit</span>.<span style="color: black;">use_global_undo</span> <span style="color: #66cc66;">=</span> undo
&nbsp;
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'FINISHED'</span><span style="color: black;">&#125;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#123;</span><span style="color: #483d8b;">'PASS_THROUGH'</span><span style="color: black;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">###------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;"># Register</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># Define &quot;Landscape&quot; menu</span>
<span style="color: #ff7700;font-weight:bold;">def</span> menu_func_landscape<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span> context<span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.<span style="color: black;">layout</span>.<span style="color: #dc143c;">operator</span><span style="color: black;">&#40;</span>landscape_add.<span style="color: black;">bl_idname</span><span style="color: #66cc66;">,</span> text<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Landscape&quot;</span><span style="color: #66cc66;">,</span> icon<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;PLUGIN&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> register<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    bpy.<span style="color: black;">utils</span>.<span style="color: black;">register_module</span><span style="color: black;">&#40;</span>__name__<span style="color: black;">&#41;</span>
&nbsp;
    bpy.<span style="color: #dc143c;">types</span>.<span style="color: black;">INFO_MT_mesh_add</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>menu_func_landscape<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> unregister<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    bpy.<span style="color: black;">utils</span>.<span style="color: black;">unregister_module</span><span style="color: black;">&#40;</span>__name__<span style="color: black;">&#41;</span>
&nbsp;
    bpy.<span style="color: #dc143c;">types</span>.<span style="color: black;">INFO_MT_mesh_add</span>.<span style="color: black;">remove</span><span style="color: black;">&#40;</span>menu_func_landscape<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    register<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h5>Unity Object to Terrain &#8211; Object2Terrain.js</h5>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">@</span>MenuItem <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Terrain/Object to Terrain&quot;</span><span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">function</span> Object2Terrain <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// See if a valid object is selected</span>
	<span style="color: #000066; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> Selection.<span style="color: #660066;">activeObject</span> as GameObject<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>obj <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
		EditorUtility.<span style="color: #660066;">DisplayDialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;No object selected&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Please select an object.&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Cancel&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">GetComponent</span><span style="color: #009900;">&#40;</span>MeshFilter<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		EditorUtility.<span style="color: #660066;">DisplayDialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;No mesh selected&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Please select an object with a mesh.&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Cancel&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">GetComponent</span><span style="color: #009900;">&#40;</span>MeshFilter<span style="color: #009900;">&#41;</span> as MeshFilter<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">sharedMesh</span> <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		EditorUtility.<span style="color: #660066;">DisplayDialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;No mesh selected&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Please select an object with a valid mesh.&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Cancel&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Terrain.<span style="color: #660066;">activeTerrain</span> <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		EditorUtility.<span style="color: #660066;">DisplayDialog</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;No terrain found&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Please make sure a terrain exists.&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Cancel&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
	<span style="color: #000066; font-weight: bold;">var</span> terrain <span style="color: #339933;">=</span> Terrain.<span style="color: #660066;">activeTerrain</span>.<span style="color: #660066;">terrainData</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// If there's no mesh collider, add one (and then remove it later when done)</span>
	<span style="color: #000066; font-weight: bold;">var</span> addedCollider <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> addedMesh <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> objCollider <span style="color: #339933;">=</span> obj.<span style="color: #660066;">collider</span> as MeshCollider<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objCollider <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		objCollider <span style="color: #339933;">=</span> obj.<span style="color: #660066;">AddComponent</span><span style="color: #009900;">&#40;</span>MeshCollider<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		addedCollider <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objCollider.<span style="color: #660066;">sharedMesh</span> <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		objCollider.<span style="color: #660066;">sharedMesh</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>obj.<span style="color: #660066;">GetComponent</span><span style="color: #009900;">&#40;</span>MeshFilter<span style="color: #009900;">&#41;</span> as MeshFilter<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">sharedMesh</span><span style="color: #339933;">;</span>
		addedMesh <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	Undo.<span style="color: #660066;">RegisterUndo</span> <span style="color: #009900;">&#40;</span>terrain<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Object to Terrain&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">var</span> resolutionX <span style="color: #339933;">=</span> terrain.<span style="color: #660066;">heightmapWidth</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> resolutionZ <span style="color: #339933;">=</span> terrain.<span style="color: #660066;">heightmapHeight</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> heights <span style="color: #339933;">=</span> terrain.<span style="color: #660066;">GetHeights</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> resolutionX<span style="color: #339933;">,</span> resolutionZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Use bounds a bit smaller than the actual object; otherwise raycasting tends to miss at the edges</span>
	<span style="color: #000066; font-weight: bold;">var</span> objectBounds <span style="color: #339933;">=</span> objCollider.<span style="color: #660066;">bounds</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> leftEdge <span style="color: #339933;">=</span> objectBounds.<span style="color: #660066;">center</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">-</span> objectBounds.<span style="color: #660066;">extents</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">+</span> .01<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> bottomEdge <span style="color: #339933;">=</span> objectBounds.<span style="color: #660066;">center</span>.<span style="color: #660066;">z</span> <span style="color: #339933;">-</span> objectBounds.<span style="color: #660066;">extents</span>.<span style="color: #660066;">z</span> <span style="color: #339933;">+</span> .01<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> stepX <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>objectBounds.<span style="color: #660066;">size</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">-</span> .019<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> resolutionX<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> stepZ <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>objectBounds.<span style="color: #660066;">size</span>.<span style="color: #660066;">z</span> <span style="color: #339933;">-</span> .019<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> resolutionZ<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Set up raycast vars</span>
	<span style="color: #000066; font-weight: bold;">var</span> y <span style="color: #339933;">=</span> objectBounds.<span style="color: #660066;">center</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> objectBounds.<span style="color: #660066;">extents</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> .01<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> hit <span style="color: #339933;">:</span> RaycastHit<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> ray <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">new</span> Ray<span style="color: #009900;">&#40;</span>Vector3.<span style="color: #660066;">zero</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span>Vector3.<span style="color: #660066;">up</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> rayDistance <span style="color: #339933;">=</span> objectBounds.<span style="color: #660066;">size</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> .02<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">var</span> heightFactor <span style="color: #339933;">=</span> <span style="color: #CC0000;">1.0</span> <span style="color: #339933;">/</span> rayDistance<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Do raycasting samples over the object to see what terrain heights should be</span>
	<span style="color: #000066; font-weight: bold;">var</span> z <span style="color: #339933;">=</span> bottomEdge<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>zCount <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> zCount <span style="color: #339933;">&lt;</span> resolutionZ<span style="color: #339933;">;</span> zCount<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> leftEdge<span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>xCount <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> xCount <span style="color: #339933;">&lt;</span> resolutionX<span style="color: #339933;">;</span> xCount<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			ray.<span style="color: #660066;">origin</span> <span style="color: #339933;">=</span> Vector3<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> z<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>objCollider.<span style="color: #660066;">Raycast</span><span style="color: #009900;">&#40;</span>ray<span style="color: #339933;">,</span> hit<span style="color: #339933;">,</span> rayDistance<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				heights<span style="color: #009900;">&#91;</span>zCount<span style="color: #339933;">,</span> xCount<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">1.0</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>y <span style="color: #339933;">-</span> hit.<span style="color: #660066;">point</span>.<span style="color: #660066;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>heightFactor<span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
				heights<span style="color: #009900;">&#91;</span>zCount<span style="color: #339933;">,</span> xCount<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0.0</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			x <span style="color: #339933;">+=</span> stepX<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		z <span style="color: #339933;">+=</span> stepZ<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	terrain.<span style="color: #660066;">SetHeights</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> heights<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>addedMesh<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		objCollider.<span style="color: #660066;">sharedMesh</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>addedCollider<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		DestroyImmediate<span style="color: #009900;">&#40;</span>objCollider<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/unity-3d-terrain-from-blender-ant-landscape-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a terrain for Unity 3D with Photoshop</title>
		<link>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/</link>
		<comments>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 07:39:38 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[terrain]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2070</guid>
		<description><![CDATA[Terrains in Unity may be created from height maps designed with Photoshop. Please view the full post to see the Unity content. Height maps should be sized to a power of two plus one (65, 129, 257, 513, 1025, 2049&#8230;]]></description>
				<content:encoded><![CDATA[<p>Terrains in Unity may be created from height maps designed with Photoshop.</p>
<p><span id="more-2070"></span></p>
<p><em>Please view the full post to see the Unity content.</em></p>
<a class="button  " href="http://jasonsturges.com/labs/unity/terrain-photoshop-example/terrain-photoshop-example.html" target="_self">Launch website</a>
<p>Height maps should be sized to a power of two plus one (65, 129, 257, 513, 1025, 2049 in pixels) for width and height.</p>
<p>In Photoshop, start by creating a new image by <i>File » New</i></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-new-terrain/" rel="attachment wp-att-2044"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-new-terrain-300x169.png" alt="photoshop-new-terrain" width="300" height="169" class="alignnone size-medium wp-image-2044" /></a></p>
<p>Adjust foreground and background colors to height thresholds.  Lighter colors will raise elevation to peaks, while darker colors sink to origin.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-foreground-background-colors/" rel="attachment wp-att-2045"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-foreground-background-colors.png" alt="photoshop-foreground-background-colors" width="35" height="53" class="alignnone size-full wp-image-2045" /></a></p>
<p>Seed the terrain height map by rendering clouds.  In Photoshop, select <i>Filter » Render » Clouds</i>.  </p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-filter-render-clouds/" rel="attachment wp-att-2046"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-filter-render-clouds-300x300.png" alt="photoshop-filter-render-clouds" width="300" height="300" class="alignnone size-medium wp-image-2046" /></a></p>
<p>This alone may be used to generate a terrain.</p>
<p>Applying additional filters may enhance the terrain, such as adding difference clouds in Photoshop by selecting <i>Filter » Render » Difference Clouds</i>.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-filter-render-difference-clouds/" rel="attachment wp-att-2047"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-filter-render-difference-clouds-300x300.png" alt="photoshop-filter-render-difference-clouds" width="300" height="300" class="alignnone size-medium wp-image-2047" /></a></p>
<p>Further enhance by applying Photoshop&#8217;s Plastic Wrap filter:</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-plastic-wrap/" rel="attachment wp-att-2048"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-plastic-wrap-300x300.png" alt="terrain-plastic-wrap" width="300" height="300" class="alignnone size-medium wp-image-2048" /></a></p>
<p>Numerous filters enhance a terrain, such as bas relief, craquelure, cutout, fresco, sumi-e, or watercolor:</p>

<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-bas-relief/' title='terrain-bas-relief'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-bas-relief-150x150.png" class="attachment-thumbnail" alt="terrain-bas-relief" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-craquelure/' title='terrain-craquelure'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-craquelure-150x150.png" class="attachment-thumbnail" alt="terrain-craquelure" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-cutout/' title='terrain-cutout'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-cutout-150x150.png" class="attachment-thumbnail" alt="terrain-cutout" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-fresco/' title='terrain-fresco'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-fresco-150x150.png" class="attachment-thumbnail" alt="terrain-fresco" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-sumi-e/' title='terrain-sumi-e'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-sumi-e-150x150.png" class="attachment-thumbnail" alt="terrain-sumi-e" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-watercolor/' title='terrain-watercolor'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-watercolor-150x150.png" class="attachment-thumbnail" alt="terrain-watercolor" /></a>

<p>Unity imports terrain height map data as Photoshop Raw with a single channel.</p>
<p>In Photoshop, remove all channels except one.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/photoshop-channels/" rel="attachment wp-att-2084"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-channels-149x300.png" alt="photoshop-channels" width="149" height="300" class="alignnone size-medium wp-image-2084" /></a></p>
<p>In Photoshop, save as a Photoshop Raw (.raw) file.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/photoshop-raw/" rel="attachment wp-att-2071"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-raw.png" alt="photoshop-raw" width="440" height="158" class="alignnone size-full wp-image-2071" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/photoshop-raw-options/" rel="attachment wp-att-2072"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-raw-options.png" alt="photoshop-raw-options" width="364" height="177" class="alignnone size-full wp-image-2072" /></a></p>
<p>In Unity, create a new terrain selecting <i>Terrain » Create Terrain</i></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/create-terrain/" rel="attachment wp-att-2073"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/create-terrain.png" alt="create-terrain" width="278" height="164" class="alignnone size-full wp-image-2073" /></a></p>
<p>This will create new terrain asset in Unity.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-new-terrain/" rel="attachment wp-att-2074"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-new-terrain-300x245.png" alt="unity-new-terrain" width="300" height="245" class="alignnone size-medium wp-image-2074" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-new-terrain-asset/" rel="attachment wp-att-2086"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-new-terrain-asset-300x101.png" alt="unity-new-terrain-asset" width="300" height="101" class="alignnone size-medium wp-image-2086" /></a></p>
<p>In Unity, import the raw height map by selecting <i>Terrain » Import Heightmap &#8211; Raw&#8230;</i> and select the Photoshop Raw image.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-import-heightmap/" rel="attachment wp-att-2078"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-import-heightmap.png" alt="unity-import-heightmap" width="278" height="164" class="alignnone size-full wp-image-2078" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-import-heightmap-options/" rel="attachment wp-att-2080"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-import-heightmap-options.png" alt="unity-import-heightmap-options" width="322" height="257" class="alignnone size-full wp-image-2080" /></a></p>
<p>In Unity, the terrain will reflect the height map.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-terrain/" rel="attachment wp-att-2082"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-300x139.png" alt="unity-terrain" width="300" height="139" class="alignnone size-medium wp-image-2082" /></a></p>
<p>Flattening the center of the texture and painting texture, here is an example desert scene.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-flattened-center-terrain/" rel="attachment wp-att-2097"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-flattened-center-terrain-300x300.png" alt="unity-flattened-center-terrain" width="300" height="300" class="alignnone size-medium wp-image-2097" /></a></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/unity-terrain-paint-texture/" rel="attachment wp-att-2093"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/unity-terrain-paint-texture-300x240.png" alt="unity-terrain-paint-texture" width="300" height="240" class="alignnone size-medium wp-image-2093" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-unity-3d-with-photoshop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating a terrain for Away3d with Photoshop</title>
		<link>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/</link>
		<comments>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 02:47:04 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Stage3D]]></category>
		<category><![CDATA[terrain]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2043</guid>
		<description><![CDATA[Terrains in Away3D may be created from height maps designed with Photoshop. Height maps should be sized to a power of two (64, 128, 256, 512, 1024, 2048 in pixels) for width and height. In Photoshop, start by creating a&#8230;]]></description>
				<content:encoded><![CDATA[<p>Terrains in Away3D may be created from height maps designed with Photoshop.</p>
<p><span id="more-2043"></span></p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/terrain-example/Away3dTerrainExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/terrain-example/Away3dTerrainExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/terrain-example/Away3dTerrainExample.html" target="_self">Launch website</a>
<p>Height maps should be sized to a power of two (64, 128, 256, 512, 1024, 2048 in pixels) for width and height.</p>
<p>In Photoshop, start by creating a new image by <i>File » New</i></p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-new-terrain/" rel="attachment wp-att-2044"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-new-terrain-300x169.png" alt="photoshop-new-terrain" width="300" height="169" class="alignnone size-medium wp-image-2044" /></a></p>
<p>Adjust foreground and background colors to height thresholds.  Lighter colors will raise elevation to peaks, while darker colors sink to origin.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-foreground-background-colors/" rel="attachment wp-att-2045"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-foreground-background-colors.png" alt="photoshop-foreground-background-colors" width="35" height="53" class="alignnone size-full wp-image-2045" /></a></p>
<p>Seed the terrain height map by rendering clouds.  In Photoshop, select <i>Filter » Render » Clouds</i>.  </p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-filter-render-clouds/" rel="attachment wp-att-2046"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-filter-render-clouds-300x300.png" alt="photoshop-filter-render-clouds" width="300" height="300" class="alignnone size-medium wp-image-2046" /></a></p>
<p>This alone may be used to generate a terrain.</p>
<p>Applying additional filters may enhance the terrain, such as adding difference clouds in Photoshop by selecting <i>Filter » Render » Difference Clouds</i>.</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/photoshop-filter-render-difference-clouds/" rel="attachment wp-att-2047"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/photoshop-filter-render-difference-clouds-300x300.png" alt="photoshop-filter-render-difference-clouds" width="300" height="300" class="alignnone size-medium wp-image-2047" /></a></p>
<p>Further enhance by applying Photoshop&#8217;s Plastic Wrap filter:</p>
<p><a href="http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-plastic-wrap/" rel="attachment wp-att-2048"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-plastic-wrap-300x300.png" alt="terrain-plastic-wrap" width="300" height="300" class="alignnone size-medium wp-image-2048" /></a></p>
<p>Numerous filters enhance a terrain, such as bas relief, craquelure, cutout, fresco, sumi-e, or watercolor:</p>

<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-bas-relief/' title='terrain-bas-relief'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-bas-relief-150x150.png" class="attachment-thumbnail" alt="terrain-bas-relief" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-craquelure/' title='terrain-craquelure'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-craquelure-150x150.png" class="attachment-thumbnail" alt="terrain-craquelure" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-cutout/' title='terrain-cutout'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-cutout-150x150.png" class="attachment-thumbnail" alt="terrain-cutout" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-fresco/' title='terrain-fresco'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-fresco-150x150.png" class="attachment-thumbnail" alt="terrain-fresco" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-sumi-e/' title='terrain-sumi-e'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-sumi-e-150x150.png" class="attachment-thumbnail" alt="terrain-sumi-e" /></a>
<a href='http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/terrain-watercolor/' title='terrain-watercolor'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-watercolor-150x150.png" class="attachment-thumbnail" alt="terrain-watercolor" /></a>

<p>Implementing in code, embed the terrain height map asset:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscriopt" style="font-family:monospace;">[Embed(source = &quot;assets/terrain/terrain-heightmap.png&quot;)]
protected static const HeightMap:Class;</pre></td></tr></table></div>

<p>Terrain will require an elevation and material:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;</pre></td></tr></table></div>

<p>Instantiate terrain materials in material initialization.  In this example, the height map itself is used as the visible texture.  Any texture asset could be embedded for use as the TextureMaterial.  Splat maps are also useful for textures at varying points in the elevation.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// terrain</span>
terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
terrainMaterial.<span style="color: #006600;">ambientColor</span> = 0x303040;
terrainMaterial.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
terrainMaterial.<span style="color: #006600;">specular</span> = .2;
terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span>fogMethod<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>Instantiate the elevation and add it to the scene in object initialization.  Width, height, and depth parameters are passed to the new Elevation.  In this example, it&#8217;s a 5000&#215;5000 terrain, with height set to 500.  Level of detail is controlled by number of segments, such as 64&#215;64 segments in this example.  This can be increased for greater detail, but at a computational cost.  If too many segments, error #3670: Buffer too big will be thrown.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">64</span>, <span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span>;
scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>For a first person controller, camera height must be manually adjusted along the y-axis while traversing the terrain.  In render, set camera y:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> += <span style="color: #cc66cc;">0.2</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>terrain.<span style="color: #006600;">getHeightAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span>, <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">20</span> - <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a> (<a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">SWC</a>)</li>
</ul>
<h5>Skybox</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negx/' title='sky_negX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negX-150x150.jpg" class="attachment-thumbnail" alt="sky_negX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negy/' title='sky_negY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negY-150x150.jpg" class="attachment-thumbnail" alt="sky_negY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negz/' title='sky_negZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negZ-150x150.jpg" class="attachment-thumbnail" alt="sky_negZ" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posx/' title='sky_posX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posX-150x150.jpg" class="attachment-thumbnail" alt="sky_posX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posy/' title='sky_posY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posY-150x150.jpg" class="attachment-thumbnail" alt="sky_posY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posz/' title='sky_posZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posZ-150x150.jpg" class="attachment-thumbnail" alt="sky_posZ" /></a>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">View3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">controllers</span>.<span style="color: #006600;">FirstPersonController</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">debug</span>.<span style="color: #006600;">AwayStats</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">extrusions</span>.<span style="color: #006600;">Elevation</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">TextureMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FogMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">SkyBox</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapCubeTexture</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cast</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageDisplayState</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">KeyboardEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">ui</span>.<span style="color: #006600;">Keyboard</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0x0, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Away3dTerrainExample <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  constant</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== terrain assets ======== */</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/terrain/terrain-heightmap.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const HeightMap:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== skybox assets ======== */</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> antiAlias:uint = <span style="color: #cc66cc;">4</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> awayStats:AwayStats;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> view:View3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// terrain</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;
&nbsp;
		<span style="color: #808080; font-style: italic;">// skybox</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> cubeTexture:BitmapCubeTexture;
&nbsp;
		<span style="color: #808080; font-style: italic;">// lights</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
		protected <span style="color: #000000; font-weight: bold;">var</span> fogMethod:FogMethod;
&nbsp;
		<span style="color: #808080; font-style: italic;">// camera controller</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> cameraController:FirstPersonController;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1000</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// rotation variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> moving:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastPanAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastTiltAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseX:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseY:<span style="color: #0066CC;">Number</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// movement variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> drag:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0.5</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Away3dTerrainExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
&nbsp;
			initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== initialization ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view = <span style="color: #000000; font-weight: bold;">new</span> View3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">antiAlias</span> = antiAlias;
&nbsp;
			scene = view.<span style="color: #006600;">scene</span>;
&nbsp;
			awayStats = <span style="color: #000000; font-weight: bold;">new</span> AwayStats<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">camera</span> = view.<span style="color: #0066CC;">camera</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">14000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = .05;
&nbsp;
			cameraController = <span style="color: #000000; font-weight: bold;">new</span> FirstPersonController<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>, <span style="color: #cc66cc;">180</span>, <span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">80</span>, <span style="color: #cc66cc;">80</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			fogMethod = <span style="color: #000000; font-weight: bold;">new</span> FogMethod<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">8000</span>, 0xcfd9de<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// skybox</span>
			cubeTexture = <span style="color: #000000; font-weight: bold;">new</span> BitmapCubeTexture<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosZ<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegZ<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// terrain</span>
			terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
			terrainMaterial.<span style="color: #006600;">ambientColor</span> = 0x303040;
			terrainMaterial.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			terrainMaterial.<span style="color: #006600;">specular</span> = .2;
			terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span>fogMethod<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// skybox</span>
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SkyBox<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// terrain</span>
			terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">64</span>, <span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ADDED_TO_STAGE</span>, addedToStageHandler<span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">REMOVED_FROM_STAGE</span>, removedFromStageHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> addedToStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #0066CC;">width</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>;
			view.<span style="color: #0066CC;">height</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Enter full screen mode specifying whether display
		 * remains interactive to keyboard events.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> fullScreen<span style="color: #66cc66;">&#40;</span>interactive:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>interactive<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">true</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreenInteractive</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN_INTERACTIVE</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">false</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreen</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>moving<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				cameraController.<span style="color: #006600;">panAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span> - lastMouseX<span style="color: #66cc66;">&#41;</span> + lastPanAngle;
				cameraController.<span style="color: #006600;">tiltAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span> - lastMouseY<span style="color: #66cc66;">&#41;</span> + lastTiltAngle;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>walkSpeed <span style="color: #66cc66;">||</span> walkAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				walkSpeed = <span style="color: #66cc66;">&#40;</span>walkSpeed + walkAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					walkSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementWalk</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>strafeSpeed <span style="color: #66cc66;">||</span> strafeAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				strafeSpeed = <span style="color: #66cc66;">&#40;</span>strafeSpeed + strafeAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					strafeSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementStrafe</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> += <span style="color: #cc66cc;">0.2</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>terrain.<span style="color: #006600;">getHeightAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span>, <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">20</span> - <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			view.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> removedFromStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			removeChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			cameraController = <span style="color: #000000; font-weight: bold;">null</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== interaction ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseDownHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// indicate camera is moving and set state variables</span>
			moving = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
			lastPanAngle = cameraController.<span style="color: #006600;">panAngle</span>;
			lastTiltAngle = cameraController.<span style="color: #006600;">tiltAngle</span>;
			lastMouseX = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span>;
			lastMouseY = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseUpHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseLeaveHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseWheelHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyDownHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// full screen</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">F</span>:
					fullScreen<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #b1b100;">break</span>;
&nbsp;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
					walkAcceleration = walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = -walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
					strafeAcceleration = -strafeIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = strafeIncrement;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyUpHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/creating-a-terrain-for-away3d-with-photoshop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Away3d Water Example</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-water-example/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-water-example/#comments</comments>
		<pubDate>Mon, 17 Dec 2012 01:09:47 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[skybox]]></category>
		<category><![CDATA[Stage3D]]></category>
		<category><![CDATA[terrain]]></category>
		<category><![CDATA[water]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2021</guid>
		<description><![CDATA[An example implementation of water in Away3D, using the first person controller template from my previous blog post. Using water normals from Away3D example project, embed the asset to the class: &#91;Embed&#40;source = &#34;assets/water/water_normals.jpg&#34;&#41;&#93; protected static const WaterNormals:Class; Water will&#8230;]]></description>
				<content:encoded><![CDATA[<p>An example implementation of water in Away3D, using the <a href="http://www.jasonsturges.com/2012/12/away3d-template/">first person controller template</a> from my previous blog post.</p>
<p><span id="more-2021"></span><br />

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/water-example/Away3dWaterExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/water-example/Away3dWaterExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->
</p>
<a class="button  " href="http://jasonsturges.com/labs/away3d/water-example/Away3dWaterExample.html" target="_self">Launch website</a>
<p>Using water normals from Away3D example project, embed the asset to the class:</p>
<p><a href="http://www.jasonsturges.com/2012/12/away3d-water-example/water_normals/" rel="attachment wp-att-2022"><img src="http://www.jasonsturges.com/wp-content/uploads/2012/12/water_normals-300x300.jpg" alt="water_normals" width="300" height="300" class="alignnone size-medium wp-image-2022" /></a></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/water/water_normals.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
protected <span style="color: #0066CC;">static</span> const WaterNormals:<span style="color: #000000; font-weight: bold;">Class</span>;</pre></td></tr></table></div>

<p>Water will use a TextureMaterial, SimpleWaterNormalMethod, FresnelSpecularMethod, and a Mesh to render a plane of the water surface:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">var</span> waterMaterial:TextureMaterial;
protected <span style="color: #000000; font-weight: bold;">var</span> waterMethod:SimpleWaterNormalMethod;
protected <span style="color: #000000; font-weight: bold;">var</span> fresnelMethod:FresnelSpecularMethod;
protected <span style="color: #000000; font-weight: bold;">var</span> plane:Mesh;</pre></td></tr></table></div>

<p>In the material initialization, instantiate the water materials.  In this example, a skybox will be used to map an environment to the water material:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">// water</span>
	waterMethod = <span style="color: #000000; font-weight: bold;">new</span> SimpleWaterNormalMethod<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span>, Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
	fresnelMethod = <span style="color: #000000; font-weight: bold;">new</span> FresnelSpecularMethod<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	fresnelMethod.<span style="color: #006600;">normalReflectance</span> = .3;
&nbsp;
	waterMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapTexture<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">512</span>, <span style="color: #cc66cc;">512</span>, <span style="color: #000000; font-weight: bold;">true</span>, 0xaa404070<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
	waterMaterial.<span style="color: #006600;">alphaBlending</span> = <span style="color: #000000; font-weight: bold;">true</span>;
	waterMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
	waterMaterial.<span style="color: #006600;">repeat</span> = <span style="color: #000000; font-weight: bold;">true</span>;
	waterMaterial.<span style="color: #006600;">normalMethod</span> = waterMethod;
	waterMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> EnvMapMethod<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
	waterMaterial.<span style="color: #006600;">specularMethod</span> = fresnelMethod;
	waterMaterial.<span style="color: #006600;">gloss</span> = <span style="color: #cc66cc;">100</span>;
	waterMaterial.<span style="color: #006600;">specular</span> = <span style="color: #cc66cc;">1</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Instantiate a mesh of the water plane in object initialization:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">// water</span>
	plane = <span style="color: #000000; font-weight: bold;">new</span> Mesh<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PlaneGeometry<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>, waterMaterial<span style="color: #66cc66;">&#41;</span>;
	plane.<span style="color: #006600;">geometry</span>.<span style="color: #006600;">scaleUV</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
	plane.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">5</span>;
	scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Each frame when rendering the scene, apply an offset to the water normals:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="actionscript" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	waterMethod.<span style="color: #006600;">water1OffsetX</span> += .001;
	waterMethod.<span style="color: #006600;">water1OffsetY</span> += .001;
	waterMethod.<span style="color: #006600;">water2OffsetX</span> += .0007;
	waterMethod.<span style="color: #006600;">water2OffsetY</span> += .0006;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a> (<a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">SWC</a>)</li>
</ul>
<h5>Skybox</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negx/' title='sky_negX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negX-150x150.jpg" class="attachment-thumbnail" alt="sky_negX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negy/' title='sky_negY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negY-150x150.jpg" class="attachment-thumbnail" alt="sky_negY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_negz/' title='sky_negZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_negZ-150x150.jpg" class="attachment-thumbnail" alt="sky_negZ" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posx/' title='sky_posX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posX-150x150.jpg" class="attachment-thumbnail" alt="sky_posX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posy/' title='sky_posY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posY-150x150.jpg" class="attachment-thumbnail" alt="sky_posY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/sky_posz/' title='sky_posZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/sky_posZ-150x150.jpg" class="attachment-thumbnail" alt="sky_posZ" /></a>

<h5>Terrain</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/terrain-heightmap/' title='terrain-heightmap'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-heightmap-150x150.png" class="attachment-thumbnail" alt="terrain-heightmap" /></a>

<h5>Water</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/water_normals/' title='water_normals'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/water_normals-150x150.jpg" class="attachment-thumbnail" alt="water_normals" /></a>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">View3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">controllers</span>.<span style="color: #006600;">FirstPersonController</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">debug</span>.<span style="color: #006600;">AwayStats</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">entities</span>.<span style="color: #006600;">Mesh</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">extrusions</span>.<span style="color: #006600;">Elevation</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">TextureMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">EnvMapMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FogMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FresnelSpecularMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">SimpleWaterNormalMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">PlaneGeometry</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">SkyBox</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapCubeTexture</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapTexture</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cast</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">BitmapData</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageDisplayState</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">KeyboardEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">ui</span>.<span style="color: #006600;">Keyboard</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0x0, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Away3dWaterExample <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  constant</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== water assets ======== */</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/water/water_normals.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const WaterNormals:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== terrain assets ======== */</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/terrain/terrain-heightmap.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const HeightMap:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== skybox assets ======== */</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_posZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/sky/sky_negZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> antiAlias:uint = <span style="color: #cc66cc;">4</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> awayStats:AwayStats;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> view:View3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// water</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> waterMaterial:TextureMaterial;
		protected <span style="color: #000000; font-weight: bold;">var</span> waterMethod:SimpleWaterNormalMethod;
		protected <span style="color: #000000; font-weight: bold;">var</span> fresnelMethod:FresnelSpecularMethod;
		protected <span style="color: #000000; font-weight: bold;">var</span> plane:Mesh;
&nbsp;
		<span style="color: #808080; font-style: italic;">// terrain</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;
&nbsp;
		<span style="color: #808080; font-style: italic;">// skybox</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> cubeTexture:BitmapCubeTexture;
&nbsp;
		<span style="color: #808080; font-style: italic;">// lights</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
		protected <span style="color: #000000; font-weight: bold;">var</span> fogMethod:FogMethod;
&nbsp;
		<span style="color: #808080; font-style: italic;">// camera controller</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> cameraController:FirstPersonController;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1000</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// rotation variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> moving:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastPanAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastTiltAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseX:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseY:<span style="color: #0066CC;">Number</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// movement variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> drag:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0.5</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Away3dWaterExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
&nbsp;
			initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== initialization ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view = <span style="color: #000000; font-weight: bold;">new</span> View3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">antiAlias</span> = antiAlias;
&nbsp;
			scene = view.<span style="color: #006600;">scene</span>;
&nbsp;
			awayStats = <span style="color: #000000; font-weight: bold;">new</span> AwayStats<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">camera</span> = view.<span style="color: #0066CC;">camera</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">14000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = .05;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">20</span>;
&nbsp;
			cameraController = <span style="color: #000000; font-weight: bold;">new</span> FirstPersonController<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>, <span style="color: #cc66cc;">180</span>, <span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">80</span>, <span style="color: #cc66cc;">80</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			fogMethod = <span style="color: #000000; font-weight: bold;">new</span> FogMethod<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">8000</span>, 0xcfd9de<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// skybox</span>
			cubeTexture = <span style="color: #000000; font-weight: bold;">new</span> BitmapCubeTexture<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosZ<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegZ<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// terrain</span>
			terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
			terrainMaterial.<span style="color: #006600;">ambientColor</span> = 0x303040;
			terrainMaterial.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			terrainMaterial.<span style="color: #006600;">specular</span> = .2;
			terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span>fogMethod<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// water</span>
			waterMethod = <span style="color: #000000; font-weight: bold;">new</span> SimpleWaterNormalMethod<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span>, Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			fresnelMethod = <span style="color: #000000; font-weight: bold;">new</span> FresnelSpecularMethod<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			fresnelMethod.<span style="color: #006600;">normalReflectance</span> = .3;
&nbsp;
			waterMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapTexture<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">512</span>, <span style="color: #cc66cc;">512</span>, <span style="color: #000000; font-weight: bold;">true</span>, 0xaa404070<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			waterMaterial.<span style="color: #006600;">alphaBlending</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			waterMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
			waterMaterial.<span style="color: #006600;">repeat</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			waterMaterial.<span style="color: #006600;">normalMethod</span> = waterMethod;
			waterMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> EnvMapMethod<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			waterMaterial.<span style="color: #006600;">specularMethod</span> = fresnelMethod;
			waterMaterial.<span style="color: #006600;">gloss</span> = <span style="color: #cc66cc;">100</span>;
			waterMaterial.<span style="color: #006600;">specular</span> = <span style="color: #cc66cc;">1</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// skybox</span>
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SkyBox<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// terrain</span>
			terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">64</span>, <span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// water</span>
			plane = <span style="color: #000000; font-weight: bold;">new</span> Mesh<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PlaneGeometry<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>, waterMaterial<span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">geometry</span>.<span style="color: #006600;">scaleUV</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">5</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ADDED_TO_STAGE</span>, addedToStageHandler<span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">REMOVED_FROM_STAGE</span>, removedFromStageHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> addedToStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #0066CC;">width</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>;
			view.<span style="color: #0066CC;">height</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Enter full screen mode specifying whether display
		 * remains interactive to keyboard events.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> fullScreen<span style="color: #66cc66;">&#40;</span>interactive:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>interactive<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">true</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreenInteractive</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN_INTERACTIVE</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">false</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreen</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			waterMethod.<span style="color: #006600;">water1OffsetX</span> += .001;
			waterMethod.<span style="color: #006600;">water1OffsetY</span> += .001;
			waterMethod.<span style="color: #006600;">water2OffsetX</span> += .0007;
			waterMethod.<span style="color: #006600;">water2OffsetY</span> += .0006;
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>moving<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				cameraController.<span style="color: #006600;">panAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span> - lastMouseX<span style="color: #66cc66;">&#41;</span> + lastPanAngle;
				cameraController.<span style="color: #006600;">tiltAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span> - lastMouseY<span style="color: #66cc66;">&#41;</span> + lastTiltAngle;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>walkSpeed <span style="color: #66cc66;">||</span> walkAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				walkSpeed = <span style="color: #66cc66;">&#40;</span>walkSpeed + walkAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					walkSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementWalk</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>strafeSpeed <span style="color: #66cc66;">||</span> strafeAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				strafeSpeed = <span style="color: #66cc66;">&#40;</span>strafeSpeed + strafeAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					strafeSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementStrafe</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			view.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> removedFromStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			removeChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			cameraController = <span style="color: #000000; font-weight: bold;">null</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== interaction ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseDownHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// indicate camera is moving and set state variables</span>
			moving = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
			lastPanAngle = cameraController.<span style="color: #006600;">panAngle</span>;
			lastTiltAngle = cameraController.<span style="color: #006600;">tiltAngle</span>;
			lastMouseX = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span>;
			lastMouseY = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseUpHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseLeaveHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseWheelHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyDownHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// full screen</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">F</span>:
					fullScreen<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #b1b100;">break</span>;
&nbsp;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
					walkAcceleration = walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = -walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
					strafeAcceleration = -strafeIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = strafeIncrement;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyUpHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-water-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Away3d Template</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-template/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-template/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 21:08:00 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Stage3D]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=2008</guid>
		<description><![CDATA[Implementing Away3D requires some boilerplate, which either templates or abstraction and inheritance can alleviate details while keeping cleaner ActionScript files. My preference is abstraction and inheritance, which I&#8217;ve been experimenting with Blitting Lib Away3D integration at GitHub. This library is&#8230;]]></description>
				<content:encoded><![CDATA[<p>Implementing Away3D requires some boilerplate, which either templates or abstraction and inheritance can alleviate details while keeping cleaner ActionScript files.</p>
<p><span id="more-2008"></span></p>
<p>My preference is abstraction and inheritance, which I&#8217;ve been experimenting with <a href="http://github.com/jasonsturges/blitting-lib-away3d">Blitting Lib Away3D</a> integration at GitHub.  This library is built upon my <a href="http://github.com/jasonsturges/blitting">Blitting SDK</a>, also available at GitHub.</p>
<p>Together, this provides resizable viewports and method stubs for rendering a scene.</p>
<p>Using the Blitting SDK and Away3D library, a base implementation is simple as the following:</p>
<h4>Blitting SDK Abstraction and Inheritance</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dViewport</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AbstractBlittingAway3dExample <span style="color: #0066CC;">extends</span> Away3dViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AbstractBlittingAway3dExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Rendering frame: &quot;</span> + frameNumber<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>There are also <a href="https://raw.github.com/jasonsturges/blitting-lib-away3d/master/src/com/blitting/display/Away3dHoverViewport.as"><code>Away3dHoverViewport</code></a> and <a href="https://raw.github.com/jasonsturges/blitting-lib-away3d/master/src/com/blitting/display/Away3dFirstPersonViewport.as"><code>Away3dFirstPersonViewport</code></a> viewport base classes.</p>
<p>For those who don&#8217;t want to use Blitting SDK, here is an example template to build upon for Away3D.  Either copy and paste this template for your implementation, or extend the class overriding functions specific to your application.</p>
<h4>Away3D Template</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">View3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">debug</span>.<span style="color: #006600;">AwayStats</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageDisplayState</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">KeyboardEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">ui</span>.<span style="color: #006600;">Keyboard</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0x0, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Away3dTemplate <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> antiAlias:uint = <span style="color: #cc66cc;">4</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> awayStats:AwayStats;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> view:View3D;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Away3dTemplate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
&nbsp;
			initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== initialization ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view = <span style="color: #000000; font-weight: bold;">new</span> View3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">antiAlias</span> = antiAlias;
&nbsp;
			scene = view.<span style="color: #006600;">scene</span>;
&nbsp;
			awayStats = <span style="color: #000000; font-weight: bold;">new</span> AwayStats<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">camera</span> = view.<span style="color: #0066CC;">camera</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ADDED_TO_STAGE</span>, addedToStageHandler<span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">REMOVED_FROM_STAGE</span>, removedFromStageHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> addedToStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #0066CC;">width</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>;
			view.<span style="color: #0066CC;">height</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Enter full screen mode specifying whether display
		 * remains interactive to keyboard events.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> fullScreen<span style="color: #66cc66;">&#40;</span>interactive:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>interactive<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">true</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreenInteractive</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN_INTERACTIVE</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">false</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreen</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> removedFromStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			removeChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== interaction ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseDownHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseUpHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseLeaveHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseWheelHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyDownHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// full screen</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">F</span>:
					fullScreen<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyUpHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Here&#8217;s another example template stubbing a First Person Controller in Away3D.</p>
<h4>Away3D First Person Controller Template</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">containers</span>.<span style="color: #006600;">View3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">controllers</span>.<span style="color: #006600;">FirstPersonController</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">debug</span>.<span style="color: #006600;">AwayStats</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageAlign</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageDisplayState</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">StageScaleMode</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">KeyboardEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">ui</span>.<span style="color: #006600;">Keyboard</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0x0, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Away3dFirstPersonControllerTemplate <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> antiAlias:uint = <span style="color: #cc66cc;">4</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> awayStats:AwayStats;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
		protected <span style="color: #000000; font-weight: bold;">var</span> view:View3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// camera controller</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> cameraController:FirstPersonController;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> distanceSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1000</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> panSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> tiltSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// rotation variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> moving:<span style="color: #0066CC;">Boolean</span> = <span style="color: #000000; font-weight: bold;">false</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastPanAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastTiltAngle:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseX:<span style="color: #0066CC;">Number</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> lastMouseY:<span style="color: #0066CC;">Number</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// movement variables</span>
		protected <span style="color: #000000; font-weight: bold;">var</span> drag:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0.5</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeIncrement:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">2</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeSpeed:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> walkAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
		protected <span style="color: #000000; font-weight: bold;">var</span> strafeAcceleration:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Constructor
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Away3dFirstPersonControllerTemplate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">scaleMode</span> = StageScaleMode.<span style="color: #006600;">NO_SCALE</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #0066CC;">align</span> = StageAlign.<span style="color: #006600;">TOP_LEFT</span>;
&nbsp;
			initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== initialization ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view = <span style="color: #000000; font-weight: bold;">new</span> View3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">antiAlias</span> = antiAlias;
&nbsp;
			scene = view.<span style="color: #006600;">scene</span>;
&nbsp;
			awayStats = <span style="color: #000000; font-weight: bold;">new</span> AwayStats<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">camera</span> = view.<span style="color: #0066CC;">camera</span>;
&nbsp;
			cameraController = <span style="color: #000000; font-weight: bold;">new</span> FirstPersonController<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>, <span style="color: #cc66cc;">180</span>, <span style="color: #cc66cc;">0</span>, -<span style="color: #cc66cc;">80</span>, <span style="color: #cc66cc;">80</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> initializeListeners<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ADDED_TO_STAGE</span>, addedToStageHandler<span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">REMOVED_FROM_STAGE</span>, removedFromStageHandler<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> addedToStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			addChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> resizeHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #0066CC;">width</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span>;
			view.<span style="color: #0066CC;">height</span> = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 * Enter full screen mode specifying whether display
		 * remains interactive to keyboard events.
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> fullScreen<span style="color: #66cc66;">&#40;</span>interactive:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>interactive<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">true</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreenInteractive</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN_INTERACTIVE</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">false</span>:
					<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">allowsFullScreen</span><span style="color: #66cc66;">&#41;</span>
						<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">displayState</span> = StageDisplayState.<span style="color: #006600;">FULL_SCREEN</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>moving<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				cameraController.<span style="color: #006600;">panAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span> - lastMouseX<span style="color: #66cc66;">&#41;</span> + lastPanAngle;
				cameraController.<span style="color: #006600;">tiltAngle</span> = <span style="color: #cc66cc;">0.3</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span> - lastMouseY<span style="color: #66cc66;">&#41;</span> + lastTiltAngle;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>walkSpeed <span style="color: #66cc66;">||</span> walkAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				walkSpeed = <span style="color: #66cc66;">&#40;</span>walkSpeed + walkAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					walkSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementWalk</span><span style="color: #66cc66;">&#40;</span>walkSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>strafeSpeed <span style="color: #66cc66;">||</span> strafeAcceleration<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				strafeSpeed = <span style="color: #66cc66;">&#40;</span>strafeSpeed + strafeAcceleration<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">*</span> drag;
				<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0.01</span><span style="color: #66cc66;">&#41;</span>
					strafeSpeed = <span style="color: #cc66cc;">0</span>;
				cameraController.<span style="color: #006600;">incrementStrafe</span><span style="color: #66cc66;">&#40;</span>strafeSpeed<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			view.<span style="color: #006600;">render</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> removedFromStageHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_DOWN</span>, mouseDownHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_UP</span>, mouseUpHandler<span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_WHEEL</span>, mouseWheelHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_DOWN</span>, keyDownHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>KeyboardEvent.<span style="color: #006600;">KEY_UP</span>, keyUpHandler<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">RESIZE</span>, resizeHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			removeChild<span style="color: #66cc66;">&#40;</span>view<span style="color: #66cc66;">&#41;</span>;
			removeChild<span style="color: #66cc66;">&#40;</span>awayStats<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> dispose<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			cameraController = <span style="color: #000000; font-weight: bold;">null</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">/* ======== interaction ======== */</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseDownHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// indicate camera is moving and set state variables</span>
			moving = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
			lastPanAngle = cameraController.<span style="color: #006600;">panAngle</span>;
			lastTiltAngle = cameraController.<span style="color: #006600;">tiltAngle</span>;
			lastMouseX = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseX</span>;
			lastMouseY = <span style="color: #0066CC;">stage</span>.<span style="color: #006600;">mouseY</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseUpHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseLeaveHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">stage</span>.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">MOUSE_LEAVE</span>, mouseLeaveHandler<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			moving = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> mouseWheelHandler<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyDownHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// full screen</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">F</span>:
					fullScreen<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
					<span style="color: #b1b100;">break</span>;
&nbsp;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
					walkAcceleration = walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = -walkIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
					strafeAcceleration = -strafeIncrement;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = strafeIncrement;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/**
		 *
		 */</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> keyUpHandler<span style="color: #66cc66;">&#40;</span>event:KeyboardEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">keyCode</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">UP</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">W</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">DOWN</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">S</span>:
					walkAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">LEFT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">A</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #0066CC;">RIGHT</span>:
				<span style="color: #b1b100;">case</span> Keyboard.<span style="color: #006600;">D</span>:
					strafeAcceleration = <span style="color: #cc66cc;">0</span>;
					<span style="color: #b1b100;">break</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Away3d terrain</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-terrain/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-terrain/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 05:32:48 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[character]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Stage3D]]></category>
		<category><![CDATA[terrain]]></category>
		<category><![CDATA[water]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=1980</guid>
		<description><![CDATA[Away3d terrain with Blitting abstraction. Example terrain implementation using Away3d abstracted within Blitting. Press f for full-screen. Source code at GitHub away3d-core-fp11 (SWC) awayphysics-core-fp11 (SWC) blitting-lib-away3d (SWC) blitting (SWC) Skybox Terrain Water 1 2 3 4 5 6 7 8&#8230;]]></description>
				<content:encoded><![CDATA[<p><a href="http://away3d.com/">Away3d</a> terrain with Blitting abstraction.</p>
<p><span id="more-1980"></span></p>
<p>Example terrain implementation using Away3d abstracted within Blitting.</p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/blitting-terrain/TerrainExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/blitting-terrain/TerrainExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/blitting-terrain/TerrainExample.html" target="_self">Launch website</a>
<p><i>Press <kbd>f</kbd> for full-screen.</i></p>
<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a> (<a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">SWC</a>)</li>
<li><a href="http://github.com/away3d/awayphysics-core-fp11">awayphysics-core-fp11</a> (<a href="http://jasonsturges.com/labs/away3d/awayphysics-core-fp11.swc">SWC</a>)</li>
<li><a href="http://github.com/jasonsturges/blitting-lib-away3d">blitting-lib-away3d</a> (<a href="http://github.com/downloads/jasonsturges/blitting-lib-away3d/blitting-lib-away3d.swc">SWC</a>)</li>
<li><a href="http://github.com/jasonsturges/blitting">blitting</a> (<a href="http://github.com/downloads/jasonsturges/blitting/blitting.swc">SWC</a>)</li>
</ul>
<h5>Skybox</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_negx/' title='space_negX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_negX-150x150.jpg" class="attachment-thumbnail" alt="space_negX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_negy/' title='space_negY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_negY-150x150.jpg" class="attachment-thumbnail" alt="space_negY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_negz/' title='space_negZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_negZ-150x150.jpg" class="attachment-thumbnail" alt="space_negZ" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_posx/' title='space_posX'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_posX-150x150.jpg" class="attachment-thumbnail" alt="space_posX" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_posy/' title='space_posY'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_posY-150x150.jpg" class="attachment-thumbnail" alt="space_posY" /></a>
<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/space_posz/' title='space_posZ'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/space_posZ-150x150.jpg" class="attachment-thumbnail" alt="space_posZ" /></a>

<h5>Terrain</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-terrain/terrain-heightmap-2/' title='terrain-heightmap'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/terrain-heightmap1-150x150.png" class="attachment-thumbnail" alt="terrain-heightmap" /></a>

<h5>Water</h5>

<a href='http://www.jasonsturges.com/2012/12/away3d-water-example/water_normals/' title='water_normals'><img width="150" height="150" src="http://www.jasonsturges.com/wp-content/uploads/2012/12/water_normals-150x150.jpg" class="attachment-thumbnail" alt="water_normals" /></a>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">entities</span>.<span style="color: #006600;">Mesh</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">extrusions</span>.<span style="color: #006600;">Elevation</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">TextureMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">EnvMapMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FogMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FresnelSpecularMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">SimpleWaterNormalMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">PlaneGeometry</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">SkyBox</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapCubeTexture</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapTexture</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Cast</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dFirstPersonViewport</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">BitmapData</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TerrainExample <span style="color: #0066CC;">extends</span> Away3dFirstPersonViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  constant</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/terrain/terrain-heightmap.png&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const HeightMap:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/water/water_normals.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const WaterNormals:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_posX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_posY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_posZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvPosZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_negX.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegX:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_negY.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegY:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
		<span style="color: #66cc66;">&#91;</span>Embed<span style="color: #66cc66;">&#40;</span>source = <span style="color: #ff0000;">&quot;assets/skybox/space/space_negZ.jpg&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
		protected <span style="color: #0066CC;">static</span> const EnvNegZ:<span style="color: #000000; font-weight: bold;">Class</span>;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> cubeTexture:BitmapCubeTexture;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> waterMethod:SimpleWaterNormalMethod;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> waterMaterial:TextureMaterial;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> fresnelMethod:FresnelSpecularMethod;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> fogMethod:FogMethod;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> plane:Mesh;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> TerrainExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeCamera</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">14000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = .05;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeLights</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// create a global fog method</span>
			fogMethod = <span style="color: #000000; font-weight: bold;">new</span> FogMethod<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">8000</span>, 0xcfd9de<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeMaterials</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			cubeTexture = <span style="color: #000000; font-weight: bold;">new</span> BitmapCubeTexture<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegX<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegY<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvPosZ<span style="color: #66cc66;">&#41;</span>,
												Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>EnvNegZ<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #808080; font-style: italic;">//			terrainMaterial.diffuseMethod = terrainMethod;</span>
			<span style="color: #808080; font-style: italic;">//			terrainMaterial.normalMap = Cast.bitmapTexture(Normals);</span>
			terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
			terrainMaterial.<span style="color: #006600;">ambientColor</span> = 0x303040;
			terrainMaterial.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			terrainMaterial.<span style="color: #006600;">specular</span> = .2;
			terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span>fogMethod<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			waterMethod = <span style="color: #000000; font-weight: bold;">new</span> SimpleWaterNormalMethod<span style="color: #66cc66;">&#40;</span>Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span>, Cast.<span style="color: #006600;">bitmapTexture</span><span style="color: #66cc66;">&#40;</span>WaterNormals<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			fresnelMethod = <span style="color: #000000; font-weight: bold;">new</span> FresnelSpecularMethod<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			fresnelMethod.<span style="color: #006600;">normalReflectance</span> = .3;
&nbsp;
			waterMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapTexture<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">512</span>, <span style="color: #cc66cc;">512</span>, <span style="color: #000000; font-weight: bold;">true</span>, 0xaa404070<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			waterMaterial.<span style="color: #006600;">alphaBlending</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			waterMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
			waterMaterial.<span style="color: #006600;">repeat</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			waterMaterial.<span style="color: #006600;">normalMethod</span> = waterMethod;
			waterMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> EnvMapMethod<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			waterMaterial.<span style="color: #006600;">specularMethod</span> = fresnelMethod;
			waterMaterial.<span style="color: #006600;">gloss</span> = <span style="color: #cc66cc;">100</span>;
			waterMaterial.<span style="color: #006600;">specular</span> = <span style="color: #cc66cc;">1</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeObjects</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SkyBox<span style="color: #66cc66;">&#40;</span>cubeTexture<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// create terrain</span>
			terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, Cast.<span style="color: #006600;">bitmapData</span><span style="color: #66cc66;">&#40;</span>HeightMap<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">1300</span>, <span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">250</span>, <span style="color: #cc66cc;">250</span><span style="color: #66cc66;">&#41;</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// create water</span>
			plane = <span style="color: #000000; font-weight: bold;">new</span> Mesh<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> PlaneGeometry<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5000</span>, <span style="color: #cc66cc;">5000</span><span style="color: #66cc66;">&#41;</span>, waterMaterial<span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">geometry</span>.<span style="color: #006600;">scaleUV</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">5</span>;
			scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			targetObject = <span style="color: #0066CC;">camera</span>;
			lookAtObject = terrain;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> prerender<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">prerender</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> += <span style="color: #cc66cc;">0.2</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>terrain.<span style="color: #006600;">getHeightAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span>, <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">20</span> - <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			waterMethod.<span style="color: #006600;">water1OffsetX</span> += .001;
			waterMethod.<span style="color: #006600;">water1OffsetY</span> += .001;
			waterMethod.<span style="color: #006600;">water2OffsetX</span> += .0007;
			waterMethod.<span style="color: #006600;">water2OffsetY</span> += .0006;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-terrain/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Away3d random terrain</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-random-terrain/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-random-terrain/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 05:18:06 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[Stage3D]]></category>
		<category><![CDATA[terrain]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=1977</guid>
		<description><![CDATA[Away3d random terrain with Blitting abstraction. Example implementation of a random terrain using Away3d abstracted within Blitting. Press f for full-screen. Press z or x to zoom. Source code at GitHub away3d-core-fp11 awayphysics-core-fp11 blitting-lib-away3d blitting SWC Libraries away3d-core-fp11.swc awayphysics-core-fp11.swc blitting-lib-away3d.swc&#8230;]]></description>
				<content:encoded><![CDATA[<p><a href="http://away3d.com/">Away3d</a> random terrain with Blitting abstraction.</p>
<p><span id="more-1977"></span></p>
<p>Example implementation of a random terrain using Away3d abstracted within Blitting.</p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/blitting-random-terrain/RandomTerrainExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/blitting-random-terrain/RandomTerrainExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/blitting-random-terrain/RandomTerrainExample.html" target="_self">Launch website</a>
<p><i>Press <kbd>f</kbd> for full-screen.</i><br />
<i>Press <kbd>z</kbd> or <kbd>x</kbd> to zoom.</i></p>
<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a></li>
<li><a href="http://github.com/away3d/awayphysics-core-fp11">awayphysics-core-fp11</a></li>
<li><a href="http://github.com/jasonsturges/blitting-lib-away3d">blitting-lib-away3d</a></li>
<li><a href="http://github.com/jasonsturges/blitting">blitting</a></li>
</ul>
<h5>SWC Libraries</h5>
<ul>
<li><a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">away3d-core-fp11.swc</a></li>
<li><a href="http://jasonsturges.com/labs/away3d/awayphysics-core-fp11.swc">awayphysics-core-fp11.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting-lib-away3d/blitting-lib-away3d.swc">blitting-lib-away3d.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting/blitting.swc">blitting.swc</a></li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">extrusions</span>.<span style="color: #006600;">Elevation</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">TextureMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FilteredShadowMapMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FogMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapTexture</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dHoverViewport</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">renderers</span>.<span style="color: #006600;">RandomTerrainHeightMap</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">BitmapData</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 *
	 * @author jsturges
	 *
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> RandomTerrainExample <span style="color: #0066CC;">extends</span> Away3dHoverViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> heightMapData:BitmapData;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> RandomTerrainExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeCamera</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">1000000</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeLights</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">500</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeMaterials</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			heightMapData = <span style="color: #000000; font-weight: bold;">new</span> RandomTerrainHeightMap<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapTexture<span style="color: #66cc66;">&#40;</span>heightMapData<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> FogMethod<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">200000</span>, 0x000000<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeObjects</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, heightMapData, <span style="color: #cc66cc;">200000</span>, <span style="color: #cc66cc;">50000</span>, <span style="color: #cc66cc;">200000</span>, <span style="color: #cc66cc;">65</span>, <span style="color: #cc66cc;">65</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			targetObject = <span style="color: #0066CC;">camera</span>;
			lookAtObject = terrain;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-random-terrain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Away3d first person camera controller viewport</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-first-person-camera-controller-viewport/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-first-person-camera-controller-viewport/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 05:12:29 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Stage3D]]></category>
		<category><![CDATA[terrain]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=1974</guid>
		<description><![CDATA[Away3d first person camera controller viewport with Blitting abstraction. Example implementation of a first person camera controller viewport using Away3d abstracted within a Blitting Away3dFirstPersonViewport. Press f for full-screen. Source code at GitHub away3d-core-fp11 awayphysics-core-fp11 blitting-lib-away3d blitting SWC Libraries away3d-core-fp11.swc&#8230;]]></description>
				<content:encoded><![CDATA[<p><a href="http://away3d.com/">Away3d</a> first person camera controller viewport with Blitting abstraction.</p>
<p><span id="more-1974"></span></p>
<p>Example implementation of a first person camera controller viewport using Away3d abstracted within a Blitting Away3dFirstPersonViewport.</p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/blitting-first-person-viewport/FirstPersonViewportExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/blitting-first-person-viewport/FirstPersonViewportExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/blitting-first-person-viewport/FirstPersonViewportExample.html" target="_self">Launch website</a>
<p><i>Press <kbd>f</kbd> for full-screen.</i></p>
<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a></li>
<li><a href="http://github.com/away3d/awayphysics-core-fp11">awayphysics-core-fp11</a></li>
<li><a href="http://github.com/jasonsturges/blitting-lib-away3d">blitting-lib-away3d</a></li>
<li><a href="http://github.com/jasonsturges/blitting">blitting</a></li>
</ul>
<h5>SWC Libraries</h5>
<ul>
<li><a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">away3d-core-fp11.swc</a></li>
<li><a href="http://jasonsturges.com/labs/away3d/awayphysics-core-fp11.swc">awayphysics-core-fp11.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting-lib-away3d/blitting-lib-away3d.swc">blitting-lib-away3d.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting/blitting.swc">blitting.swc</a></li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">extrusions</span>.<span style="color: #006600;">Elevation</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">filters</span>.<span style="color: #006600;">DepthOfFieldFilter3D</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">TextureMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FogMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">textures</span>.<span style="color: #006600;">BitmapTexture</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dFirstPersonViewport</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">renderers</span>.<span style="color: #006600;">RandomTerrainHeightMap</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #0066CC;">time</span>.<span style="color: #006600;">CallLater</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">BitmapData</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	 *
	 * @author jsturges
	 *
	 */</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FirstPersonViewportExample <span style="color: #0066CC;">extends</span> Away3dFirstPersonViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> heightMapData:BitmapData;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrainMaterial:TextureMaterial;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> terrain:Elevation;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> FirstPersonViewportExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			walkIncrement = <span style="color: #cc66cc;">200</span>;
			strafeIncrement = <span style="color: #cc66cc;">200</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeCamera</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">150000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = .05;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeLights</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">500</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeMaterials</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			heightMapData = <span style="color: #000000; font-weight: bold;">new</span> RandomTerrainHeightMap<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial = <span style="color: #000000; font-weight: bold;">new</span> TextureMaterial<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapTexture<span style="color: #66cc66;">&#40;</span>heightMapData<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">addMethod</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> FogMethod<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">200000</span>, 0x000000<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			terrainMaterial.<span style="color: #006600;">lightPicker</span> = lightPicker;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeObjects</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			terrain = <span style="color: #000000; font-weight: bold;">new</span> Elevation<span style="color: #66cc66;">&#40;</span>terrainMaterial, heightMapData, <span style="color: #cc66cc;">200000</span>, <span style="color: #cc66cc;">50000</span>, <span style="color: #cc66cc;">200000</span>, <span style="color: #cc66cc;">65</span>, <span style="color: #cc66cc;">65</span><span style="color: #66cc66;">&#41;</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>terrain<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			targetObject = <span style="color: #0066CC;">camera</span>;
			lookAtObject = terrain;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> prerender<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">prerender</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> += <span style="color: #cc66cc;">0.4</span> <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>terrain.<span style="color: #006600;">getHeightAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span>, <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">500</span> - <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-first-person-camera-controller-viewport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Away3d hover camera controller viewport</title>
		<link>http://www.jasonsturges.com/2012/12/away3d-hover-camera-controller-viewport/</link>
		<comments>http://www.jasonsturges.com/2012/12/away3d-hover-camera-controller-viewport/#comments</comments>
		<pubDate>Tue, 11 Dec 2012 05:07:08 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3d]]></category>
		<category><![CDATA[Blitting SDK]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Stage3D]]></category>

		<guid isPermaLink="false">http://www.jasonsturges.com/?p=1970</guid>
		<description><![CDATA[Away3d hover camera controller viewport with Blitting abstraction. Example implementation of a hover camera controller viewport using Away3d abstracted within a Blitting Away3dHoverViewport. Press f for full-screen. Source code at GitHub away3d-core-fp11 awayphysics-core-fp11 blitting-lib-away3d blitting SWC Libraries away3d-core-fp11.swc awayphysics-core-fp11.swc blitting-lib-away3d.swc&#8230;]]></description>
				<content:encoded><![CDATA[<p><a href="http://away3d.com/">Away3d</a> hover camera controller viewport with Blitting abstraction.</p>
<p><span id="more-1970"></span></p>
<p>Example implementation of a hover camera controller viewport using Away3d abstracted within a Blitting Away3dHoverViewport.</p>

<!-- top flash embed swf tag start-->
	<object width="550px" height="400px" data="http://jasonsturges.com/labs/away3d/blitting-hover-viewport/HoverViewportExample.swf" type="application/x-shockwave-flash">
		<param name="movie" value="http://jasonsturges.com/labs/away3d/blitting-hover-viewport/HoverViewportExample.swf" /> 
		<param name="wmode" value="direct" />
	</object>
<!-- top flash embed swf tag end-->

<a class="button  " href="http://jasonsturges.com/labs/away3d/blitting-hover-viewport/HoverViewportExample.html" target="_self">Launch website</a>
<p><i>Press <kbd>f</kbd> for full-screen.</i></p>
<h5>Source code at GitHub</h5>
<ul>
<li><a href="http://github.com/away3d/away3d-core-fp11">away3d-core-fp11</a></li>
<li><a href="http://github.com/away3d/awayphysics-core-fp11">awayphysics-core-fp11</a></li>
<li><a href="http://github.com/jasonsturges/blitting-lib-away3d">blitting-lib-away3d</a></li>
<li><a href="http://github.com/jasonsturges/blitting">blitting</a></li>
</ul>
<h5>SWC Libraries</h5>
<ul>
<li><a href="http://jasonsturges.com/labs/away3d/away3d-core-fp11.swc">away3d-core-fp11.swc</a></li>
<li><a href="http://jasonsturges.com/labs/away3d/awayphysics-core-fp11.swc">awayphysics-core-fp11.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting-lib-away3d/blitting-lib-away3d.swc">blitting-lib-away3d.swc</a></li>
<li><a href="http://github.com/downloads/jasonsturges/blitting/blitting.swc">blitting.swc</a></li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">entities</span>.<span style="color: #006600;">Mesh</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">lights</span>.<span style="color: #006600;">DirectionalLight</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">ColorMaterial</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">lightpickers</span>.<span style="color: #006600;">StaticLightPicker</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">materials</span>.<span style="color: #006600;">methods</span>.<span style="color: #006600;">FilteredShadowMapMethod</span>;
	<span style="color: #0066CC;">import</span> away3d.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">CubeGeometry</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">constant</span>.<span style="color: #006600;">ColorPalette</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">Blitting</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">core</span>.<span style="color: #006600;">blitting_internal</span>;
	<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">blitting</span>.<span style="color: #006600;">display</span>.<span style="color: #006600;">Away3dHoverViewport</span>;
&nbsp;
	use namespace blitting_internal;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>percentWidth = <span style="color: #cc66cc;">100</span>, percentHeight = <span style="color: #cc66cc;">100</span>, <span style="color: #0066CC;">backgroundColor</span> = 0xefefef, frameRate = <span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HoverViewportExample <span style="color: #0066CC;">extends</span> Away3dHoverViewport
	<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  model</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		blitting_internal <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> blitting:Blitting = Blitting.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> material:ColorMaterial;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> cube:Mesh;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> sunLight:DirectionalLight;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> lightPicker:StaticLightPicker;
&nbsp;
&nbsp;
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
		<span style="color: #808080; font-style: italic;">//  lifecycle</span>
		<span style="color: #808080; font-style: italic;">//------------------------------</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> HoverViewportExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeCamera<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeCamera</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">far</span> = <span style="color: #cc66cc;">10000</span>;
			<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">lens</span>.<span style="color: #006600;">near</span> = <span style="color: #cc66cc;">50</span>;
&nbsp;
			cameraController.<span style="color: #006600;">distance</span> = <span style="color: #cc66cc;">1000</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeLights<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeLights</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			sunLight = <span style="color: #000000; font-weight: bold;">new</span> DirectionalLight<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">300</span>, -<span style="color: #cc66cc;">500</span><span style="color: #66cc66;">&#41;</span>;
			sunLight.<span style="color: #0066CC;">color</span> = 0xfffdc5;
			sunLight.<span style="color: #006600;">ambient</span> = <span style="color: #cc66cc;">1</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			lightPicker = <span style="color: #000000; font-weight: bold;">new</span> StaticLightPicker<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span> sunLight <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeMaterials<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeMaterials</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			material = <span style="color: #000000; font-weight: bold;">new</span> ColorMaterial<span style="color: #66cc66;">&#40;</span>ColorPalette.<span style="color: #006600;">oliveDrab4</span><span style="color: #66cc66;">&#41;</span>;
			material.<span style="color: #006600;">shadowMethod</span> = <span style="color: #000000; font-weight: bold;">new</span> FilteredShadowMapMethod<span style="color: #66cc66;">&#40;</span>sunLight<span style="color: #66cc66;">&#41;</span>;
			material.<span style="color: #006600;">lightPicker</span> = lightPicker;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		override protected <span style="color: #000000; font-weight: bold;">function</span> initializeObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">super</span>.<span style="color: #006600;">initializeObjects</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			cube = <span style="color: #000000; font-weight: bold;">new</span> Mesh<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> CubeGeometry<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">400</span><span style="color: #66cc66;">&#41;</span>, material<span style="color: #66cc66;">&#41;</span>;
			cube.<span style="color: #006600;">castsShadows</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			view.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>cube<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			targetObject = <span style="color: #0066CC;">camera</span>;
			lookAtObject = cube;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasonsturges.com/2012/12/away3d-hover-camera-controller-viewport/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
