<?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>Flastar &#187; in english</title>
	<atom:link href="http://flastar.ru/blog/flastarposts/category/in-english/feed" rel="self" type="application/rss+xml" />
	<link>http://flastar.ru/blog</link>
	<description>flash-developer</description>
	<lastBuildDate>Mon, 02 Jan 2012 10:12:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tutorial Realtime raycast in Alternativa3D</title>
		<link>http://flastar.ru/blog/flastarposts/1306</link>
		<comments>http://flastar.ru/blog/flastarposts/1306#comments</comments>
		<pubDate>Sun, 11 Dec 2011 22:45:21 +0000</pubDate>
		<dc:creator>Flastar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://flastar.ru/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://flastar.ru/alternativaplatform/reflect/"><img src="http://flastar.ru/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://flastar.ru/alternativaplatform/refract6/"><img src="http://flastar.ru/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://flastar.ru/alternativaplatform/raycast/"><img src="http://flastar.ru/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://flastar.ru/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://flastar.ru/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://flastar.ru/blog/contact">contact me</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://flastar.ru/blog/flastarposts/1306/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realtime raycast in Alternativa3D</title>
		<link>http://flastar.ru/blog/flastarposts/1293</link>
		<comments>http://flastar.ru/blog/flastarposts/1293#comments</comments>
		<pubDate>Mon, 05 Dec 2011 22:09:52 +0000</pubDate>
		<dc:creator>Flastar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://flastar.ru/blog/?p=1293</guid>
		<description><![CDATA[Reflect + Refract]]></description>
			<content:encoded><![CDATA[<p align="center">Reflect + Refract</p>
<p><a href="http://flastar.ru/alternativaplatform/raycast/"><img src="http://flastar.ru/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://flastar.ru/blog/flastarposts/1293/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>(en) Environment and Refraction in Alternativa3D</title>
		<link>http://flastar.ru/blog/flastarposts/1281</link>
		<comments>http://flastar.ru/blog/flastarposts/1281#comments</comments>
		<pubDate>Sun, 04 Dec 2011 19:53:13 +0000</pubDate>
		<dc:creator>Flastar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://flastar.ru/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://flastar.ru/alternativaplatform/refract/"><img src="http://flastar.ru/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://flastar.ru/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://flastar.ru/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://flastar.ru/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://flastar.ru/alternativaplatform/refract/2/"><img class="aligncenter size-full wp-image-1242" title="2" src="http://flastar.ru/blog/wp-content/uploads/2011/12/2.jpg" alt="" width="589" height="392" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://flastar.ru/blog/flastarposts/1281/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(en) Alternativa3D 8.17 Custom materials, shaders and intersectionRay</title>
		<link>http://flastar.ru/blog/flastarposts/1223</link>
		<comments>http://flastar.ru/blog/flastarposts/1223#comments</comments>
		<pubDate>Mon, 31 Oct 2011 00:43:16 +0000</pubDate>
		<dc:creator>Flastar</dc:creator>
				<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[in english]]></category>

		<guid isPermaLink="false">http://flastar.ru/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://flastar.ru/blog/datas/sample1/"><img src="http://flastar.ru/blog/datas/article1_web.jpg" alt="" /></a><a href="http://flastar.ru/blog/datas/sample2/"><img src="http://flastar.ru/blog/datas/article2_web.jpg" alt="" /></a><a href="http://flastar.ru/blog/datas/sample3/"><img src="http://flastar.ru/blog/datas/article3_web.jpg" alt="" /></a><a href="http://flastar.ru/blog/datas/sample4/"><img src="http://flastar.ru/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://flastar.ru/blog/flastarposts/1223/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

