<?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>Sergey Gonchar</title>
	<atom:link href="http://gonchar.me/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://gonchar.me/blog</link>
	<description>flash-developer</description>
	<lastBuildDate>Fri, 16 Mar 2012 22:49:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>GDC 2012 Videos</title>
		<link>http://gonchar.me/blog/goncharposts/1434</link>
		<comments>http://gonchar.me/blog/goncharposts/1434#comments</comments>
		<pubDate>Fri, 16 Mar 2012 22:49:53 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[in english]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1434</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><iframe width="640" height="360" src="http://www.youtube.com/embed/SDYbK6iUsRM" frameborder="0" allowfullscreen></iframe><br />
<br/><br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/QxJacxI4_oE" frameborder="0" allowfullscreen></iframe><br />
<br/><br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/qq3mYmzOelI" frameborder="0" allowfullscreen></iframe><br />
<br/><br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/pTCTlLhzNTc" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1434/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>L.A. Noire, RockstarGames</title>
		<link>http://gonchar.me/blog/goncharposts/1399</link>
		<comments>http://gonchar.me/blog/goncharposts/1399#comments</comments>
		<pubDate>Sun, 11 Mar 2012 23:35:10 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1399</guid>
		<description><![CDATA[ВНИМАНИЕ!!! Данный материал предоставлен исключительно в ознакомительных целях. Небольшой обзор L.A. Noire от RockstarGames. Меню игры: 1. Свет от фар Это два одинаковых меш объекта с наложенной текстурой На данном скриншоте, сцена без света от фар, согласитесь, смотрится уже не так. (сравните с самым первым скриншотом) 2. Cтена Берется исходная текстура, в которой находится текущий [...]]]></description>
			<content:encoded><![CDATA[<p><strong>ВНИМАНИЕ!!! Данный материал предоставлен исключительно в ознакомительных целях.</strong><br />
Небольшой обзор <a href="http://www.rockstargames.com/lanoire/">L.A. Noire</a> от <a href="http://www.rockstargames.com/">RockstarGames</a>.</p>
<p>Меню игры:<br />
<img src="http://gonchar.me/files/noire/main.png" width="600" height="339" alt="" /></p>
<p><strong>1. Свет от фар</strong><br />
Это два одинаковых меш объекта<br />
<img src="http://gonchar.me/files/noire/car_light.png" width="600" height="339" alt="" /><br />
с наложенной текстурой<br />
<img src="http://gonchar.me/files/noire/car_light_texture.jpg" alt="" /><br />
На данном скриншоте, сцена без света от фар, согласитесь, смотрится уже не так. (сравните с самым первым скриншотом)<br />
<img src="http://gonchar.me/files/noire/without_car_light.png" width="600" height="339" alt="" /></p>
<p><strong>2. Cтена</strong><br />
<img src="http://gonchar.me/files/noire/without_wall_text.png" width="600" height="339" alt="" /><br />
Берется исходная текстура, в которой находится текущий выделенный пункт меню, с помощью <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb206221%28v=vs.85%29.aspx">texldp </a>проецируется по направлению конусного источника света.<br />
<img src="http://gonchar.me/files/noire/texldp.png" width="600" height="339" alt="" /><br />
SpotLightTexture<br />
<img src="http://gonchar.me/files/noire/SpotLightTexture.jpg" width="256" height="256" alt="" /><br />
Так-же стоит отметить, что в игре не используются <a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D1%8C%D0%B5%D1%84%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">нормаль-карты</a>, вместо них используются <a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D1%8C%D0%B5%D1%84%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">бамп-карты</a>.</p>
<p><strong>3. Тени</strong><br />
Реализованны с помощью ShadowMap + размытие с помощью Poisson Texture. Насколько я понял, это стандартный алгоритм тени RAGE, который также использовался и в GTA4.<br />
Размытие краев тени с помощью Poisson Texture дает довольно крутой результат. Размытие достигается засчет инструкции texkill в фрагментном шейдере. В LA.Noire размер такой текстуры 32&#215;32, для того чтобы получить uv-координату, берется текущая позиция пикселя на экране, делится на 32. Для того, чтобы показать разницу, продемонстрирую два скриншота:<br />
а) Без Poisson Texture<br />
<img src="http://gonchar.me/files/noire/withoutPoison.jpg" width="600" height="339" alt="" /><br />
б) С Poisson Texture<br />
<img src="http://gonchar.me/files/noire/with_poison.jpg" width="600" height="339" alt="" /><br />
Вот как ложится на сцену сама PoisonTexture:<br />
<img src="http://gonchar.me/files/noire/poison.jpg" width="600" height="339" alt="" /></p>
<p><strong>4. Posteffects</strong><br />
DepthOfField. Реализуется через сгенерированную из буффера глубины текстуру:<br />
<img src="http://gonchar.me/files/noire/dof.jpg" width="600" height="339" alt="" /><br />
Bloom. Опорная текстура генерируется через стенсил буффер:<br />
<img src="http://gonchar.me/files/noire/stencil1.jpg" width="600" height="339" alt="" /><br />
И потом размывается в несколько шагов<br />
<img src="http://gonchar.me/files/noire/stencil4.jpg" width="600" height="339" alt="" /></p>
<p>Результат:<br />
<img src="http://gonchar.me/files/noire/result.jpg" width="600" height="339" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1399/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>UnrealEngine. Секреты вау</title>
		<link>http://gonchar.me/blog/goncharposts/1346</link>
		<comments>http://gonchar.me/blog/goncharposts/1346#comments</comments>
		<pubDate>Fri, 09 Mar 2012 23:12:39 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[theory]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1346</guid>
		<description><![CDATA[ВНИМАНИЕ!!! Данный материал предоставлен исключительно в ознакомительных целях. Ознакомление с реализацей демо Epic Citadel от Epic Games. 1. Солнце Для реализации эффекта, использовалось 4 спрайта которые всегда повернуты лицом к камере, с текстурами: Вот как они выглядят: Стоит отметить, что шейдер выглядит весьма не оптимизированным и код вида: mov vt0, va0 mov vt0, va1 mov [...]]]></description>
			<content:encoded><![CDATA[<p><strong>ВНИМАНИЕ!!! Данный материал предоставлен исключительно в ознакомительных целях.</strong></p>
<p>Ознакомление с реализацей демо <a href="http://www.unrealengine.com/flash/">Epic Citadel</a> от <a href="http://epicgames.com/">Epic Games</a>.</p>
<p><b>1. Солнце</b><br />
<img src="http://gonchar.me/files/unity/sun_effect.png" width="600" height="338" alt="" /><br />
Для реализации эффекта, использовалось 4 спрайта которые всегда повернуты лицом к камере, с текстурами:<br />
<img src="http://gonchar.me/files/unity/start.png" width="100" height="100" alt="" /><img src="http://gonchar.me/files/unity/middle.png" width="100" height="100" alt="" /><img src="http://gonchar.me/files/unity/last.png" width="100" height="100" alt="" /><img src="http://gonchar.me/files/unity/end.png" width="100" height="100" alt="" /><br />
Вот как они выглядят:<br />
<img src="http://gonchar.me/files/unity/green_start.png" width="300" height="169" alt="" /><img src="http://gonchar.me/files/unity/green_middle.png" width="300" height="169" alt="" /><img src="http://gonchar.me/files/unity/green_last.png" width="300" height="169" alt="" /><img src="http://gonchar.me/files/unity/green_end.png" width="300" height="169" alt="" /><br />
Стоит отметить, что шейдер выглядит весьма не оптимизированным и код вида:</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #00007f; font-weight: bold;">mov</span> vt0<span style="color: #339933;">,</span> va0
<span style="color: #00007f; font-weight: bold;">mov</span> vt0<span style="color: #339933;">,</span> va1
<span style="color: #00007f; font-weight: bold;">mov</span> vt0<span style="color: #339933;">,</span> va2
<span style="color: #00007f; font-weight: bold;">mov</span> vt0<span style="color: #339933;">,</span> va3
<span style="color: #00007f; font-weight: bold;">mov</span> vt0<span style="color: #339933;">,</span> va4</pre></div></div>

<p>согласитесь, немного настораживает. Предварительно, перед показом эффекта необходимо проверить с помощью луча видимость солнца в камере.</p>
<p><b>2. Огонь </b><br />
<img src="http://gonchar.me/files/unity/fire.png" width="600" height="338" alt="" /><br />
Для реализации огня используется два эмиттера, две атласных текстуры:<br />
<img src="http://gonchar.me/files/unity/fire_atlas.jpg" width="300" height="300" alt="" /><img src="http://gonchar.me/files/unity/smoke_atlas.jpg" width="300" height="300" alt="" /><br />
На следующих картинках подсвечен эмиттер очага и дыма:<br />
<img src="http://gonchar.me/files/unity/fire_yellow.png" width="300" height="169" alt="" /><img src="http://gonchar.me/files/unity/smoke_yellow.png" width="300" height="169" alt="" /><br />
Довольно серьезная система частиц присутствует в UnrealEngine. На обработку вершинного шейдера одного дроукола системы частиц уходит 12% GPU, время выполнения &#8211; 29,9. В среднем это довольно неплохой результат. Еще стоит отметить производительность фрагментного шейдер системы частиц, в котором всего 16 AGAL инструкций.</p>
<p><b>3. Отражения</b><br />
<img src="http://gonchar.me/files/unity/refl.png" width="600" height="338" alt="" /><br />
Для реализации отражения используется стандартная методика для Planar Reflections, где используется дублированная геометрия умноженная на Mirror Matrix.<br />
Transform = WORLD MATRIX * MIRROR MATRIX * VIEW MATRIX * PROJECTION MATRIX<br />
<a href="http://knol.google.com/k/planar-reflections-with-directx-9">Реализация на DirectX9</a><br />
<img src="http://gonchar.me/files/unity/refl_geom.png" width="600" height="338" alt="" /></p>
<p><b>4. Река</b><br />
<img src="http://gonchar.me/files/unity/river.png" width="600" height="338" alt="" /><br />
Река смотрится очень круто. В реализации очень проста. Используется два текстурных канала. Один статичный, другой анимированный по v.<br />
<img src="http://gonchar.me/files/unity/wave.png" width="300" height="300" alt="" /><img src="http://gonchar.me/files/unity/dno.png" width="300" height="300" alt="" /></p>
<p><b>5. Уровень</b><br />
Ничего технически особенного Unreal пока не предоставили. Динамического освещения в демке нет. Используются <a href="http://en.wikipedia.org/wiki/Lightmap">light-map</a> и призженный свет в текстуры, отсутствует альфа-тест.</p>
<p>Спасибо за внимание!</p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1346/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Tutorial Realtime raycast in Alternativa3D</title>
		<link>http://gonchar.me/blog/goncharposts/1306</link>
		<comments>http://gonchar.me/blog/goncharposts/1306#comments</comments>
		<pubDate>Sun, 11 Dec 2011 22:45:21 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1306</guid>
		<description><![CDATA[Hi! In this lesson I’ll show you how to create your own realtime raycast with reflect and refract using GPU in Alternativa3D 8.17.0. Demo 1 &#8211; Only Reflect Demo 2 &#8211; RefractionIndex = 6 and mix-value between reflect and refract equals 0.2 Demo 3 &#8211; RefractionIndex = 1 and mix-value between reflect and refract equals [...]]]></description>
			<content:encoded><![CDATA[<p>Hi! In this lesson I’ll show you how to create your own realtime raycast with reflect and refract using GPU in <a href="http://alternativaplatform.com/ru/download8">Alternativa3D 8.17.0</a>.</p>
<p>Demo 1 &#8211; Only Reflect<br />
<a href="http://gonchar.me/alternativaplatform/reflect/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/reflect.jpg" alt="" title="reflect" width="593" height="396" class="aligncenter size-full wp-image-1310" /></a></p>
<p>Demo 2 &#8211; RefractionIndex = 6 and mix-value between reflect and refract equals 0.2<br />
<a href="http://gonchar.me/alternativaplatform/refract6/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/refract6.jpg" alt="" title="refract6" width="590" height="393" class="aligncenter size-full wp-image-1315" /></a></p>
<p>Demo 3 &#8211; RefractionIndex = 1 and mix-value between reflect and refract equals 0.5<br />
<a href="http://gonchar.me/alternativaplatform/raycast/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/preview.jpg" alt="" title="preview" width="592" height="394" class="aligncenter size-full wp-image-1294" /></a></p>
<p>Before start, I recommend you to read my previous article <a href="http://gonchar.me/blog/flastarposts/1281">Environment and Refraction in Alternativa3D</a>.</p>
<p>I achived this effect by setRenderToTexture Context3D method. This method is really useful for creating:<br />
1) Shadow maps<br />
2) Postprocessing<br />
3) Reflections</p>
<p>When you use this technique you must set optimizeForRenderToTexture property = true for draw target textures.<br />
At first lets create CubeMap Alternativa3D resource:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DTextureFormat<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CubeMapResource <span style="color: #0033ff; font-weight: bold;">extends</span> TextureResource <span style="color: #000000;">&#123;</span>
      <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _size <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CubeMapResource<span style="color: #000000;">&#40;</span><span style="color: #004993;">size</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
            _size = <span style="color: #004993;">size</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #000000;">&#125;</span>
&nbsp;
       override <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>context3D <span style="color: #000066; font-weight: bold;">:</span> Context3D<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_texture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> _texture<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">dispose</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           _texture = context3D<span style="color: #000066; font-weight: bold;">.</span>createCubeTexture<span style="color: #000000;">&#40;</span>_size<span style="color: #000066; font-weight: bold;">,</span> Context3DTextureFormat<span style="color: #000066; font-weight: bold;">.</span>BGRA<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Then we optimize material from <a href="http://gonchar.me/blog/flastarposts/1281">previous tutorial</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Transform3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ReflectRefractMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
      alternativa3d <span style="color: #6699cc; font-weight: bold;">var</span> _cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource<span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program <span style="color: #000066; font-weight: bold;">:</span> ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> reflectionPower<span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.5</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> refractionIndex <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">6</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">alpha</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> rotatedObject<span style="color: #000066; font-weight: bold;">:</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ReflectRefractMaterial<span style="color: #000000;">&#40;</span>cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
          _cubeTexture = cubeTexture<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #990000;">&quot;mov vt0, va1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;m33 vt0.xyz, vt0.xyz, vc6<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt1, vc4, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;m33 vt1.xyz, vt1.xyz, vc6<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;dp3 vt2, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add vt2, vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt2, vt0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt2, vt1, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;neg vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;nrm vt2.xyz, vt2.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mov v0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;dp3 vt3, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt3, vt3, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt3, vt3, vt1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt3, vt3, vc5.y<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;dp3 vt4, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt4, vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;mul vt4, vc5.z, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;sqt vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mul vt4, vt4, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt4, vt3, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;nrm vt4.xyz, vt4.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mov v1, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;m44 op, va0, vc0&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #990000;">&quot;mov ft4.xyz, v0.yzx<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;neg ft4.z, ft4.z<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;m33 ft4.xyz, ft4.xyz, fc1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;tex ft0,ft4.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;mov ft5.xyz, v1.yzx<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;neg ft5.z, ft5.z<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;m33 ft5.xyz, ft5.xyz, fc1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;tex ft1,ft5.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #990000;">&quot;sub ft3, ft0, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul ft3, ft3, fc0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add ft3, ft3, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mov ft3.w, fc0.w<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mov oc, ft3&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            rotatedObject = <span style="color: #0033ff; font-weight: bold;">new</span> Object3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         rotatedObject<span style="color: #000066; font-weight: bold;">.</span>rotationY = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">PI</span><span style="color: #000066; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
           rotatedObject<span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span>rootContainer<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>rotatedObject<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
       alternativa3d override <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_cubeTexture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>_cubeTexture<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>_cubeTexture<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #000000;">&#125;</span>
           program<span style="color: #000066; font-weight: bold;">.</span>program = Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span>stage3Ds<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
        override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Light3D<span style="color: #000066; font-weight: bold;">&gt;,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object <span style="color: #000066; font-weight: bold;">:</span> Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #6699cc; font-weight: bold;">var</span> normalsBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">NORMAL</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit <span style="color: #000066; font-weight: bold;">:</span> DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> normalsBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #6699cc; font-weight: bold;">var</span> cameraToLocalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = object<span style="color: #000066; font-weight: bold;">.</span>cameraToLocalTransform<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">4</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> refraction<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = refractionIndex<span style="color: #000066; font-weight: bold;">/</span><span style="color: #000000; font-weight:bold;">1000</span><span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> refraction<span style="color: #000066; font-weight: bold;">,</span> refraction<span style="color: #000066; font-weight: bold;">*</span>refraction<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> globalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = <span style="color: #0033ff; font-weight: bold;">new</span> Transform3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          globalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">copy</span><span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            globalTransform<span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span>localToGlobalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">6</span><span style="color: #000066; font-weight: bold;">,</span> globalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span><span style="color: #004993;">alpha</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> rotatedObject<span style="color: #000066; font-weight: bold;">.</span>inverseTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> _cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&gt;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> RenderPriority<span style="color: #000066; font-weight: bold;">.</span>OPAQUE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><strong>WARNING!!!</strong> To calculate localToGlobal transform you need to transform from localToCamera and then from cameraToGlobal, because object localToGlobal is native Transform3D inside Alternativa3D engine.</p>
<p>Let&#8217;s do main class of project.<br />
Method for creating sample sphere with ReflectRefractMaterial:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> objects <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Mesh<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Mesh<span style="color: #000066; font-weight: bold;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> objectsMaterials <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>ReflectRefractMaterial<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>ReflectRefractMaterial<span style="color: #000066; font-weight: bold;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> createSphere<span style="color: #000000;">&#40;</span>radius <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">120</span><span style="color: #000066; font-weight: bold;">,</span> reflectionPower <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.5</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> sphere <span style="color: #000066; font-weight: bold;">:</span> GeoSphere = <span style="color: #0033ff; font-weight: bold;">new</span> GeoSphere<span style="color: #000000;">&#40;</span>radius<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">6</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> sphereMaterial <span style="color: #000066; font-weight: bold;">:</span> ReflectRefractMaterial = <span style="color: #0033ff; font-weight: bold;">new</span> ReflectRefractMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> CubeMapResource<span style="color: #000000;">&#40;</span>xneg_sky<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
  sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>reflectionPower = reflectionPower<span style="color: #000066; font-weight: bold;">;</span>
   sphere<span style="color: #000066; font-weight: bold;">.</span>setMaterialToAllSurfaces<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    rootContainer<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>sphere<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 objects<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span>sphere<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   objectsMaterials<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Embed images and create skybox:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;03.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> xnegJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> xneg_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;06.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> xposJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> xpos_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;01.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> ynegJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> yneg_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;05.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> yposJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> ypos_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;04.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> znegJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> zneg_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#91;</span>Embed<span style="color: #000000;">&#40;</span><span style="color: #004993;">source</span>=<span style="color: #990000;">&quot;02.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> zposJpgClass_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> zpos_sky <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">BitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> setupScene<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
    xneg_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> xnegJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   xpos_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> xposJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   yneg_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> ynegJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   ypos_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> yposJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   zneg_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> znegJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   zpos_sky = <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> zposJpgClass_sky<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Bitmap</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bitmapData</span><span style="color: #000066; font-weight: bold;">;</span>
   createSphere<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">180</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0.2</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 createSphere<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">180</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0.2</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 createSphere<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">180</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0.2</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 skyBox = <span style="color: #0033ff; font-weight: bold;">new</span> SkyBox<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">10000</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>xneg_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>xpos_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>yneg_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>ypos_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>zneg_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">new</span> TextureMaterial<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> BitmapTextureResource<span style="color: #000000;">&#40;</span>zpos_sky<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 rootContainer<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>skyBox<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Create method which render cubeMap for every object. But here are not all simple. Let&#8217;s do that by steps:<br />
1) Set position of skybox at object position<br />
2) Set camera position to default pos<br />
3) Calculate fov, scaleX, scaleY properties for camera. Thanks to <a href="http://www.facebook.com/ivan.dembicki">Ivan Dembicki</a> for help.<br />
4) And then, for all 6 sides render scene from different views.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> calculateCubeMapForSphere<span style="color: #000000;">&#40;</span>sphere <span style="color: #000066; font-weight: bold;">:</span> Mesh<span style="color: #000066; font-weight: bold;">,</span> sphereMaterial <span style="color: #000066; font-weight: bold;">:</span> ReflectRefractMaterial<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
  skyBox<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = sphere<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
    skyBox<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = sphere<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
    skyBox<span style="color: #000066; font-weight: bold;">.</span>z = sphere<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = sphere<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = sphere<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span>z = sphere<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> viewSizeX <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stageWidth</span> <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> viewSizeY <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stageHeight</span> <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>fov = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">atan</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">sqrt</span><span style="color: #000000;">&#40;</span>viewSizeX <span style="color: #000066; font-weight: bold;">*</span> viewSizeX <span style="color: #000066; font-weight: bold;">+</span> viewSizeY <span style="color: #000066; font-weight: bold;">*</span> viewSizeY<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">/</span> camera<span style="color: #000066; font-weight: bold;">.</span>focalLength<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
  camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">scaleX</span> = camera<span style="color: #000066; font-weight: bold;">.</span>focalLength <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stageWidth</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
  camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">scaleY</span> = camera<span style="color: #000066; font-weight: bold;">.</span>focalLength <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stageHeight</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">4</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   camera<span style="color: #000066; font-weight: bold;">.</span>rotationZ = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">PI</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 lookAt<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> camera<span style="color: #000066; font-weight: bold;">.</span>z <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   camera<span style="color: #000066; font-weight: bold;">.</span>rotationZ = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">PI</span><span style="color: #000066; font-weight: bold;">;</span>
 stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToTexture<span style="color: #000000;">&#40;</span>sphereMaterial<span style="color: #000066; font-weight: bold;">.</span>_cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">3</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>lookAt method:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> lookAt<span style="color: #000000;">&#40;</span><span style="color: #004993;">x</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">y</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> z <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> dx <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #004993;">x</span> <span style="color: #000066; font-weight: bold;">-</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> dy <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #004993;">y</span> <span style="color: #000066; font-weight: bold;">-</span> camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> dz <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = z <span style="color: #000066; font-weight: bold;">-</span> camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>rotationX = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">atan2</span><span style="color: #000000;">&#40;</span>dz<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">sqrt</span><span style="color: #000000;">&#40;</span>dx <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> dy <span style="color: #000066; font-weight: bold;">*</span> dy<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">PI</span> <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000066; font-weight: bold;">;</span>
  camera<span style="color: #000066; font-weight: bold;">.</span>rotationY = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span>
   camera<span style="color: #000066; font-weight: bold;">.</span>rotationZ = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">atan2</span><span style="color: #000000;">&#40;</span>dx<span style="color: #000066; font-weight: bold;">,</span> dy<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>onEnterFrame method:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">angle</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.01</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> radius <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">400</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> anim<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onEnterFrame<span style="color: #000000;">&#40;</span>e <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
   <span style="color: #009900; font-style: italic;">//Rotate spheres</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">length</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = objects<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> step <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> mesh <span style="color: #000066; font-weight: bold;">:</span> Mesh<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span>i = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span> i <span style="color: #000066; font-weight: bold;">&lt;</span> <span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      mesh = objects<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #0033ff; font-weight: bold;">as</span> Mesh<span style="color: #000066; font-weight: bold;">;</span>
      mesh<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">cos</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">angle</span> <span style="color: #000066; font-weight: bold;">+</span> step<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">*</span> radius<span style="color: #000066; font-weight: bold;">;</span>
       mesh<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">sin</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">angle</span> <span style="color: #000066; font-weight: bold;">+</span> step<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">*</span> radius<span style="color: #000066; font-weight: bold;">;</span>
       step <span style="color: #000066; font-weight: bold;">+</span>= <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">PI</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">2</span> <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #0033ff; font-weight: bold;">if</span><span style="color: #000000;">&#40;</span>anim<span style="color: #000000;">&#41;</span> <span style="color: #004993;">angle</span> <span style="color: #000066; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">0.005</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #009900; font-style: italic;">//Store camera propetrties</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> cameraX <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> cameraY <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> cameraZ <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> cameraRotationX <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span>rotationX<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> cameraRotationY <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span>rotationY<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> cameraRotationZ <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = camera<span style="color: #000066; font-weight: bold;">.</span>rotationZ<span style="color: #000066; font-weight: bold;">;</span>
    rootContainer<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>camera<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #009900; font-style: italic;">//Render cube maps</span>
  <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span>i = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span> i <span style="color: #000066; font-weight: bold;">&lt;</span> <span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      mesh = objects<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #0033ff; font-weight: bold;">as</span> Mesh<span style="color: #000066; font-weight: bold;">;</span>
      calculateCubeMapForSphere<span style="color: #000000;">&#40;</span>mesh<span style="color: #000066; font-weight: bold;">,</span> objectsMaterials<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #0033ff; font-weight: bold;">as</span> ReflectRefractMaterial<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #000000;">&#125;</span>
   <span style="color: #009900; font-style: italic;">//set render back</span>
   stage3D<span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>setRenderToBackBuffer<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
  camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">scaleX</span> = <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span>
  camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">scaleY</span> = <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span>
  cameraContainer<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>camera<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = cameraX<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = cameraY<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>z = cameraZ<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>rotationX = cameraRotationX<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>rotationY = cameraRotationY<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>rotationZ = cameraRotationZ<span style="color: #000066; font-weight: bold;">;</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>fov = <span style="color: #000000; font-weight:bold;">1.5707963267948966</span><span style="color: #000066; font-weight: bold;">;</span>
    camera<span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 skyBox<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span>
   skyBox<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span>
   skyBox<span style="color: #000066; font-weight: bold;">.</span>z = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//render</span>
    camera<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">render</span><span style="color: #000000;">&#40;</span>stage3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>That&#8217;s all! Thanks for reading! If you have any questions please <a href="http://gonchar.me/blog/contact">contact me</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1306/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realtime raycast in Alternativa3D</title>
		<link>http://gonchar.me/blog/goncharposts/1293</link>
		<comments>http://gonchar.me/blog/goncharposts/1293#comments</comments>
		<pubDate>Mon, 05 Dec 2011 22:09:52 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1293</guid>
		<description><![CDATA[Reflect + Refract]]></description>
			<content:encoded><![CDATA[<p align="center">Reflect + Refract</p>
<p><a href="http://gonchar.me/alternativaplatform/raycast/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/preview.jpg" alt="" title="preview" width="592" height="394" class="aligncenter size-full wp-image-1294" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1293/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>(en) Environment and Refraction in Alternativa3D</title>
		<link>http://gonchar.me/blog/goncharposts/1281</link>
		<comments>http://gonchar.me/blog/goncharposts/1281#comments</comments>
		<pubDate>Sun, 04 Dec 2011 19:53:13 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1281</guid>
		<description><![CDATA[In this lesson I’ll show you how to create your own environment and refract material in Alternativa3D 8.17.0. Cube Texture Molehill supports cube mapping. Cube mapping is a method of environment mapping that uses a six-sided cube as the map shape. The environment is projected onto the six faces of a cube and stored as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gonchar.me/alternativaplatform/refract/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/1_2.jpg" alt="" title="1_2" width="593" height="394" class="aligncenter size-full wp-image-1276" /></a></p>
<p>In this lesson I’ll show you how to create your own environment and refract material in <a href="http://alternativaplatform.com/ru/download8">Alternativa3D 8.17.0</a>.</p>
<h2>Cube Texture</h2>
<p>Molehill supports <a href="http://en.wikipedia.org/wiki/Cube_mapping">cube mapping</a>. Cube mapping is a method of environment mapping that uses a six-sided cube as the map shape. The environment is projected onto the six faces of a cube and stored as six square textures, or unfolded into six regions of a single texture. For create new cube-map you need to call createCubeTexture method of created instance of Context3D. For upload each side of cube in cubemap you need to use uploadFromBitmapData method of CubeTexture instance. This method uploads each <a href="http://en.wikipedia.org/wiki/Mipmap">mip-level</a>.</p>
<h2>Environment</h2>
<p><img class="aligncenter size-full wp-image-1252" title="3_env" src="http://gonchar.me/blog/wp-content/uploads/2011/12/3_env.jpg" alt="" width="598" height="397" /><br />
For calculating Environment I need to know: vertex normal, object local-space camera position, object local to global matrix. Environment vector calculated by this formula:</p>
<p><img class="aligncenter size-full wp-image-1256" title="4_formula" src="http://gonchar.me/blog/wp-content/uploads/2011/12/4_formula.png" alt="" width="122" height="24" /></p>
<p align="center">V &#8211; View Vector = camera position &#8211; vertex position, N &#8211; Normal</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Transform3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> MyGlassMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
     alternativa3d <span style="color: #6699cc; font-weight: bold;">var</span> _cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource<span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//vertex shader</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//fragment shader</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program <span style="color: #000066; font-weight: bold;">:</span> ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> MyGlassMaterial<span style="color: #000000;">&#40;</span>cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         _cubeTexture = cubeTexture<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//vertex normal</span>
         <span style="color: #990000;">&quot;mov vt0, va1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//normal from local to global</span>
           <span style="color: #990000;">&quot;m33 vt0.xyz, vt0.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//viewVec</span>
           <span style="color: #990000;">&quot;sub vt1, vc4, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//viewVec from local to global</span>
          <span style="color: #990000;">&quot;m33 vt1.xyz, vt1.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">// r = V - 2(V.N)*N</span>
         <span style="color: #990000;">&quot;dp3 vt2, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add vt2, vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt2, vt0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt2, vt1, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;neg vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;nrm vt2.xyz, vt2.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//send to fragment shader</span>
           <span style="color: #990000;">&quot;mov v0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//project vertex</span>
            <span style="color: #990000;">&quot;m44 op, va0, vc0&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//get cubemap color</span>
         <span style="color: #990000;">&quot;tex ft0,v0.xyz,fs0 <span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//output color</span>
          <span style="color: #990000;">&quot;mov oc, ft0&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       alternativa3d override <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//fill cubeTexture</span>
          <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_cubeTexture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;</span>amp<span style="color: #000066; font-weight: bold;">;&amp;</span>amp<span style="color: #000066; font-weight: bold;">;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>_cubeTexture<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>_cubeTexture<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//upload program</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program = Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span>stage3Ds<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
       <span style="color: #009900; font-style: italic;">//draw each surface of object</span>
       override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #009900; font-style: italic;">//get link to object</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object <span style="color: #000066; font-weight: bold;">:</span> Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #009900; font-style: italic;">//positionBuffer </span>
           <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//normalsBuffer </span>
            <span style="color: #6699cc; font-weight: bold;">var</span> normalsBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">NORMAL</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
         <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit <span style="color: #000066; font-weight: bold;">:</span> DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//setting buffers</span>
           <span style="color: #009900; font-style: italic;">//point types float3,float3 and offsets 0,5</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> normalsBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//project matrix</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//local-space camera position</span>
           <span style="color: #6699cc; font-weight: bold;">var</span> cameraToLocalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = object<span style="color: #000066; font-weight: bold;">.</span>cameraToLocalTransform<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">4</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//calculating local to global transform</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> globalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = <span style="color: #0033ff; font-weight: bold;">new</span> Transform3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          globalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">copy</span><span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            globalTransform<span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span>localToGlobalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//send this transform</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> globalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//set cubemap texture       </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> _cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//add surface to draw</span>
           camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&amp;</span>gt<span style="color: #000066; font-weight: bold;">;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span>RenderPriority<span style="color: #000066; font-weight: bold;">.</span>OPAQUE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<h2>Refraction</h2>
<p>For refraction ray I used <a href="http://en.wikipedia.org/wiki/Snell%27s_law">Shell&#8217;s law</a>.<br />
Source formula:<br />
<img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/4/1/2/4128a7c996dce997055cc4dfb4347589.png" title="f1" class="aligncenter" width="135" height="21" /><br />
<img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/5/1/f/51f5e41a37426fb65799e7789015bb8b.png" title="f2" class="aligncenter" width="306" height="51" /><img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/c/3/1/c31bbcb8e2410a7c1fb621111a23c619.png" title="f3" class="aligncenter" width="355" height="48" /><br />
Changing n1/n2 by Refraction Index we calculate next formula:<br />
<img src="http://gonchar.me/blog/wp-content/uploads/2011/12/formula.png" alt="" title="formula" width="658" height="29" class="aligncenter size-full wp-image-1270" /></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Transform3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DBlendFactor<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> MyGlassMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
     alternativa3d <span style="color: #6699cc; font-weight: bold;">var</span> _cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource<span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//vertex shader</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//fragment shader</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program <span style="color: #000066; font-weight: bold;">:</span> ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> reflectionPower<span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.4</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> refractionIndex <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.01</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">alpha</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.8</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> MyGlassMaterial<span style="color: #000000;">&#40;</span>cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         _cubeTexture = cubeTexture<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//vertex normal</span>
         <span style="color: #990000;">&quot;mov vt0, va1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//normal from local to global</span>
           <span style="color: #990000;">&quot;m33 vt0.xyz, vt0.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//viewVec</span>
           <span style="color: #990000;">&quot;sub vt1, vc4, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//viewVec from local to global</span>
          <span style="color: #990000;">&quot;m33 vt1.xyz, vt1.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">// r = V - 2(V.N)*N</span>
         <span style="color: #990000;">&quot;dp3 vt2, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add vt2, vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt2, vt0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt2, vt1, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;neg vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;nrm vt2.xyz, vt2.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//send to fragment shader</span>
           <span style="color: #990000;">&quot;mov v0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V) - SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
         <span style="color: #009900; font-style: italic;">//(V.N)</span>
         <span style="color: #990000;">&quot;dp3 vt3, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)*N</span>
           <span style="color: #990000;">&quot;mul vt3, vt3, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)*N-V</span>
         <span style="color: #990000;">&quot;sub vt3, vt3, vt1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V)</span>
           <span style="color: #990000;">&quot;mul vt3, vt3, vc5.y<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//V.N</span>
           <span style="color: #990000;">&quot;dp3 vt4, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)^2</span>
           <span style="color: #990000;">&quot;mul vt4, vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(1-(V.N)^2)</span>
           <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//REFR_IND^2(1-(V.N)^2)</span>
         <span style="color: #990000;">&quot;mul vt4, vc5.z, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//1-REFR_IND^2(1-(V.N)^2)</span>
           <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//SQRT(1-REFR_IND^2(1-(V.N)^2))</span>
         <span style="color: #990000;">&quot;sqt vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
           <span style="color: #990000;">&quot;mul vt4, vt4, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V) - SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
         <span style="color: #990000;">&quot;sub vt4, vt3, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//normalize</span>
         <span style="color: #990000;">&quot;nrm vt4.xyz, vt4.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mov v1, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//project vertex</span>
            <span style="color: #990000;">&quot;m44 op, va0, vc0&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//environment</span>
           <span style="color: #990000;">&quot;tex ft0,v0.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
            <span style="color: #009900; font-style: italic;">//refract</span>
           <span style="color: #990000;">&quot;tex ft1,v1.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
            <span style="color: #009900; font-style: italic;">//mix them</span>
          <span style="color: #990000;">&quot;sub ft3, ft0, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul ft3, ft3, fc0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add ft3, ft3, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//alpha</span>
         <span style="color: #990000;">&quot;mov ft3.w, fc0.w<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//output color</span>
          <span style="color: #990000;">&quot;mov oc, ft3&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       <span style="color: #009900; font-style: italic;">//переопределяем метод заливки ресурсов в видео-карту</span>
      alternativa3d override <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//fill cubeTexture</span>
          <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_cubeTexture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;</span>amp<span style="color: #000066; font-weight: bold;">;&amp;</span>amp<span style="color: #000066; font-weight: bold;">;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>_cubeTexture<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>_cubeTexture<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//upload program</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program = Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span>stage3Ds<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">//draw each surface of object</span>
       override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Light3D<span style="color: #000066; font-weight: bold;">&gt;,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//draw each surface of object</span>
       override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #009900; font-style: italic;">//get link to object</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object <span style="color: #000066; font-weight: bold;">:</span> Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #009900; font-style: italic;">//positionBuffer </span>
           <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//normalsBuffer </span>
            <span style="color: #6699cc; font-weight: bold;">var</span> normalsBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">NORMAL</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
         <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit <span style="color: #000066; font-weight: bold;">:</span> DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//setting buffers</span>
           <span style="color: #009900; font-style: italic;">//point types float3,float3 and offsets 0,5</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> normalsBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//project matrix</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//local-space camera position</span>
           <span style="color: #6699cc; font-weight: bold;">var</span> cameraToLocalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = object<span style="color: #000066; font-weight: bold;">.</span>cameraToLocalTransform<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">4</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//send to vertex shader 1, refractionIndex и refractionIndex^2 </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> refractionIndex<span style="color: #000066; font-weight: bold;">,</span> refractionIndex<span style="color: #000066; font-weight: bold;">*</span>refractionIndex<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//calculating local to global transform</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> globalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = <span style="color: #0033ff; font-weight: bold;">new</span> Transform3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          globalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">copy</span><span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            globalTransform<span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span>localToGlobalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//send this transform</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">6</span><span style="color: #000066; font-weight: bold;">,</span> globalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//mix color</span>
drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span><span style="color: #004993;">alpha</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//set cubemap texture   </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> _cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//add surface to draw</span>
           camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&gt;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> RenderPriority<span style="color: #000066; font-weight: bold;">.</span>TRANSPARENT_SORT<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>blendSource = Context3DBlendFactor<span style="color: #000066; font-weight: bold;">.</span>SOURCE_ALPHA<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>blendDestination = Context3DBlendFactor<span style="color: #000066; font-weight: bold;">.</span>ONE_MINUS_SOURCE_ALPHA<span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><a href="http://gonchar.me/alternativaplatform/refract/2/"><img class="aligncenter size-full wp-image-1242" title="2" src="http://gonchar.me/blog/wp-content/uploads/2011/12/2.jpg" alt="" width="589" height="392" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1281/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Преломление и окружение в Alternativa3D</title>
		<link>http://gonchar.me/blog/goncharposts/1240</link>
		<comments>http://gonchar.me/blog/goncharposts/1240#comments</comments>
		<pubDate>Sun, 04 Dec 2011 19:03:12 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1240</guid>
		<description><![CDATA[Всем привет. В этом уроке я хочу поделится с вами опытом создания собственного материала окружения и преломления в Alternativa3D 8.17.0. Кубическая текстура В Molehill присутствует поддрежка кубических текстур. Кубическая текстура состоит из шести равных по размеру квадратных текстур, упорядоченных в кубической топологии. Они используются для описания окрестных наложений. Для того, чтобы создать кубическую текстуру необходимо [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gonchar.me/alternativaplatform/refract/"><img src="http://gonchar.me/blog/wp-content/uploads/2011/12/1_2.jpg" alt="" title="1_2" width="593" height="394" class="aligncenter size-full wp-image-1276" /></a><br />
Всем привет. В этом уроке я хочу поделится с вами опытом создания собственного материала окружения и преломления в <a href="http://alternativaplatform.com/ru/download8">Alternativa3D 8.17.0</a>.</p>
<h2>Кубическая текстура</h2>
<p>В Molehill присутствует поддрежка <a href="http://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B0">кубических текстур</a>. Кубическая текстура состоит из шести равных по размеру квадратных текстур, упорядоченных в кубической топологии. Они используются для описания окрестных наложений. Для того, чтобы создать кубическую текстуру необходимо вызвать метод createCubeTexture у полученного Context3D. В данный метод необходимо передать: длинну краев текстуры в текстурных пикселях, формат текстурного пикселя списка перечисления Context3DTextureFormat. Далее, в созданную кубическую текстуру с помощью метода uploadFromBitmapData, загрузите все компоненты кубического текстурирования из объекта BitmapData. Эта функция загружает один mip-уровень одной стороны карты куба. Вызывайте метод uploadFromBitmapData () по мере необходимости, чтобы загрузить каждый <a href="http://ru.wikipedia.org/wiki/MIP-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">mip-уровень</a> и грань карты куба.</p>
<h2>Окружение</h2>
<p><img class="aligncenter size-full wp-image-1252" title="3_env" src="http://gonchar.me/blog/wp-content/uploads/2011/12/3_env.jpg" alt="" width="598" height="397" /></p>
<p>Для того чтобы рассчитать отражение на шейдере для объекта, необходимо знать: нормаль вершины, позицию камеры в локальном пространстве объекта, матрицу перевода из локального в глобальное пространство объекта. Отраженный луч рассчитывается по стандартной формуле:</p>
<p><img class="aligncenter size-full wp-image-1256" title="4_formula" src="http://gonchar.me/blog/wp-content/uploads/2011/12/4_formula.png" alt="" width="122" height="24" /></p>
<p align="center">V &#8211; View Vector = позиция камеры &#8211; позиция вершины, N &#8211; Normal</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Transform3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> MyGlassMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
     <span style="color: #009900; font-style: italic;">//кубическая текстура</span>
     alternativa3d <span style="color: #6699cc; font-weight: bold;">var</span> _cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource<span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//вершинный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//фрагментный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #009900; font-style: italic;">//шейдер-программа</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program <span style="color: #000066; font-weight: bold;">:</span> ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> MyGlassMaterial<span style="color: #000000;">&#40;</span>cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         _cubeTexture = cubeTexture<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//нормаль вершины</span>
         <span style="color: #990000;">&quot;mov vt0, va1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//переводим из локального в глобальное пространство</span>
         <span style="color: #990000;">&quot;m33 vt0.xyz, vt0.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//в локальном пространстве рассчитываем view vec = позиция камеры - позиция вершины.</span>
           <span style="color: #990000;">&quot;sub vt1, vc4, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//переводим viewVec из локального в глобальное пространство</span>
         <span style="color: #990000;">&quot;m33 vt1.xyz, vt1.xyz, vc5<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">// r = V - 2(V.N)*N</span>
         <span style="color: #990000;">&quot;dp3 vt2, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add vt2, vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt2, vt0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt2, vt1, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;neg vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">// нормализируем</span>
           <span style="color: #990000;">&quot;nrm vt2.xyz, vt2.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//отправляем фрагментному шейдеру</span>
          <span style="color: #990000;">&quot;mov v0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//прогоняем позицию вершины через матрицу проекции</span>
           <span style="color: #990000;">&quot;m44 op, va0, vc0&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//получаем цвет по лучу из кубической текстуры</span>
            <span style="color: #990000;">&quot;tex ft0,v0.xyz,fs0 <span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//отправляем результат</span>
           <span style="color: #990000;">&quot;mov oc, ft0&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       <span style="color: #009900; font-style: italic;">//переопределяем метод заливки ресурсов в видео-карту</span>
      alternativa3d override <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//кубическая текстура</span>
         <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_cubeTexture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;</span>amp<span style="color: #000066; font-weight: bold;">;&amp;</span>amp<span style="color: #000066; font-weight: bold;">;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>_cubeTexture<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>_cubeTexture<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//шейдерная программа</span>
         program<span style="color: #000066; font-weight: bold;">.</span>program = Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span>stage3Ds<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
       <span style="color: #009900; font-style: italic;">//отрисовка сурфейсов</span>
     override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #009900; font-style: italic;">//получаем ссылку на объект через его сурфейсу</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object <span style="color: #000066; font-weight: bold;">:</span> Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #009900; font-style: italic;">//буфер позиции</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//буфер нормалей</span>
           <span style="color: #6699cc; font-weight: bold;">var</span> normalsBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">NORMAL</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
         <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit <span style="color: #000066; font-weight: bold;">:</span> DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//для вершинного шейдера загружаем буфер позиции и нормалей</span>
           <span style="color: #009900; font-style: italic;">//при этом указываем их формат float3, float3 и смещения 0,5</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> normalsBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем матрицу проекции</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем позицию камеры в локальном пространстве объекта</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> cameraToLocalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = object<span style="color: #000066; font-weight: bold;">.</span>cameraToLocalTransform<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">4</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//рассчитываем матрицу перевода из локального в глобальное пространсво</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> globalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = <span style="color: #0033ff; font-weight: bold;">new</span> Transform3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          globalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">copy</span><span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            globalTransform<span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span>localToGlobalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем полученную матрицу</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> globalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//устанавливаем кубическую текстуру          </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> _cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//добавляем сурфейс на отрисовку</span>
         camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&amp;</span>gt<span style="color: #000066; font-weight: bold;">;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span>RenderPriority<span style="color: #000066; font-weight: bold;">.</span>OPAQUE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<h2>Преломление</h2>
<p>Для того чтобы рассчитать refraction ray я использовал <a href="http://en.wikipedia.org/wiki/Snell%27s_law">Закон Снелла</a>, но немного в модифицированной его векторной форме. Исходная формула:<br />
<img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/4/1/2/4128a7c996dce997055cc4dfb4347589.png" title="f1" class="aligncenter" width="135" height="21" /><br />
<img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/5/1/f/51f5e41a37426fb65799e7789015bb8b.png" title="f2" class="aligncenter" width="306" height="51" /><img alt="" src="http://upload.wikimedia.org/wikipedia/en/math/c/3/1/c31bbcb8e2410a7c1fb621111a23c619.png" title="f3" class="aligncenter" width="355" height="48" /><br />
Итого, заменив n1/n2 на коэффициент Refraction Index мы получаем:<br />
<img src="http://gonchar.me/blog/wp-content/uploads/2011/12/formula.png" alt="" title="formula" width="658" height="29" class="aligncenter size-full wp-image-1270" /><br />
Выполнив данную формулу, передаем полученный вектор фрагментной программе. Так же сделаем три публичных свойства у данного материала reflectionPower, refractionIndex и alpha для удобства работы с ним.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Transform3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DBlendFactor<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> MyGlassMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
     alternativa3d <span style="color: #6699cc; font-weight: bold;">var</span> _cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource<span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//вершинный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//фрагментный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler <span style="color: #000066; font-weight: bold;">:</span> AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #009900; font-style: italic;">//шейдер-программа</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program <span style="color: #000066; font-weight: bold;">:</span> ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #009900; font-style: italic;">//Отражение</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> reflectionPower<span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.4</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//коэффициент преломления</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> refractionIndex <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.01</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #009900; font-style: italic;">//прозрачность</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">alpha</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0.8</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> MyGlassMaterial<span style="color: #000000;">&#40;</span>cubeTexture <span style="color: #000066; font-weight: bold;">:</span> TextureResource = <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         _cubeTexture = cubeTexture<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//нормаль вершины</span>
         <span style="color: #990000;">&quot;mov vt0, va1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//переводим из локального в глобальное пространство</span>
         <span style="color: #990000;">&quot;m33 vt0.xyz, vt0.xyz, vc6<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//в локальном пространстве рассчитываем view vec = позиция камеры - позиция вершины.</span>
           <span style="color: #990000;">&quot;sub vt1, vc4, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//переводим viewVec из локального в глобальное пространство</span>
         <span style="color: #990000;">&quot;m33 vt1.xyz, vt1.xyz, vc6<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">// r = - (V - 2(V.N)*N) = 2(V.N)*N - V</span>
          <span style="color: #990000;">&quot;dp3 vt2, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add vt2, vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul vt2, vt0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;sub vt2, vt1, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;neg vt2, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">// нормализируем</span>
           <span style="color: #990000;">&quot;nrm vt2.xyz, vt2.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//отправляем фрагментному шейдеру</span>
          <span style="color: #990000;">&quot;mov v0, vt2<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V) - SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
         <span style="color: #009900; font-style: italic;">//(V.N)</span>
         <span style="color: #990000;">&quot;dp3 vt3, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)*N</span>
           <span style="color: #990000;">&quot;mul vt3, vt3, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)*N-V</span>
         <span style="color: #990000;">&quot;sub vt3, vt3, vt1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V)</span>
           <span style="color: #990000;">&quot;mul vt3, vt3, vc5.y<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//V.N</span>
           <span style="color: #990000;">&quot;dp3 vt4, vt1, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(V.N)^2</span>
           <span style="color: #990000;">&quot;mul vt4, vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//(1-(V.N)^2)</span>
           <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//REFR_IND^2(1-(V.N)^2)</span>
         <span style="color: #990000;">&quot;mul vt4, vc5.z, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//1-REFR_IND^2(1-(V.N)^2)</span>
           <span style="color: #990000;">&quot;sub vt4, vc5.x, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//SQRT(1-REFR_IND^2(1-(V.N)^2))</span>
         <span style="color: #990000;">&quot;sqt vt4, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
           <span style="color: #990000;">&quot;mul vt4, vt4, vt0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//REFR_IND*(V.N)*N-V) - SQRT(1-REFR_IND^2(1-(V.N)^2))*N</span>
         <span style="color: #990000;">&quot;sub vt4, vt3, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//нормализируем результат</span>
         <span style="color: #990000;">&quot;nrm vt4.xyz, vt4.xyz<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #990000;">&quot;mov v1, vt4<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
           <span style="color: #009900; font-style: italic;">//прогоняем позицию вершины через матрицу проекции</span>
           <span style="color: #990000;">&quot;m44 op, va0, vc0&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span>
            <span style="color: #009900; font-style: italic;">//отражение</span>
            <span style="color: #990000;">&quot;tex ft0,v0.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
            <span style="color: #009900; font-style: italic;">//преломление</span>
            <span style="color: #990000;">&quot;tex ft1,v1.xyz,fs0 &lt;cube,clamp,linear&gt;<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
            <span style="color: #009900; font-style: italic;">//смешиваем</span>
            <span style="color: #990000;">&quot;sub ft3, ft0, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;mul ft3, ft3, fc0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #990000;">&quot;add ft3, ft3, ft1<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
         <span style="color: #009900; font-style: italic;">//alpha</span>
         <span style="color: #990000;">&quot;mov ft3.w, fc0.w<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
          <span style="color: #009900; font-style: italic;">//отправляем результат</span>
           <span style="color: #990000;">&quot;mov oc, ft3&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       <span style="color: #009900; font-style: italic;">//переопределяем метод заливки ресурсов в видео-карту</span>
      alternativa3d override <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//кубическая текстура</span>
         <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_cubeTexture <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>_cubeTexture<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>_cubeTexture<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//шейдерная программа</span>
         program<span style="color: #000066; font-weight: bold;">.</span>program = Main<span style="color: #000066; font-weight: bold;">.</span>instance<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span>stage3Ds<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>context3D<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">//отрисовка сурфейсов</span>
     override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera <span style="color: #000066; font-weight: bold;">:</span> Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface <span style="color: #000066; font-weight: bold;">:</span> Surface<span style="color: #000066; font-weight: bold;">,</span> geometry <span style="color: #000066; font-weight: bold;">:</span> Geometry<span style="color: #000066; font-weight: bold;">,</span> lights <span style="color: #000066; font-weight: bold;">:</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Light3D<span style="color: #000066; font-weight: bold;">&gt;,</span> lightsLength <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900; font-style: italic;">//получаем ссылку на объект через его сурфейсу</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object <span style="color: #000066; font-weight: bold;">:</span> Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
         <span style="color: #009900; font-style: italic;">//буфер позиции</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//буфер нормалей</span>
           <span style="color: #6699cc; font-weight: bold;">var</span> normalsBuffer <span style="color: #000066; font-weight: bold;">:</span> VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">NORMAL</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit <span style="color: #000066; font-weight: bold;">:</span> DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//для вершинного шейдера загружаем буфер позиции и нормалей</span>
           <span style="color: #009900; font-style: italic;">//при этом указываем их формат float3, float3 и смещения 0,5</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> normalsBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем матрицу проекции</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем позицию камеры в локальном пространстве объекта</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> cameraToLocalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = object<span style="color: #000066; font-weight: bold;">.</span>cameraToLocalTransform<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">4</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">,</span> cameraToLocalTransform<span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//передаем 1, refractionIndex и refractionIndex^2 </span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">5</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> refractionIndex<span style="color: #000066; font-weight: bold;">,</span> refractionIndex<span style="color: #000066; font-weight: bold;">*</span>refractionIndex<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//рассчитываем матрицу перевода из локального в глобальное пространсво</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> globalTransform <span style="color: #000066; font-weight: bold;">:</span> Transform3D = <span style="color: #0033ff; font-weight: bold;">new</span> Transform3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          globalTransform<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">copy</span><span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            globalTransform<span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">.</span>localToGlobalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//передаем полученную матрицу</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexConstantsFromTransform<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">6</span><span style="color: #000066; font-weight: bold;">,</span> globalTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//mix color</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span>reflectionPower<span style="color: #000066; font-weight: bold;">,</span><span style="color: #004993;">alpha</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//устанавливаем кубическую текстуру</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> _cubeTexture<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//добавляем сурфейс на отрисовку</span>
         camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&gt;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">:</span> RenderPriority<span style="color: #000066; font-weight: bold;">.</span>TRANSPARENT_SORT<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>blendSource = Context3DBlendFactor<span style="color: #000066; font-weight: bold;">.</span>SOURCE_ALPHA<span style="color: #000066; font-weight: bold;">;</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>blendDestination = Context3DBlendFactor<span style="color: #000066; font-weight: bold;">.</span>ONE_MINUS_SOURCE_ALPHA<span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><a href="http://gonchar.me/alternativaplatform/refract/2/"><img class="aligncenter size-full wp-image-1242" title="2" src="http://gonchar.me/blog/wp-content/uploads/2011/12/2.jpg" alt="" width="589" height="392" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1240/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Flash умер!</title>
		<link>http://gonchar.me/blog/goncharposts/1234</link>
		<comments>http://gonchar.me/blog/goncharposts/1234#comments</comments>
		<pubDate>Fri, 11 Nov 2011 13:13:00 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1234</guid>
		<description><![CDATA[Прощай мой родной брат! Я так любил тебя. Как же мне дальше жить? Ведь всякие тупые олени говорят что ты умер, значит ты умер! Я ведь как все, тоже тупой олень который слушает других тупых оленей. Выкурив очередную сигарету, медленно, немного усомнившись в смысле жизни, сажусь за компьютер, чтобы потыкать палочкой в умершего брата. С [...]]]></description>
			<content:encoded><![CDATA[<p>Прощай мой родной брат! Я так любил тебя. Как же мне дальше жить? Ведь всякие тупые олени говорят что ты умер, значит ты умер! Я ведь как все, тоже тупой олень который слушает других тупых оленей. Выкурив очередную сигарету, медленно, немного усомнившись в смысле жизни, сажусь за компьютер, чтобы потыкать палочкой в умершего брата. С траурным видом сделал небольшой эффект грусти, потом нежными и сочувсвующими кликами моей старой потрепаной мышки, я портирую брата на Android, iOS, где мой брат кричит мне: &#8220;Эээййй, я жив!&#8221;. К сожалению я его не слышал&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1234/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>(en) Alternativa3D 8.17 Custom materials, shaders and intersectionRay</title>
		<link>http://gonchar.me/blog/goncharposts/1223</link>
		<comments>http://gonchar.me/blog/goncharposts/1223#comments</comments>
		<pubDate>Mon, 31 Oct 2011 00:43:16 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1223</guid>
		<description><![CDATA[In this lesson I&#8217;ll show you how to create custom materials and shaders with Alternativa3D 8.17.0. (clickable) When you develop molehill-projects, often arise situtations when you need more features in Alternativa3D, and standard materials do not enough. For example, we have loaded character model and onClick event we want to highlight this model little greeny. [...]]]></description>
			<content:encoded><![CDATA[<p>In this lesson I&#8217;ll show you how to create custom materials and shaders with <a href="alternativaplatform.com/ru/download8">Alternativa3D 8.17.0</a>.<br />
(clickable)<br />
<a href="http://gonchar.me/blog/datas/sample1/"><img src="http://gonchar.me/blog/datas/article1_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample2/"><img src="http://gonchar.me/blog/datas/article2_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample3/"><img src="http://gonchar.me/blog/datas/article3_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample4/"><img src="http://gonchar.me/blog/datas/article4_web.jpg" alt="" /></a><br />
When you develop molehill-projects, often arise situtations when you need more features in Alternativa3D, and standard materials do not enough. For example, we have loaded character model and onClick event we want to highlight this model little greeny.<br />
We have two solutions:<br />
1) Upload two textures in video-card and change them every time when model was clicked. First texture is diffuse texture. Second is little greeny diffuse texture. But, This is expensive way, because we must save links on every surface or find them in every onClick event, to setup new material.<br />
2) Create custom material with color and colorAlpha properties. And every mouse click, set colorAlpha custom material property.</p>
<h2>Find mouse coordinates in 3D space</h2>
<p>Alternativa3D have default opportunity to detect mouse coordinates in 3D-space.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">container<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>MouseEvent3D<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">MOUSE_MOVE</span><span style="color: #000066; font-weight: bold;">,</span> goMouseMove<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #339966; font-weight: bold;">function</span> goMouseMove<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span>MouseEvent3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">mouseX</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localX</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">mouseY</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localY</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> mouseZ<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span>localZ<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>But, there are one problem. I can do that only on MouseEvent3D. In this lesson I need to detect mouse coordinates onEnterFrame. Include altearnativa3d namespace and write this function:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000066; font-weight: bold;">...</span>
<span style="color: #009900; font-style: italic;">//ray center</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> localOrigin<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #009900; font-style: italic;">//ray directions</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> localDirection<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> calculateMouseInObjectSpace<span style="color: #000000;">&#40;</span>obj<span style="color: #000066; font-weight: bold;">:</span>Object3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>Vector3D <span style="color: #000000;">&#123;</span>
 <span style="color: #009900; font-style: italic;">//camera has calculateRay method</span>
    <span style="color: #009900; font-style: italic;">//which calculates center and direction of ray</span>
  camera<span style="color: #000066; font-weight: bold;">.</span>calculateRay<span style="color: #000000;">&#40;</span>localOrigin<span style="color: #000066; font-weight: bold;">,</span> localDirection<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">mouseX</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">mouseY</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//compose object matrix</span>
 obj<span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #009900; font-style: italic;">//append parents matrices</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">:</span>Object3D = obj<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">parent</span> <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
       <span style="color: #004993;">root</span> = <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">parent</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span><span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #009900; font-style: italic;">//do invert matrix, to translate ray in object local space</span>
  obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">invert</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> ox<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> oy<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> oz<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> dx<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> dy<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> dz<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//translate center of ray in local space</span>
    localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>a <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">b</span> <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">c</span> <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">;</span>
   localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>e <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>f <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>g <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">;</span>
   localOrigin<span style="color: #000066; font-weight: bold;">.</span>z = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>i <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>j <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>k <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//translate direction of ray in local space</span>
 localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>a <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">b</span> <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">c</span> <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>e <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>f <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>g <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  localDirection<span style="color: #000066; font-weight: bold;">.</span>z = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>i <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>j <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>k <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #009900; font-style: italic;">//we have center and direction in local space</span>
   <span style="color: #009900; font-style: italic;">//now we can call intersectRay method</span>
   <span style="color: #009900; font-style: italic;">//which returns result of intersection</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">data</span><span style="color: #000066; font-weight: bold;">:</span>RayIntersectionData = obj<span style="color: #000066; font-weight: bold;">.</span>intersectRay<span style="color: #000000;">&#40;</span>localOrigin<span style="color: #000066; font-weight: bold;">,</span> localDirection<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
     <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #004993;">data</span><span style="color: #000066; font-weight: bold;">.</span>point<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #000000;">&#125;</span>
   <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now we have function which finds mouse coordinates in local space of object.</p>
<h2>Creating custom material and shaders</h2>
<p>Now we create custom material with custom shader to emulate light.<br />
Material properties:</p>
<ul>
<li>Two textures for different effects by div, sub, add, mul them.</li>
<li>alpha</li>
<li>mousePos &#8211; mouse position on 3D-space</li>
<li>intensivity &#8211; light intensity</li>
</ul>
<p>The description of all process occurs in code comments.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.geom</span><span style="color: #000066; font-weight: bold;">.</span>Vector3D<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CustomMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
      <span style="color: #009900; font-style: italic;">//first texture</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> diffuseMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//second texture</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> dynamicMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//alpha</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">alpha</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #009900; font-style: italic;">//mouse position</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> mousePos<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//vertex shader</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">:</span>AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #009900; font-style: italic;">//fragments</span>
     <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">:</span>AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program<span style="color: #000066; font-weight: bold;">:</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//context for uploading resources</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> context<span style="color: #000066; font-weight: bold;">:</span>Context3D<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> intensivity<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//constructor</span>
       <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CustomMaterial<span style="color: #000000;">&#40;</span>diffuseMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">,</span> dynamicMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">,</span> context<span style="color: #000066; font-weight: bold;">:</span>Context3D<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>diffuseMap = diffuseMap<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>dynamicMap = dynamicMap<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>context = context<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//vertex shader</span>
         _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span> 
               <span style="color: #009900; font-style: italic;">//project vertex position</span>
               <span style="color: #990000;">&quot;m44 vt0, va0, vc0<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
               <span style="color: #009900; font-style: italic;">//send UV-coordinates in fragment shader</span>
                <span style="color: #990000;">&quot;mov v0, va1<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//send vertex-coordinates in fragment shader</span>
                <span style="color: #990000;">&quot;mov v1, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
               <span style="color: #009900; font-style: italic;">//Output Position = projected vertex position</span>
               <span style="color: #990000;">&quot;mov op, vt0<span style="">\n</span>&quot;</span>
            <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span> 
               <span style="color: #009900; font-style: italic;">//load texture №1</span>
             <span style="color: #990000;">&quot;tex ft0, v0, fs0 &lt;2D, repeat, linear, miplinear&gt;<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
                <span style="color: #009900; font-style: italic;">//load texture №2</span>
             <span style="color: #990000;">&quot;tex ft1, v0, fs1 &lt;2D, repeat, linear, miplinear&gt;<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//alpha </span>
                <span style="color: #990000;">&quot;mov ft0.w, fc0.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//there are we calculating distance from mouse to vertex</span>
                <span style="color: #009900; font-style: italic;">//(x-mouseX) </span>
               <span style="color: #990000;">&quot;sub ft2.x, v1.x, fc1.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) </span>
                <span style="color: #990000;">&quot;mul ft2.x, ft2.x, ft2.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(y-mouseY)</span>
                <span style="color: #990000;">&quot;sub ft2.y, v1.y, fc1.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(y-mouseY)*(y-mouseY)</span>
             <span style="color: #990000;">&quot;mul ft2.y, ft2.y, ft2.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//(z-mouseZ) </span>
               <span style="color: #990000;">&quot;sub ft2.z, v1.z, fc1.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(z-mouseZ)*(z-mouseZ)</span>
             <span style="color: #990000;">&quot;mul ft2.z, ft2.z, ft2.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY)</span>
             <span style="color: #990000;">&quot;add ft2.w, ft2.x, ft2.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY) + (z-mouseZ)*(z-mouseZ)</span>
             <span style="color: #990000;">&quot;add ft2.w, ft2.w, ft2.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//res = sqrt((x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY) + (z-mouseZ)*(z-mouseZ))</span>
             <span style="color: #990000;">&quot;sqt ft2.w, ft2.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
                <span style="color: #009900; font-style: italic;">//res/intensivity</span>
               <span style="color: #990000;">&quot;div ft3.x, ft2.w, fc1.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//reciprocal</span>
                <span style="color: #990000;">&quot;rcp ft3.x, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//mul RED texture channel</span>
               <span style="color: #990000;">&quot;mul ft0.x, ft0.x, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//mul GREEN texture channel</span>
             <span style="color: #990000;">&quot;mul ft0.y, ft0.y, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//mul BLUE texture channel</span>
              <span style="color: #990000;">&quot;mul ft0.z, ft0.z, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//mul texture №1 on texture №2</span>
              <span style="color: #990000;">&quot;mul ft0, ft0, ft1<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
               <span style="color: #009900; font-style: italic;">//output result</span>
             <span style="color: #990000;">&quot;mov oc, ft0&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       <span style="color: #009900; font-style: italic;">//override fillResources method</span>
     override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000066; font-weight: bold;">.</span>fillResources<span style="color: #000000;">&#40;</span>resources<span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//texture №1</span>
          <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>diffuseMap <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>diffuseMap<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>diffuseMap<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//texture №2</span>
          <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>dynamicMap <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>dynamicMap<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>dynamicMap<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//shader program</span>
            program<span style="color: #000066; font-weight: bold;">.</span>program = context<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">//surface draw</span>
      override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">:</span>Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">:</span>Surface<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">:</span>Geometry<span style="color: #000066; font-weight: bold;">,</span> lights<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Light3D<span style="color: #000066; font-weight: bold;">&gt;,</span> lightsLength<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #009900; font-style: italic;">//get link to object</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object<span style="color: #000066; font-weight: bold;">:</span>Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//get buffer with positions</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer<span style="color: #000066; font-weight: bold;">:</span>VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//get buffer with UVs</span>
           <span style="color: #6699cc; font-weight: bold;">var</span> uvBuffer<span style="color: #000066; font-weight: bold;">:</span>VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>TEXCOORDS<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit<span style="color: #000066; font-weight: bold;">:</span>DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//upload buffers with float3 and float2 formats</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> uvBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">3</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float2&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//set project matrix</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #009900; font-style: italic;">//send alpha        </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">alpha</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//send mouse position and intensivity</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">,</span> intensivity<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #009900; font-style: italic;">//set first texture</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> diffuseMap<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//set second texture</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> dynamicMap<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//add surface to draw</span>
           camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&gt;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span>RenderPriority<span style="color: #000066; font-weight: bold;">.</span>OPAQUE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><a href="http://www.sendspace.com/file/rbdkft">Download source code</a><br />
P.S. Sorry for my English. This is my first article in English. Thx for reading. Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1223/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Alternativa3D 8.17.0 Материалы, шейдеры, intersectionRay</title>
		<link>http://gonchar.me/blog/goncharposts/1180</link>
		<comments>http://gonchar.me/blog/goncharposts/1180#comments</comments>
		<pubDate>Sun, 30 Oct 2011 20:33:42 +0000</pubDate>
		<dc:creator>Gonchar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>

		<guid isPermaLink="false">http://gonchar.me/blog/?p=1180</guid>
		<description><![CDATA[Всем привет. В этом уроке я хочу поделится с вами опытом создания собственных материалов в Alternativa3D 8.17.0. (кликабельно) Часто возникают ситуации когда функционала стандартных материалов не достаточно или возникают ситуации когда необходимо написать свой индивидуальный шейдер. Возьмем пример. Допустим, у нас есть загруженная модель персонажа, и при клике на модель мы хотим чтобы она стала [...]]]></description>
			<content:encoded><![CDATA[<p>Всем привет. В этом уроке я хочу поделится с вами опытом создания собственных материалов в <a href="alternativaplatform.com/ru/download8">Alternativa3D 8.17.0</a>.<br />
(кликабельно)<br />
<a href="http://gonchar.me/blog/datas/sample1/"><img src="http://gonchar.me/blog/datas/article1_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample2/"><img src="http://gonchar.me/blog/datas/article2_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample3/"><img src="http://gonchar.me/blog/datas/article3_web.jpg" alt="" /></a><a href="http://gonchar.me/blog/datas/sample4/"><img src="http://gonchar.me/blog/datas/article4_web.jpg" alt="" /></a><br />
Часто возникают ситуации когда функционала стандартных материалов не достаточно или возникают ситуации когда необходимо написать свой индивидуальный шейдер. Возьмем пример. Допустим, у нас есть загруженная модель персонажа, и при клике на модель мы хотим чтобы она стала с зеленым оттенком. Соответственно, нам лучше держать один материал с параметрами color и alphaColor, которые передаются в шейдер и добавляются к результирующему цвету, чем использовать два разных материала с разными текстурами(текстура простая, текстура с зеленым оттенком), и каждый раз бежать по всем сурфейсам в мешах и устанавливать им текстуры.<br />
Альтернатива3D, на мой взгляд, сейчас самый перспективный движок, даже хотя бы потому, что при его разработке очень большое внимание уделяется производительности. Конечно немного жаль, что Alternativa3D остается закрытым движком, но это не является проблемой в написании своих материалов, шейдеров. Задача этого урока: показать пример создания собственного материала и шейдера, нахождение координат мыши в 3D-прострастве.</p>
<h2>Нахождение координат мыши в 3D-прострастве.</h2>
<p>В альтернативе присутствует возможность определения координаты мыши в локальном пространстве объекта:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">container<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>MouseEvent3D<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">MOUSE_MOVE</span><span style="color: #000066; font-weight: bold;">,</span> goMouseMove<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #339966; font-weight: bold;">function</span> goMouseMove<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span>MouseEvent3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">mouseX</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localX</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">mouseY</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localY</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> mouseZ<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = event<span style="color: #000066; font-weight: bold;">.</span>localZ<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Но проблема в том, что это возможно сделать только на MouseEvent3D событие. В данном уроке нам понадобится делать это каждый кадр. Для этого мы подключим неймспейс alternativa3d и напишем следующую функцию:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #009900; font-style: italic;">//подключаем неймспейс альтернативы</span>
<span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000066; font-weight: bold;">...</span>
<span style="color: #009900; font-style: italic;">//центр луча</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> localOrigin<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #009900; font-style: italic;">//направление</span>
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> localDirection<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> calculateMouseInObjectSpace<span style="color: #000000;">&#40;</span>obj<span style="color: #000066; font-weight: bold;">:</span>Object3D<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>Vector3D <span style="color: #000000;">&#123;</span>
  <span style="color: #009900; font-style: italic;">//у камеры присутсвует метод calculateRay </span>
   <span style="color: #009900; font-style: italic;">//который рассчитывает центр и направление луча</span>
 <span style="color: #009900; font-style: italic;">//передаем туда ссылки на наши вектора localOrigin и localDirection</span>
 <span style="color: #009900; font-style: italic;">//и координаты мыши соответственно</span>
 camera<span style="color: #000066; font-weight: bold;">.</span>calculateRay<span style="color: #000000;">&#40;</span>localOrigin<span style="color: #000066; font-weight: bold;">,</span> localDirection<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">mouseX</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">stage</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">mouseY</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//формируем матрицу объекта</span>
  obj<span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #009900; font-style: italic;">//пробегаемся по всей иерархии вверх и добавляем все матрицы</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">:</span>Object3D = obj<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">while</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">parent</span> <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
       <span style="color: #004993;">root</span> = <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">parent</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span>composeTransforms<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>append<span style="color: #000000;">&#40;</span><span style="color: #004993;">root</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #000000;">&#125;</span>
   <span style="color: #009900; font-style: italic;">//ивертируем матрицу для перевода луча в локальное пространство объекта</span>
    obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">invert</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> ox<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> oy<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> oz<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localOrigin<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #6699cc; font-weight: bold;">var</span> dx<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> dy<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #6699cc; font-weight: bold;">var</span> dz<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = localDirection<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//переводим центр луча в локальное пространство объекта</span>
  localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>a <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">b</span> <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">c</span> <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">d</span><span style="color: #000066; font-weight: bold;">;</span>
   localOrigin<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>e <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>f <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>g <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>h<span style="color: #000066; font-weight: bold;">;</span>
   localOrigin<span style="color: #000066; font-weight: bold;">.</span>z = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>i <span style="color: #000066; font-weight: bold;">*</span> ox <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>j <span style="color: #000066; font-weight: bold;">*</span> oy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>k <span style="color: #000066; font-weight: bold;">*</span> oz <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>l<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #009900; font-style: italic;">//переводим направление луча в локальное пространство объекта</span>
  localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>a <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">b</span> <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">c</span> <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  localDirection<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span> = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>e <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>f <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>g <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  localDirection<span style="color: #000066; font-weight: bold;">.</span>z = obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>i <span style="color: #000066; font-weight: bold;">*</span> dx <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>j <span style="color: #000066; font-weight: bold;">*</span> dy <span style="color: #000066; font-weight: bold;">+</span> obj<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">transform</span><span style="color: #000066; font-weight: bold;">.</span>k <span style="color: #000066; font-weight: bold;">*</span> dz<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #009900; font-style: italic;">//теперь у нас есть центр и направление луча в пространстве объекта</span>
  <span style="color: #009900; font-style: italic;">//поэтому теперь можно вызвать метод intersectRay </span>
    <span style="color: #009900; font-style: italic;">//который вернет результат пересечения RayIntersectionData</span>
 <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">data</span><span style="color: #000066; font-weight: bold;">:</span>RayIntersectionData = obj<span style="color: #000066; font-weight: bold;">.</span>intersectRay<span style="color: #000000;">&#40;</span>localOrigin<span style="color: #000066; font-weight: bold;">,</span> localDirection<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
     <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #004993;">data</span><span style="color: #000066; font-weight: bold;">.</span>point<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #000000;">&#125;</span>
   <span style="color: #0033ff; font-weight: bold;">return</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Теперь у нас есть метод, при вызове которого можно получить координаты мыши в пространстве переданного объекта.</p>
<h2>Создания собственного материала и шейдера</h2>
<p>Теперь когда мы можем в любой момент получить координаты мыши, напишем материал с шейдером, которые будут освещать объект от координат пересечения луча.</p>
<p>Материал будет принимать:</p>
<ul>
<li>две текстуры, для того чтобы получились разнообразные эффекты, как на ссылках выше, засчет вычитания, добавления, деления, умножение одной текстуры на другую.</li>
<li>alpha &#8211; прозрачность текстуры</li>
<li>mousePos &#8211; позиция мыши в пространстве</li>
<li>intesivity &#8211; интенсивность света</li>
</ul>
<p>Далее описание всего процесса происходит в комментариях кода.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Camera3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>DrawUnit<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Light3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>Object3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>RenderPriority<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>core<span style="color: #000066; font-weight: bold;">.</span>VertexAttributes<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>A3DUtils<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>Material<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>materials<span style="color: #000066; font-weight: bold;">.</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>objects<span style="color: #000066; font-weight: bold;">.</span>Surface<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>Geometry<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> alternativa<span style="color: #000066; font-weight: bold;">.</span>engine3d<span style="color: #000066; font-weight: bold;">.</span>resources<span style="color: #000066; font-weight: bold;">.</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
  <span style="color: #0033ff; font-weight: bold;">import</span> avmplus<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>utils<span style="color: #000066; font-weight: bold;">.</span>AGALMiniAssembler<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3D<span style="color: #000066; font-weight: bold;">;</span>
   <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> flash<span style="color: #000066; font-weight: bold;">.</span>display3D<span style="color: #000066; font-weight: bold;">.</span>VertexBuffer3D<span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.geom</span><span style="color: #000066; font-weight: bold;">.</span>Vector3D<span style="color: #000066; font-weight: bold;">;</span>
 <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">;</span>
  <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
 use <span style="color: #004993;">namespace</span> alternativa3d<span style="color: #000066; font-weight: bold;">;</span>
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CustomMaterial <span style="color: #0033ff; font-weight: bold;">extends</span> Material <span style="color: #000000;">&#123;</span>
      <span style="color: #009900; font-style: italic;">//первая текстура</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> diffuseMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//вторая текстура</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> dynamicMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//прозрачность</span>
      <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">alpha</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span>
        <span style="color: #009900; font-style: italic;">//позиция мыши</span>
       <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> mousePos<span style="color: #000066; font-weight: bold;">:</span>Vector3D = <span style="color: #0033ff; font-weight: bold;">new</span> Vector3D<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//вершинный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">:</span>AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #009900; font-style: italic;">//фрагментный шейдер</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">:</span>AGALMiniAssembler = <span style="color: #0033ff; font-weight: bold;">new</span> AGALMiniAssembler<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//шейдер-программа</span>
       <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> program<span style="color: #000066; font-weight: bold;">:</span>ShaderProgram<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//контекст, для загрузки ресурсов</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> context<span style="color: #000066; font-weight: bold;">:</span>Context3D<span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #009900; font-style: italic;">//интенсивность</span>
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> intesivity<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">;</span>
       <span style="color: #009900; font-style: italic;">//конструктор материала</span>
     <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CustomMaterial<span style="color: #000000;">&#40;</span>diffuseMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">,</span> dynamicMap<span style="color: #000066; font-weight: bold;">:</span>TextureResource<span style="color: #000066; font-weight: bold;">,</span> context<span style="color: #000066; font-weight: bold;">:</span>Context3D<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
         <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>diffuseMap = diffuseMap<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>dynamicMap = dynamicMap<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #0033ff; font-weight: bold;">this</span><span style="color: #000066; font-weight: bold;">.</span>context = context<span style="color: #000066; font-weight: bold;">;</span>
         program = <span style="color: #0033ff; font-weight: bold;">new</span> ShaderProgram<span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//вершинный шейдер</span>
           _vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>VERTEX<span style="color: #000066; font-weight: bold;">,</span> 
               <span style="color: #009900; font-style: italic;">//прогоняем позицию через матрицу проекции</span>
              <span style="color: #990000;">&quot;m44 vt0, va0, vc0<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
               <span style="color: #009900; font-style: italic;">//передаем фрагментному шейдеру UV-координаты</span>
              <span style="color: #990000;">&quot;mov v0, va1<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//передаем фрагментному шейдеру позицию вершины </span>
               <span style="color: #990000;">&quot;mov v1, va0<span style="">\n</span>&quot;</span><span style="color: #000066; font-weight: bold;">+</span>
               <span style="color: #009900; font-style: italic;">//Output Position = позиция вершинны, после &quot;прогона&quot; через матрицу проекции</span>
             <span style="color: #990000;">&quot;mov op, vt0<span style="">\n</span>&quot;</span>
            <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//фрагментный шейдер</span>
           _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>assemble<span style="color: #000000;">&#40;</span>Context3DProgramType<span style="color: #000066; font-weight: bold;">.</span>FRAGMENT<span style="color: #000066; font-weight: bold;">,</span> 
               <span style="color: #009900; font-style: italic;">//текструра №1</span>
               <span style="color: #990000;">&quot;tex ft0, v0, fs0 &lt;2D, repeat, linear, miplinear&gt;<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
                <span style="color: #009900; font-style: italic;">//текструра №2</span>
               <span style="color: #990000;">&quot;tex ft1, v0, fs1 &lt;2D, repeat, linear, miplinear&gt;<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//alpha </span>
                <span style="color: #990000;">&quot;mov ft0.w, fc0.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//тут мы вычисляем корень квадратный</span>
              <span style="color: #009900; font-style: italic;">//(x-mouseX) </span>
               <span style="color: #990000;">&quot;sub ft2.x, v1.x, fc1.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) </span>
                <span style="color: #990000;">&quot;mul ft2.x, ft2.x, ft2.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(y-mouseY)</span>
                <span style="color: #990000;">&quot;sub ft2.y, v1.y, fc1.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(y-mouseY)*(y-mouseY)</span>
             <span style="color: #990000;">&quot;mul ft2.y, ft2.y, ft2.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//(z-mouseZ) </span>
               <span style="color: #990000;">&quot;sub ft2.z, v1.z, fc1.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
              <span style="color: #009900; font-style: italic;">//(z-mouseZ)*(z-mouseZ)</span>
             <span style="color: #990000;">&quot;mul ft2.z, ft2.z, ft2.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY)</span>
             <span style="color: #990000;">&quot;add ft2.w, ft2.x, ft2.y<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//(x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY) + (z-mouseZ)*(z-mouseZ)</span>
             <span style="color: #990000;">&quot;add ft2.w, ft2.w, ft2.z<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//res = sqrt((x-mouseX)*(x-mouseX) + (y-mouseY)*(y-mouseY) + (z-mouseZ)*(z-mouseZ))</span>
             <span style="color: #990000;">&quot;sqt ft2.w, ft2.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
                <span style="color: #009900; font-style: italic;">//res/интенсивность</span>
                <span style="color: #990000;">&quot;div ft3.x, ft2.w, fc1.w<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
              <span style="color: #009900; font-style: italic;">//инверсируем </span>
               <span style="color: #990000;">&quot;rcp ft3.x, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span>
             <span style="color: #009900; font-style: italic;">//умножаем канал RED текстуры №1 на наш коэффициент</span>
              <span style="color: #990000;">&quot;mul ft0.x, ft0.x, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//умножаем канал GREEN текстуры №1 на наш коэффициент</span>
                <span style="color: #990000;">&quot;mul ft0.y, ft0.y, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//умножаем канал BLUE текстуры №1 на наш коэффициент</span>
             <span style="color: #990000;">&quot;mul ft0.z, ft0.z, ft3.x<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
             <span style="color: #009900; font-style: italic;">//умножаем текстуру №1 на текстуру №2</span>
             <span style="color: #990000;">&quot;mul ft0, ft0, ft1<span style="">\n</span>&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> 
               <span style="color: #009900; font-style: italic;">//выводим результат</span>
             <span style="color: #990000;">&quot;mov oc, ft0&quot;</span>
           <span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
       <span style="color: #009900; font-style: italic;">//переопределяем метод заливки ресурсов в видео-карту</span>
      override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> fillResources<span style="color: #000000;">&#40;</span>resources<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Dictionary</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Class</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000066; font-weight: bold;">.</span>fillResources<span style="color: #000000;">&#40;</span>resources<span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//текстура №1</span>
         <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>diffuseMap <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>diffuseMap<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>diffuseMap<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//текстура №2</span>
         <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>dynamicMap <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">&amp;&amp;</span> A3DUtils<span style="color: #000066; font-weight: bold;">.</span>checkParent<span style="color: #000000;">&#40;</span><span style="color: #004993;">getDefinitionByName</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getQualifiedClassName</span><span style="color: #000000;">&#40;</span>dynamicMap<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Class</span><span style="color: #000066; font-weight: bold;">,</span> resourceType<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
                resources<span style="color: #000000;">&#91;</span>dynamicMap<span style="color: #000000;">&#93;</span> = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #000000;">&#125;</span>
           <span style="color: #009900; font-style: italic;">//шейдерная программа</span>
         program<span style="color: #000066; font-weight: bold;">.</span>program = context<span style="color: #000066; font-weight: bold;">.</span>createProgram<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">upload</span><span style="color: #000000;">&#40;</span>_vertexShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000066; font-weight: bold;">,</span> _fragmentShaderAssembler<span style="color: #000066; font-weight: bold;">.</span>agalcode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #009900; font-style: italic;">//отрисовка сурфейсов</span>
     override alternativa3d <span style="color: #339966; font-weight: bold;">function</span> collectDraws<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">:</span>Camera3D<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">:</span>Surface<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">:</span>Geometry<span style="color: #000066; font-weight: bold;">,</span> lights<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>Light3D<span style="color: #000066; font-weight: bold;">&gt;,</span> lightsLength<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span><span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000066; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #009900; font-style: italic;">//получаем ссылку на объект через его сурфейсу</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> object<span style="color: #000066; font-weight: bold;">:</span>Object3D = surface<span style="color: #000066; font-weight: bold;">.</span>object<span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//буфер позиции</span>
         <span style="color: #6699cc; font-weight: bold;">var</span> positionBuffer<span style="color: #000066; font-weight: bold;">:</span>VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>POSITION<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//буфер uv-координат</span>
          <span style="color: #6699cc; font-weight: bold;">var</span> uvBuffer<span style="color: #000066; font-weight: bold;">:</span>VertexBuffer3D = geometry<span style="color: #000066; font-weight: bold;">.</span>getVertexBuffer<span style="color: #000000;">&#40;</span>VertexAttributes<span style="color: #000066; font-weight: bold;">.</span>TEXCOORDS<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #6699cc; font-weight: bold;">var</span> drawUnit<span style="color: #000066; font-weight: bold;">:</span>DrawUnit = camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>createDrawUnit<span style="color: #000000;">&#40;</span>object<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000066; font-weight: bold;">.</span>program<span style="color: #000066; font-weight: bold;">,</span> geometry<span style="color: #000066; font-weight: bold;">.</span>_indexBuffer<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>indexBegin<span style="color: #000066; font-weight: bold;">,</span> surface<span style="color: #000066; font-weight: bold;">.</span>numTriangles<span style="color: #000066; font-weight: bold;">,</span> program<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//для вершинного шейдера загружаем буфер позиции и uv-координат</span>
          <span style="color: #009900; font-style: italic;">//при этом указываем их формат float3, float2</span>
           drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> positionBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
         drawUnit<span style="color: #000066; font-weight: bold;">.</span>setVertexBufferAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> uvBuffer<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">3</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;float2&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
           <span style="color: #009900; font-style: italic;">//передаем матрицу проекции</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setProjectionConstants<span style="color: #000000;">&#40;</span>camera<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> object<span style="color: #000066; font-weight: bold;">.</span>localToCameraTransform<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #009900; font-style: italic;">//передаем alpha        </span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">alpha</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
            <span style="color: #009900; font-style: italic;">//передаем позицию мыши и интенсивность</span>
            drawUnit<span style="color: #000066; font-weight: bold;">.</span>setFragmentConstantsFromNumbers<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">y</span><span style="color: #000066; font-weight: bold;">,</span> mousePos<span style="color: #000066; font-weight: bold;">.</span>z<span style="color: #000066; font-weight: bold;">,</span> intesivity<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
            <span style="color: #009900; font-style: italic;">//устанавливаем текстуру №1</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> diffuseMap<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//устанавливаем текстуру №2</span>
          drawUnit<span style="color: #000066; font-weight: bold;">.</span>setTextureAt<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> dynamicMap<span style="color: #000066; font-weight: bold;">.</span>_texture<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
          <span style="color: #009900; font-style: italic;">//добавляем сурфейс на отрисовку</span>
         camera<span style="color: #000066; font-weight: bold;">.</span>renderer<span style="color: #000066; font-weight: bold;">.</span>addDrawUnit<span style="color: #000000;">&#40;</span>drawUnit<span style="color: #000066; font-weight: bold;">,</span> objectRenderPriority <span style="color: #000066; font-weight: bold;">&gt;</span>= <span style="color: #000000; font-weight:bold;">0</span> <span style="color: #000066; font-weight: bold;">?</span> objectRenderPriority<span style="color: #000066; font-weight: bold;">:</span>RenderPriority<span style="color: #000066; font-weight: bold;">.</span>OPAQUE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
      <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Еще раз напомню, что это условный пример имитации освещения.</p>
<p><a href="http://www.sendspace.com/file/rbdkft">Скачать исходник</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gonchar.me/blog/goncharposts/1180/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

