<?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>Jozef Chúťka&#039;s blog &#187; QuadrantRenderEngine</title>
	<atom:link href="http://blog.yoz.sk/tag/quadrantrenderengine/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.yoz.sk</link>
	<description>My life, my work</description>
	<lastBuildDate>Tue, 31 Jan 2012 12:40:53 +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>Fixing Z-sorting in Papervision 3D (update)</title>
		<link>http://blog.yoz.sk/2010/03/fixing-z-sorting-in-papervision-3d/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fixing-z-sorting-in-papervision-3d</link>
		<comments>http://blog.yoz.sk/2010/03/fixing-z-sorting-in-papervision-3d/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 15:23:12 +0000</pubDate>
		<dc:creator>Jozef Chúťka</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash / Flex]]></category>
		<category><![CDATA[BasicRenderEngine]]></category>
		<category><![CDATA[Cube]]></category>
		<category><![CDATA[DisplayObject3D]]></category>
		<category><![CDATA[Papervision 3D]]></category>
		<category><![CDATA[QuadrantRenderEngine]]></category>
		<category><![CDATA[sortMode]]></category>
		<category><![CDATA[ViewportLayer]]></category>
		<category><![CDATA[ViewportLayerSortMode]]></category>
		<category><![CDATA[z-sort]]></category>

		<guid isPermaLink="false">http://blog.yoz.sk/?p=1139</guid>
		<description><![CDATA[It may be very tricky thing to get papervision 3d scene rendered correctly event for the simpliest objects. In my case, I have created simple 3d scene with few primitive objects (8 cubes). Cubes are positioned close to each other to create shape of bigger cube + some small space between. Cubes are added into [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.yoz.sk/wp-content/uploads/cube3-200x200.png" alt="" title="cube3" width="200" height="200" class="alignleft size-medium wp-image-1145" /></p>
<p>It may be very tricky thing to get papervision 3d scene rendered correctly event for the simpliest objects. In my case, I have created simple 3d scene with few primitive objects (8 cubes). Cubes are positioned close to each other to create shape of bigger cube + some small space between. Cubes are added into wrapping DisplayObject3D, later wrapper is added to scene in order to make it easy to rotate cubes as a group. Camera targets the center of the scene. In the demo, there are 3 sliders to rotate wrapping object in each x, y, z axis + two buttons that rotates wrapper in the problematic possition (based on z-sorting fix approach). Finally I managet it to work, you can follow my approaches below. Notice the changes are not cummulative, each approach comes from original Application.mxml. All of the ideas collected online from blogs, forums etc.</p>
<p><span id="more-1139"></span></p>
<p style="clear:both;">Application.mxml code</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot;
    applicationComplete=&quot;init()&quot; enterFrame=&quot;loop()&quot;
    frameRate=&quot;40&quot;&gt;
&lt;mx:Script&gt;
&lt;![CDATA[
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;

    private var viewport:Viewport3D;
    private var scene:Scene3D = new Scene3D();
    private var camera:Camera3D = new Camera3D(60, 10, 1000);
    private var renderer:BasicRenderEngine= new BasicRenderEngine();
    private var wrapper:DisplayObject3D = new DisplayObject3D();

    private var black:ColorMaterial = new ColorMaterial(0x000000, 1);
    private var white:ColorMaterial = new ColorMaterial(0xffffff, 1);

    private function init():void
    {
        viewport = new Viewport3D(width, height, false);
        container.addChild(viewport);

        black.opposite = true;
        white.opposite = true;

        var materialList:MaterialsList = new MaterialsList();
        materialList.addMaterial(black, &quot;top&quot;);
        materialList.addMaterial(black, &quot;bottom&quot;);
        materialList.addMaterial(white, &quot;left&quot;);
        materialList.addMaterial(white, &quot;right&quot;);
        materialList.addMaterial(black, &quot;front&quot;);
        materialList.addMaterial(black, &quot;back&quot;);

        var cube:Cube;
        for(var x:uint = 0; x &lt; 2; x++)
        for(var y:uint = 0; y &lt; 2; y++)
        for(var z:uint = 0; z &lt; 2; z++)
        {
            cube = new Cube(materialList, 100, 100, 100, 1, 1, 1, Cube.ALL);
            cube.x = x * 100 * 1.05;
            cube.y = y * 100 * 1.05;
            cube.z = z * 100 * 1.05;
            wrapper.addChild(cube);
        }

        scene.addChild(wrapper);

        camera.lookAt(cube);
        camera.zoom = 100;
    }

    private function loop():void
    {
        if(!viewport)
            return;

        wrapper.rotationX = rx.value;
        wrapper.rotationY = ry.value;
        wrapper.rotationZ = rz.value;

        renderer.renderScene(scene, camera, viewport);
    }

    private function position1():void
    {
        rx.value = 216;
        ry.value = 101;
        rz.value = 0;
    }

    private function position2():void
    {
        rx.value = 333;
        ry.value = 19;
        rz.value = 360;
    }
]]&gt;
&lt;/mx:Script&gt;
&lt;mx:UIComponent id=&quot;container&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;
&lt;mx:HBox&gt;
    &lt;mx:VSlider id=&quot;rx&quot; value=&quot;216&quot; minimum=&quot;0&quot; maximum=&quot;360&quot; liveDragging=&quot;true&quot;/&gt;
    &lt;mx:VSlider id=&quot;ry&quot; value=&quot;101&quot; minimum=&quot;0&quot; maximum=&quot;360&quot; liveDragging=&quot;true&quot;/&gt;
    &lt;mx:VSlider id=&quot;rz&quot; value=&quot;0&quot; minimum=&quot;0&quot; maximum=&quot;360&quot; liveDragging=&quot;true&quot;/&gt;
    &lt;mx:VBox&gt;
        &lt;mx:Button label=&quot;position 1&quot; click=&quot;position1()&quot; /&gt;
        &lt;mx:Button label=&quot;position 2&quot; click=&quot;position2()&quot; /&gt;
    &lt;/mx:VBox&gt;
&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;</pre>
<p>renders corrupted on this position:
<p>
<img src="http://blog.yoz.sk/wp-content/uploads/cube1.png" alt="" title="cube1" width="400" height="400" class="alignnone size-full wp-image-1141" /></p>
<hr />
<p>&#8230; then I defined camera clipping, but no success (someone&#8217;s suggestion, but it seems <a href="http://blog.zupko.info/?p=170">clipping is to be used for different purpose</a>):</p>
<pre class="brush: as3; title: ; notranslate">camera.useClipping = true; // before line 57</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube1.png" alt="" title="cube1" width="400" height="400" class="alignnone size-full wp-image-1141" /></p>
<hr />
<p>&#8230; adding quarterFaces(), some more vertices for each vertex is not gonna save the day:</p>
<pre class="brush: as3; title: ; notranslate">cube.quarterFaces(); // before line 50</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube4.png" alt="" title="cube4" width="400" height="400" class="alignnone size-full wp-image-1148" /></p>
<hr />
<p>&#8230; adding ViewportLayer-s for each object fixed first problematic view, but corrupted another:</p>
<pre class="brush: as3; title: ; notranslate">import org.papervision3d.view.layer.ViewportLayer;
...
var viewportLayer:ViewportLayer; // before line 42
...
viewportLayer = viewport.getChildLayer(cube, true); // before line 51
viewportLayer.addDisplayObject3D(cube);</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube2.png" alt="" title="cube2" width="400" height="400" class="alignnone size-full wp-image-1143" /></p>
<hr />
<p>&#8230; useOwnContainer should (and does) work the same as adding ViewportLayers:</p>
<pre class="brush: as3; title: ; notranslate">cube.useOwnContainer = true; // before line 50</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube2.png" alt="" title="cube2" width="400" height="400" class="alignnone size-full wp-image-1143" /></p>
<hr />
<p>&#8230; finally, layering + sortMode seems to work fine, and fast <img src='http://blog.yoz.sk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<pre class="brush: as3; title: ; notranslate">import org.papervision3d.view.layer.util.ViewportLayerSortMode;
...
viewport.containerSprite.sortMode = ViewportLayerSortMode.ORIGIN_SORT; // before line 28
...
cube.useOwnContainer = true; // before line 50</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube3.png" alt="" title="cube3" width="400" height="400" class="alignnone size-full wp-image-1145" /></p>
<hr />
<p>update Mar 5, 2010: &#8230; another successful attempt:</p>
<pre class="brush: as3; title: ; notranslate">cube.meshSort = DisplayObject3D.MESH_SORT_FAR; // before line 50</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube3.png" alt="" title="cube3" width="400" height="400" class="alignnone size-full wp-image-1145" /></p>
<hr />
<p>&#8230; ultimate method for correct z-sorting and rendering is in using slower <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/render/QuadrantRenderEngine.html">QuadrantRenderEngine</a> <img src='http://blog.yoz.sk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<pre class="brush: as3; title: ; notranslate">import org.papervision3d.render.QuadrantRenderEngine;
...
private var renderer:QuadrantRenderEngine //replace line 19
        = new QuadrantRenderEngine(QuadrantRenderEngine.CORRECT_Z_FILTER);</pre>
<p><img src="http://blog.yoz.sk/wp-content/uploads/cube3.png" alt="" title="cube3" width="400" height="400" class="alignnone size-full wp-image-1145" /></p>
<hr />
<p>Where to go from where:</p>
<ul>
<li><a href="http://papervision2.com/fix-z-sorting-issues-using-viewport-layers/">Fix Z-Sorting Issues Using Viewport Layers</a></li>
<li><a href="http://papervision2.com/fixing-z-sorting-issues-with-the-quadrantrenderengine/">Fix Z-Sorting issues with the QuadrantRenderEngine</a></li>
<li><a href="http://blog.zupko.info/?p=170">Papervision3D now featuring frustum clipping</a></li>
<li><a href="http://blog.zupko.info/?p=177">Using QuadTrees in Papervision3D</a></li>
<li><a href="http://forum.papervision3d.org/viewtopic.php?f=14&#038;t=1414&#038;start=0">More z-sorting problems</a></li>
<li><a href="http://n4.nabble.com/Using-layers-for-z-sorting-td781405.html#a781405">Forcing depths (forceDepth, screenDepth)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.yoz.sk/2010/03/fixing-z-sorting-in-papervision-3d/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

