<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Which face are we looking at?</title>
		<link>http://www.allegro.cc/forums/view/589328</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 30 Dec 2006 07:49:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using a modified version of the allegro 3d example (the bouncing cubes), to spin a single cube around, dependant upon player input. </p><p>I&#39;m running into problems when trying to figure out what face of the cube I&#39;m currently looking at. Obviously, I need to do some kind of depth sorting, which I attempted with get_look_face(), but I&#39;m obviously a long way off. I assumed that the sort would return the closest face first.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>QUAD faces<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>  </td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>   <span class="k2">{</span> points, <span class="n">0</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">1</span> <span class="k2">}</span>,</td></tr><tr><td class="number">4</td><td>   <span class="k2">{</span> points, <span class="n">1</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">6</span>, <span class="n">7</span> <span class="k2">}</span>,</td></tr><tr><td class="number">5</td><td>   <span class="k2">{</span> points, <span class="n">2</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">5</span>, <span class="n">4</span> <span class="k2">}</span>,</td></tr><tr><td class="number">6</td><td>   <span class="k2">{</span> points, <span class="n">3</span>, <span class="n">2</span>, <span class="n">3</span>, <span class="n">7</span>, <span class="n">6</span> <span class="k2">}</span>,</td></tr><tr><td class="number">7</td><td>   <span class="k2">{</span> points, <span class="n">4</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">7</span>, <span class="n">3</span> <span class="k2">}</span>,</td></tr><tr><td class="number">8</td><td>   <span class="k2">{</span> points, <span class="n">5</span>, <span class="n">1</span>, <span class="n">2</span>, <span class="n">6</span>, <span class="n">5</span> <span class="k2">}</span></td></tr><tr><td class="number">9</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="k1">void</span> draw_shapes<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<span class="k2">)</span></td></tr><tr><td class="number">12</td><td><span class="k2">{</span></td></tr><tr><td class="number">13</td><td>     </td></tr><tr><td class="number">14</td><td>   <span class="k1">int</span> c<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   VTX <span class="k3">*</span>v1, <span class="k3">*</span>v2, <span class="k3">*</span>v3, <span class="k3">*</span>v4<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>   <span class="k1">for</span> <span class="k2">(</span>c<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> NUM_FACES<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>      v1 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v1<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>      v2 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v2<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>      v3 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v3<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>      v4 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v4<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>    draw_quad<span class="k2">(</span>b, v1, v2, v3, v4, <a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a>, face-&gt;id<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>      face<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>      </td></tr><tr><td class="number">31</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>   </td></tr><tr><td class="number">33</td><td><span class="k2">}</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">int</span> get_look_face<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td><span class="k2">{</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>   <span class="k1">return</span> face-&gt;id<span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    </td></tr><tr><td class="number">44</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Sat, 30 Dec 2006 00:20:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For normal depth sorting you want the furthest face first, not the closest face.  <br />You don&#39;t show the code for quad_cmp.  <br />I don&#39;t know what the point of get_look_face is... I don&#39;t see it get called by anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (orz)</author>
		<pubDate>Sat, 30 Dec 2006 00:33:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">typedef</span> <span class="k1">struct</span> QUAD              </td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>   VTX <span class="k3">*</span>vtxlist<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> id<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>   <span class="k1">int</span> v1, v2, v3, v4<span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k2">}</span> QUAD<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">typedef</span> <span class="k1">struct</span> SHAPE</td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y, z<span class="k2">;</span>                </td></tr><tr><td class="number">11</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> rx, ry, rz<span class="k2">;</span>        </td></tr><tr><td class="number">12</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> dz<span class="k2">;</span>                   </td></tr><tr><td class="number">13</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> drx, dry, drz<span class="k2">;</span>   </td></tr><tr><td class="number">14</td><td><span class="k2">}</span> SHAPE<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>VTX points<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>                   </td></tr><tr><td class="number">17</td><td><span class="k2">{</span></td></tr><tr><td class="number">18</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">19</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">20</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">21</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">22</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">23</td><td>   <span class="k2">{</span> <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">24</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">25</td><td>   <span class="k2">{</span>  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>, <span class="k3">-</span><span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span>,  <span class="n">32</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span> <span class="k2">}</span>,</td></tr><tr><td class="number">26</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>QUAD faces<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>  </td></tr><tr><td class="number">29</td><td><span class="k2">{</span></td></tr><tr><td class="number">30</td><td>   <span class="k2">{</span> points, <span class="n">0</span>, <span class="n">0</span>, <span class="n">3</span>, <span class="n">2</span>, <span class="n">1</span> <span class="k2">}</span>,</td></tr><tr><td class="number">31</td><td>   <span class="k2">{</span> points, <span class="n">1</span>, <span class="n">4</span>, <span class="n">5</span>, <span class="n">6</span>, <span class="n">7</span> <span class="k2">}</span>,</td></tr><tr><td class="number">32</td><td>   <span class="k2">{</span> points, <span class="n">2</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">5</span>, <span class="n">4</span> <span class="k2">}</span>,</td></tr><tr><td class="number">33</td><td>   <span class="k2">{</span> points, <span class="n">3</span>, <span class="n">2</span>, <span class="n">3</span>, <span class="n">7</span>, <span class="n">6</span> <span class="k2">}</span>,</td></tr><tr><td class="number">34</td><td>   <span class="k2">{</span> points, <span class="n">4</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">7</span>, <span class="n">3</span> <span class="k2">}</span>,</td></tr><tr><td class="number">35</td><td>   <span class="k2">{</span> points, <span class="n">5</span>, <span class="n">1</span>, <span class="n">2</span>, <span class="n">6</span>, <span class="n">5</span> <span class="k2">}</span></td></tr><tr><td class="number">36</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>SHAPE nav_cube<span class="k2">;</span> </td></tr><tr><td class="number">39</td><td>VTX output_points<span class="k2">[</span>NUM_VERTICES<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>QUAD output_faces<span class="k2">[</span>NUM_FACES<span class="k2">]</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> quad_cmp<span class="k2">(</span><span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e1, <span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e2<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    </td></tr><tr><td class="number">4</td><td>   QUAD <span class="k3">*</span>q1 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e1<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>   QUAD <span class="k3">*</span>q2 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e2<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d1 <span class="k3">=</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">8</td><td>        q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d2 <span class="k3">=</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">11</td><td>        q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>   <span class="k1">return</span> d2 <span class="k3">-</span> d1<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>   </td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

get_look_face just returns the id of the first face returned from the qsort. id is a bitmap offset.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Sat, 30 Dec 2006 00:35:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I think your sort puts the furthest face first.  Which is good, because that&#39;s what your rendering needs to look correct.  So your get_look_face() returns the face that&#39;s farthest away.  Perhaps you want it to return the last face out of the sort instead of the first?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (orz)</author>
		<pubDate>Sat, 30 Dec 2006 00:51:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s the method I used before posting, but I seem to have gotten my logic mixed up! D&#39;Oh! That seems to have solved the problem! Thanks!</p><p>My next question is: what&#39;s the easiest way to ensure that all faces of the cube render their bitmaps the right way up? That may sound strange. Imagine if I have text one side of a cube, and then have text on the face behind it. If I then rotate it, allowing the text on the other side to come into view, it&#39;s upside down.</p><p>How can I sort that out?</p><p>EDIT: Here&#39;s an ugly diagram:</p><p>http://www.perforated-art.com/uglyexample.JPG
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Sat, 30 Dec 2006 01:18:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Isn&#39;t that just a matter of texturing the faces in the proper &quot;direction&quot;? Clockwise/Counter clockwise? I forget. I guess it depends on how you actually construct each face. Do you create the vertices where they belong on the final result cube, or do you create six faces in the same spot and then rotate/translate them into place?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ultio)</author>
		<pubDate>Sat, 30 Dec 2006 01:36:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is the 3d code in full. As far as I can tell, the cube is created, and then the shape translated into position:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> translate_shapes<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>     </td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> c, d<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>   <a href="http://www.allegro.cc/manual/MATRIX" target="_blank"><span class="a">MATRIX</span></a> matrix<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>   VTX <span class="k3">*</span>outpoint <span class="k3">=</span> output_points<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>   QUAD <span class="k3">*</span>outface <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>   <a href="http://www.allegro.cc/manual/get_transformation_matrix" target="_blank"><span class="a">get_transformation_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span>, nav_cube.rx, nav_cube.ry, nav_cube.rz, nav_cube.x, nav_cube.y, nav_cube.z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>   <span class="k1">for</span> <span class="k2">(</span>d <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> d <span class="k3">&lt;</span> NUM_VERTICES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>     <a href="http://www.allegro.cc/manual/apply_matrix" target="_blank"><span class="a">apply_matrix</span></a><span class="k2">(</span><span class="k3">&amp;</span>matrix, points<span class="k2">[</span>d<span class="k2">]</span>.x, points<span class="k2">[</span>d<span class="k2">]</span>.y, points<span class="k2">[</span>d<span class="k2">]</span>.z,</td></tr><tr><td class="number">13</td><td>                    <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.z<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>     <a href="http://www.allegro.cc/manual/persp_project" target="_blank"><span class="a">persp_project</span></a><span class="k2">(</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, outpoint<span class="k2">[</span>d<span class="k2">]</span>.y, outpoint<span class="k2">[</span>d<span class="k2">]</span>.z,</td></tr><tr><td class="number">15</td><td>                  <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.x, <span class="k3">&amp;</span>outpoint<span class="k2">[</span>d<span class="k2">]</span>.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>   <span class="k1">for</span> <span class="k2">(</span>d<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> d<span class="k3">&lt;</span>NUM_FACES<span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">19</td><td>     outface<span class="k2">[</span>d<span class="k2">]</span> <span class="k3">=</span> faces<span class="k2">[</span>d<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>     outface<span class="k2">[</span>d<span class="k2">]</span>.vtxlist <span class="k3">=</span> outpoint<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>   outpoint <span class="k3">+</span><span class="k3">=</span> NUM_VERTICES<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   outface <span class="k3">+</span><span class="k3">=</span> NUM_FACES<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td><span class="k1">void</span> draw_quad<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b, VTX <span class="k3">*</span>v1, VTX <span class="k3">*</span>v2, VTX <span class="k3">*</span>v3, VTX <span class="k3">*</span>v4, <span class="k1">int</span> mode, <span class="k1">int</span> face<span class="k2">)</span></td></tr><tr><td class="number">29</td><td><span class="k2">{</span></td></tr><tr><td class="number">30</td><td>     </td></tr><tr><td class="number">31</td><td>   <span class="k1">int</span> col<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>   <span class="c">/* four vertices */</span></td></tr><tr><td class="number">34</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx1 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx2 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span>,      <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx3 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>   <a href="http://www.allegro.cc/manual/V3D" target="_blank"><span class="a">V3D</span></a> vtx4 <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>,      <span class="n">32</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="n">16</span>, <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>   vtx1.x <span class="k3">=</span> v1-&gt;x<span class="k2">;</span>   vtx1.y <span class="k3">=</span> v1-&gt;y<span class="k2">;</span>   vtx1.z <span class="k3">=</span> v1-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>   vtx2.x <span class="k3">=</span> v2-&gt;x<span class="k2">;</span>   vtx2.y <span class="k3">=</span> v2-&gt;y<span class="k2">;</span>   vtx2.z <span class="k3">=</span> v2-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>   vtx3.x <span class="k3">=</span> v3-&gt;x<span class="k2">;</span>   vtx3.y <span class="k3">=</span> v3-&gt;y<span class="k2">;</span>   vtx3.z <span class="k3">=</span> v3-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">42</td><td>   vtx4.x <span class="k3">=</span> v4-&gt;x<span class="k2">;</span>   vtx4.y <span class="k3">=</span> v4-&gt;y<span class="k2">;</span>   vtx4.z <span class="k3">=</span> v4-&gt;z<span class="k2">;</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>   vtx1.c <span class="k3">=</span> MID<span class="k2">(</span><span class="n">0</span>, <span class="n">255</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>v1-&gt;z<span class="k2">)</span> <span class="k3">/</span> <span class="n">4</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>   vtx2.c <span class="k3">=</span> MID<span class="k2">(</span><span class="n">0</span>, <span class="n">255</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>v2-&gt;z<span class="k2">)</span> <span class="k3">/</span> <span class="n">4</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>   vtx3.c <span class="k3">=</span> MID<span class="k2">(</span><span class="n">0</span>, <span class="n">255</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>v3-&gt;z<span class="k2">)</span> <span class="k3">/</span> <span class="n">4</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>   vtx4.c <span class="k3">=</span> MID<span class="k2">(</span><span class="n">0</span>, <span class="n">255</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>v4-&gt;z<span class="k2">)</span> <span class="k3">/</span> <span class="n">4</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>   <a href="http://www.allegro.cc/manual/quad3d" target="_blank"><span class="a">quad3d</span></a><span class="k2">(</span>b, mode, nav_texture<span class="k2">[</span>face<span class="k2">]</span>, <span class="k3">&amp;</span>vtx1, <span class="k3">&amp;</span>vtx2, <span class="k3">&amp;</span>vtx3, <span class="k3">&amp;</span>vtx4<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>   </td></tr><tr><td class="number">51</td><td><span class="k2">}</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="k1">int</span> quad_cmp<span class="k2">(</span><span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e1, <span class="k1">const</span> <span class="k1">void</span> <span class="k3">*</span>e2<span class="k2">)</span></td></tr><tr><td class="number">54</td><td><span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    </td></tr><tr><td class="number">56</td><td>   QUAD <span class="k3">*</span>q1 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e1<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>   QUAD <span class="k3">*</span>q2 <span class="k3">=</span> <span class="k2">(</span>QUAD <span class="k3">*</span><span class="k2">)</span>e2<span class="k2">;</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d1 <span class="k3">=</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">60</td><td>        q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q1-&gt;vtxlist<span class="k2">[</span>q1-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>&#160;</td></tr><tr><td class="number">62</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> d2 <span class="k3">=</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v1<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v2<span class="k2">]</span>.z <span class="k3">+</span></td></tr><tr><td class="number">63</td><td>        q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v3<span class="k2">]</span>.z <span class="k3">+</span> q2-&gt;vtxlist<span class="k2">[</span>q2-&gt;v4<span class="k2">]</span>.z<span class="k2">;</span></td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td>   <span class="k1">return</span> d2 <span class="k3">-</span> d1<span class="k2">;</span></td></tr><tr><td class="number">66</td><td>   </td></tr><tr><td class="number">67</td><td><span class="k2">}</span></td></tr><tr><td class="number">68</td><td>&#160;</td></tr><tr><td class="number">69</td><td><span class="k1">void</span> draw_shapes<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>b<span class="k2">)</span></td></tr><tr><td class="number">70</td><td><span class="k2">{</span></td></tr><tr><td class="number">71</td><td>     </td></tr><tr><td class="number">72</td><td>   <span class="k1">int</span> c<span class="k2">;</span></td></tr><tr><td class="number">73</td><td>   QUAD <span class="k3">*</span>face <span class="k3">=</span> output_faces<span class="k2">;</span></td></tr><tr><td class="number">74</td><td>   VTX <span class="k3">*</span>v1, <span class="k3">*</span>v2, <span class="k3">*</span>v3, <span class="k3">*</span>v4<span class="k2">;</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_635.html" target="_blank">qsort</a><span class="k2">(</span>output_faces, NUM_FACES, <span class="k1">sizeof</span><span class="k2">(</span>QUAD<span class="k2">)</span>, quad_cmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td>   <span class="k1">for</span> <span class="k2">(</span>c<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> NUM_FACES<span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">79</td><td>&#160;</td></tr><tr><td class="number">80</td><td>      v1 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v1<span class="k2">;</span></td></tr><tr><td class="number">81</td><td>      v2 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v2<span class="k2">;</span></td></tr><tr><td class="number">82</td><td>      v3 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v3<span class="k2">;</span></td></tr><tr><td class="number">83</td><td>      v4 <span class="k3">=</span> face-&gt;vtxlist <span class="k3">+</span> face-&gt;v4<span class="k2">;</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>    draw_quad<span class="k2">(</span>b, v1, v2, v3, v4, <a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a>, face-&gt;id<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>&#160;</td></tr><tr><td class="number">87</td><td>      face<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>      </td></tr><tr><td class="number">89</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">90</td><td>   </td></tr><tr><td class="number">91</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ngiacomelli)</author>
		<pubDate>Sat, 30 Dec 2006 05:08:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sounds like you&#39;ve confused depth sorting with back face culling; you&#39;re drawing all of your poly&#39;s wether they face the camera or not.  Depth sorting is only good for convex models like cubes, otherwise you get &#39;z fighting&#39;; I found this out in my tank game some of you may (or may not) remember.  To do backface culling dot the face normal with the camera; greater than zero is faceing, less than zero is facing away.</p><p>For your texturing problem, you have to rotate and translate your texture coordinates along with the spatial coordinates.  I don&#39;t see you doing that.</p><p>Allegro 3d is gross.  Use opengl or write your own software renderer.  If you write your own you will fully understand how un-useful allegro 3d is.</p><p>Edit; you should be using <a href="http://www.allegro.cc/manual/api/structures-and-types-defined-by-allegro/v3d">V3d</a> for your verts, it has u,v texture coordinates, I don&#39;t see any texture coordinates in the code you posted.</p><p>One can only guess where quad3d is getting this information from...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nonnus29)</author>
		<pubDate>Sat, 30 Dec 2006 07:49:53 +0000</pubDate>
	</item>
</rss>
