<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>3D with Allegro 5</title>
		<link>http://www.allegro.cc/forums/view/615276</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 23 Apr 2015 12:05:04 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi all, I&#39;ve been given an assignment to find the shortest path on a graph of 3D vertices using Djikstra&#39;s algorithm or similar. That&#39;s not the part I want help with - I want to draw a 3D model of the graph with lines on the edges and dots on the vertices. I have the graph info in a file and I will read it in and have the vertex data available to pass to Allegro. Question - what do I use and where do I start? I&#39;m totally new to 3D graphics and don&#39;t know yet the basics of how to get a 3D image on screen with Allegro 5. I can use <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> with <span class="source-code">ALLEGRO_PRIM_POINT_LIST</span> and <span class="source-code">ALLEGRO_PRIM_LINE_LIST</span> but how do I set up the 3D perspective to draw it with?</p><p>Let&#39;s assume the world is centered on 0.0,0.0,0.0 and we&#39;re looking at it from a given distance away in any direction. We have an angle on the xy plane and an angle on the yz plane. How do I turn those into the proper perspective and use it with Allegro 5. How do I turn that into something I can use with <span class="source-code">al_perspective_transform</span>? And what are left,top,n(ear),right,bottom, and f(ar)? After I figure out that part it&#39;s just a matter of translation and rotation I would think, right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 11 Apr 2015 03:53:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Elias recently added an <span class="source-code">ex_camera</span> example (adapted from Allegro 4) that you could look at. There&#39;s a reasonable discussion about the perspective transform parameters <a href="http://www.songho.ca/opengl/gl_projectionmatrix.html">here</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 11 Apr 2015 06:26:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I&#39;m starting to understand what stuff means, but how do I get the values for r,l,t,b,n, and f from a 3D angle? Do I have to calculate the pyramidal frustum myself?</p><div class="quote_container"><div class="title"><a href="http://www.songho.ca/opengl/gl_projectionmatrix.html">Quote</a>:</div><div class="quote"><p>
Finally, we found all entries of GL_PROJECTION matrix. The complete projection matrix is;<br /><img class="math" src="http://www.allegro.cc/images/tex/b/9/b9991f0d8c0d39dc8da092a691e87172-150.png" alt="&lt;math&gt;\begin{matrix}
\frac{2n}{r-l} &amp;&amp; 0 &amp;&amp; \frac{r+l}{r-l} &amp;&amp; 0 \\
0 &amp;&amp; \frac{2n}{t-b} &amp;&amp; \frac{t+b}{t-b} &amp;&amp; 0 \\
0 &amp;&amp; 0 &amp;&amp; \frac{-(f+n)}{f-n} &amp;&amp; \frac{-2fn}{f-n} \\
0 &amp;&amp; 0 &amp;&amp; 1 &amp;&amp; 0
\end{matrix}&lt;/math&gt;" />
</p></div></div><p>

<span class="remote-thumbnail"><span class="json">{"name":"gl_projectionmatrix01.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/1\/81ee78b0ef2b14c60ec8ba79bf2fff86.png","w":470,"h":230,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/1\/81ee78b0ef2b14c60ec8ba79bf2fff86"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/1/81ee78b0ef2b14c60ec8ba79bf2fff86-240.jpg" alt="gl_projectionmatrix01.png" width="240" height="117" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 12 Apr 2015 01:32:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Those have nothing to do with the orientation where you are looking at. Your actual code would look something like this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>t, ...<span class="k2">)</span><span class="k2">;</span>
al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>

al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>t, <span class="c">/* this is where your angles will come in */</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 12 Apr 2015 10:12:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615276/1012100#target">SiegeLord</a> said:</div><div class="quote"><p>
Those have nothing to do with the orientation where you are looking at. Your actual code would look something like this:
</p></div></div><p>
Oh! Okay! So what do near and far have to do with it then? Dont&#39; they sort of determine the distance from the camera to the clipping planes?</p><p>And why are there two transformations in use now? I dont&#39; get the differnce between <span class="source-code">al_use_projection_transform</span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a></span>.</p><p>In your code example you don&#39;t call <span class="source-code"><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a></span> on the transform before calling <span class="source-code">al_build_camera_transform</span> and after using <span class="source-code">al_use_projection_transform</span>. Is that on purpose?</p><p>Edit<br />l,r,t, and b are all determined by the horizontal and vertical field of view, correct? Ie - the interior angles of the frustum, right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 12 Apr 2015 10:57:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615276/1012103#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>And why are there two transformations in use now?</p></div></div><p>

They are applied one after the other. But the projection transform depends on the screen size so there&#39;s good reasons to keep them separate.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>In your code example you don&#39;t call al_identity_transform on the transform before calling al_build_camera_transform and after using al_use_projection_transform. Is that on purpose?</p></div></div><p>
al_perspective_transform modifies the transform you pass, al_build_camera_transform overwrites it, so in one case you need to initialize first in the other not.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>l,r,t, and b are all determined by the horizontal and vertical field of view, correct? Ie - the interior angles of the frustum, right?</p></div></div><p>
Yes. Or rather, the quotient of the near plane to those four decides the horizontal/vertical field of view. So you can first choose your clipping distance and then set those four according to your fov. (Or the other way around, both ways work.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sun, 12 Apr 2015 17:25:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do I need to position my camera farther away because of the near clipping plane? What if the z value of near was like 10 or 100? Do I need to move my camera back by that same amount to bring objects on the near clipping plane into view?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 13 Apr 2015 03:09:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, anything behind (closer to the camera than) the near clipping plane will not be visible.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 13 Apr 2015 14:17:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, so I don&#39;t get yet how the perspective transform is supposed to be composed. Am I supposed to set l,r,t,b,n,and f as if I was looking directly down the negative z axis in the left hand side of the graphic I posted above? Ie - what would happen if l and r and t and b aren&#39;t symettric? What if they don&#39;t equal their negated counterpart? Does that skew the perspective or what does it do? I suppose I should just play around with it a bit but I like to ask questions. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>Also, I was discussing on IRC earlier about whether I should render 3D points and lines as 3D spheres or cubes and rectangular prisms or right cylinders. Is there a good way to go about triangulating those 3D shapes if it turns out that the points and lines dont&#39; look right with al_draw_prim? I mean, how does allegro decide how thick to draw a 2D line in 3D space? Or a 1D point in 3D space?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 18 Apr 2015 07:25:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey Edgar, post screenshots of your progres?  I&#39;m interested to see how it all comes together for you <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 18 Apr 2015 09:15:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, definitely. I should have a prototype ready relatively soon.</p><p>I have to do some reading on the <a href="http://en.wikipedia.org/wiki/Spherical_coordinate_system">Spherical Coordinate System</a> and the <a href="http://en.wikipedia.org/wiki/Cylindrical_coordinate_system">Cylindrical Coordinate System</a> first though. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> There&#39;s a nice set of conversion functions on each page.</p><p>Edit - need to get a pesky up vector for the camera transform!
</p><div class="quote_container"><div class="title"><a href="http://stackoverflow.com/questions/3427379/effective-way-to-calculate-the-up-vector-for-glulookat-which-points-up-the-y-axi">Stackoverflow</a> said:</div><div class="quote"><p>


Most commercial games use the cross product to generate a perpendicular.</p><p>    Normalize your look vector.</p><p>    Take the cross product of your look vector and a vector of 0,1,0. This gives you your right vector.</p><p>    Take the cross product of your right vector and your look vector. This is your new up vector, which is a perpendicular to your original look vector.
</p></div></div><p>

Edit2<br />Just gonna use 0,1,0 for the up vector for now until I have a proper vector class.</p><p>Here are the initial results (expand to see the actual images, the graph I&#39;m supposed to find the shortest path with is on the right <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />) :<br />Blue is a from edge blending to green is a to edge with red dots for the actual vertices. It looks like there is some kind of method to the madness on the right!<br /><span class="remote-thumbnail"><span class="json">{"name":"609382","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/6\/c6ccea15f1e464abc5b21c75b3bfdd7b.png","w":606,"h":625,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/6\/c6ccea15f1e464abc5b21c75b3bfdd7b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/6/c6ccea15f1e464abc5b21c75b3bfdd7b-240.jpg" alt="609382" width="240" height="247" /></span> <span class="remote-thumbnail"><span class="json">{"name":"609384","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/d\/1db2c8241cc52ed110803896c275d303.png","w":606,"h":625,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/d\/1db2c8241cc52ed110803896c275d303"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/1/d/1db2c8241cc52ed110803896c275d303-240.jpg" alt="609384" width="240" height="247" /></span></p><p>Produced with :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span><span class="k1">void</span> Visualizer::CalculateGraphCenter<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">   3</span>   gcx <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">   4</span>   gcy <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">   5</span>   gcz <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span>   <span class="k1">if</span> <span class="k2">(</span>nallegro_vertices <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">   8</span>   
<span class="number">   9</span>   <span class="k1">double</span> ax <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  10</span>   <span class="k1">double</span> ay <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span>   <span class="k1">double</span> az <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  12</span>   <span class="k1">for</span> <span class="k2">(</span>SIZE_T i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> nallegro_vertices <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  13</span>      ax <span class="k3">+</span><span class="k3">=</span> allegro_vertices<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k2">;</span>
<span class="number">  14</span>      ay <span class="k3">+</span><span class="k3">=</span> allegro_vertices<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k2">;</span>
<span class="number">  15</span>      az <span class="k3">+</span><span class="k3">=</span> allegro_vertices<span class="k2">[</span>i<span class="k2">]</span>.z<span class="k2">;</span>
<span class="number">  16</span>   <span class="k2">}</span>
<span class="number">  17</span>   
<span class="number">  18</span>   gcx <span class="k3">=</span> ax<span class="k3">/</span>nallegro_vertices<span class="k2">;</span>
<span class="number">  19</span>   gcy <span class="k3">=</span> ay<span class="k3">/</span>nallegro_vertices<span class="k2">;</span>
<span class="number">  20</span>   gcz <span class="k3">=</span> az<span class="k3">/</span>nallegro_vertices<span class="k2">;</span>
<span class="number">  21</span>   
<span class="number">  22</span><span class="k2">}</span>
<span class="number">  23</span>
<span class="number">  24</span>
<span class="number">  25</span>
<span class="number">  26</span><span class="k1">void</span> Visualizer::CalculateUniverseRadius<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  27</span>   urad <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  28</span>   <span class="k1">for</span> <span class="k2">(</span>SIZE_T i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> graph.VSize<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  29</span>      <span class="k1">const</span> Vertex<span class="k3">*</span> v <span class="k3">=</span> <span class="k3">&amp;</span>graph.Vertices<span class="k2">(</span><span class="k2">)</span><span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number">  30</span>      <span class="k1">double</span> dx <span class="k3">=</span> v-&gt;vx <span class="k3">-</span> gcx<span class="k2">;</span>
<span class="number">  31</span>      <span class="k1">double</span> dy <span class="k3">=</span> v-&gt;vy <span class="k3">-</span> gcx<span class="k2">;</span>
<span class="number">  32</span>      <span class="k1">double</span> dz <span class="k3">=</span> v-&gt;vz <span class="k3">-</span> gcx<span class="k2">;</span>
<span class="number">  33</span>      <span class="k1">double</span> vrad <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>dx<span class="k3">*</span>dx <span class="k3">+</span> dy<span class="k3">*</span>dy <span class="k3">+</span> dz<span class="k3">*</span>dz<span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>      <span class="k1">if</span> <span class="k2">(</span>vrad <span class="k3">&gt;</span> urad<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  35</span>         urad <span class="k3">=</span> vrad<span class="k2">;</span>
<span class="number">  36</span>      <span class="k2">}</span>
<span class="number">  37</span>   <span class="k2">}</span>
<span class="number">  38</span><span class="k2">}</span>
<span class="number">  39</span>
<span class="number">  40</span>
<span class="number">  41</span>
<span class="number">  42</span><span class="k1">void</span> Visualizer::ResetCamera<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  43</span>   
<span class="number">  44</span>   
<span class="number">  45</span>   
<span class="number">  46</span>   
<span class="number">  47</span><span class="c">///   cos(azimuth_angle_phi);</span>
<span class="number">  48</span>   
<span class="number">  49</span>   cam_x <span class="k3">=</span> gcx <span class="k3">+</span> transx<span class="k2">;</span>
<span class="number">  50</span>   cam_y <span class="k3">=</span> gcy <span class="k3">+</span> transy <span class="k3">+</span> <span class="n">2</span>.<span class="n">5</span><span class="k2">;</span>
<span class="number">  51</span><span class="c">///   cam_sled_z = -3.0*urad;</span>
<span class="number">  52</span>   cam_sled_z <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span>.<span class="n">0</span><span class="k3">*</span>urad<span class="k2">;</span>
<span class="number">  53</span>   cam_z <span class="k3">=</span> gcz <span class="k3">+</span> transz <span class="k3">+</span> cam_sled_z<span class="k2">;</span>
<span class="number">  54</span>   cam_zenith_theta <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  55</span>   cam_azimuth_phi <span class="k3">=</span> M_PI<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span><span class="c">//   cam_view_vector_x = 0.0;</span>
<span class="number">  57</span><span class="c">//   cam_view_vector_y = 0.0;</span>
<span class="number">  58</span><span class="c">//   cam_view_vector_z = 0.0;</span>
<span class="number">  59</span>   
<span class="number">  60</span><span class="k2">}</span>
<span class="number">  61</span>
<span class="number">  62</span>
<span class="number">  63</span>
<span class="number">  64</span><span class="k1">void</span> Visualizer::InputLoop<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  65</span>   
<span class="number">  66</span>   
<span class="number">  67</span>   
<span class="number">  68</span>   <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  69</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  70</span>   
<span class="number">  71</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>      <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  73</span>         <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  74</span>         <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>         
<span class="number">  76</span>         <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  77</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  78</span>         <span class="k2">}</span>
<span class="number">  79</span>         <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  80</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  81</span>            <span class="k1">int</span> k <span class="k3">=</span> ev.keyboard.keycode<span class="k2">;</span>
<span class="number">  82</span>            <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  83</span>               quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  84</span>            <span class="k2">}</span>
<span class="number">  85</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_LEFT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  86</span>               transx <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  87</span>            <span class="k2">}</span>
<span class="number">  88</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_RIGHT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  89</span>               transx <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  90</span>            <span class="k2">}</span>
<span class="number">  91</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  92</span>               transy <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  93</span>            <span class="k2">}</span>
<span class="number">  94</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  95</span>               transy <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  96</span>            <span class="k2">}</span>
<span class="number">  97</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_A<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  98</span>               transz <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  99</span>            <span class="k2">}</span>
<span class="number"> 100</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>k <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_Z<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 101</span>               transz <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 102</span>            <span class="k2">}</span>
<span class="number"> 103</span>            ResetCamera<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>         <span class="k2">}</span>
<span class="number"> 105</span>         
<span class="number"> 106</span>      <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>   
<span class="number"> 108</span>      <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>         redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 110</span>         
<span class="number"> 111</span>         <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>         
<span class="number"> 113</span>         Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>         
<span class="number"> 115</span>         <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>      <span class="k2">}</span>
<span class="number"> 117</span>   <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 118</span>   
<span class="number"> 119</span><span class="k2">}</span>
<span class="number"> 120</span>
<span class="number"> 121</span>
<span class="number"> 122</span>
<span class="number"> 123</span>
<span class="number"> 124</span><span class="k1">void</span> Visualizer::SetupView<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 125</span>   <span class="c">// set up projection</span>
<span class="number"> 126</span>   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>   <span class="c">//ltnrbf</span>
<span class="number"> 128</span><span class="c">///   al_perspective_transform(&amp;proj_transform , -urad/2.0 , urad/2.0 , urad , urad/2.0 , -urad/2.0 , urad*3.0);</span>
<span class="number"> 129</span>   <span class="k1">double</span> rad <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 130</span>   al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform , <span class="k3">-</span>rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , rad , rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , <span class="k3">-</span>rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , urad<span class="k3">*</span><span class="n">15</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>   al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>   
<span class="number"> 133</span><span class="c">///void al_build_camera_transform(ALLEGRO_TRANSFORM *trans,</span>
<span class="number"> 134</span><span class="c">///   float position_x, float position_y, float position_z,</span>
<span class="number"> 135</span><span class="c">///   float look_x, float look_y, float look_z,</span>
<span class="number"> 136</span><span class="c">///   float up_x, float up_y, float up_z)      </span>
<span class="number"> 137</span>   al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>cam_transform , cam_x , cam_y , cam_z , gcx , gcy , gcz , <span class="n">0</span>.<span class="n">0</span> , <span class="n">1</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>   <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>cam_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>   
<span class="number"> 140</span>   
<span class="number"> 141</span><span class="k2">}</span>
<span class="number"> 142</span>
<span class="number"> 143</span>
<span class="number"> 144</span>
<span class="number"> 145</span><span class="k1">void</span> Visualizer::Draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 146</span>   
<span class="number"> 147</span>   SetupView<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>   
<span class="number"> 149</span><span class="c">///int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl, ALLEGRO_BITMAP* texture, int start, int end, int type)      </span>
<span class="number"> 150</span>   <span class="c">// draw edges vertices and then the vertices</span>
<span class="number"> 151</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_edges<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 152</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Drawing allegro edges\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span><span class="c">//      al_draw_prim(allegro_edges , 0 , 0 , 0 , (nallegro_edges - 1)*2/3 , ALLEGRO_PRIM_TRIANGLE_FAN);</span>
<span class="number"> 154</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_edges , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_edges , ALLEGRO_PRIM_LINE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>   <span class="k2">}</span>
<span class="number"> 156</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_vertices<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 157</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Drawing allegro vertices\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_vertices , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_vertices , ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span><span class="c">//      al_draw_prim(allegro_vertices , 0 , 0 , 0 , nallegro_vertices , ALLEGRO_PRIM_POINT_LIST);</span>
<span class="number"> 160</span>   <span class="k2">}</span>
<span class="number"> 161</span>   <span class="c">/// Draw shortest path</span>
<span class="number"> 162</span>   
<span class="number"> 163</span><span class="k2">}</span>
</div></div><p>

This is a total hack for now, as I only check for key presses and I&#39;m not rotating around the universe center like I want to just yet. But you can move 1 unit in all the cardinal directions.</p><p>I&#39;ll share the full code once I have it more polished.</p><p>Question :<br />Is there a way for me to ignore the z-buffer for a certain set of edges? I want to show the shortest path without it being hidden by the vertices in front of it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 20 Apr 2015 01:45:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615276/1012310#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Is there a way for me to ignore the z-buffer for a certain set of edges?</p></div></div><p>
If you can draw them with a separate al_draw_prim, then yes, do this before:<br /><span class="source-code">al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 20 Apr 2015 03:27:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edit - figured out how to reset the transform. See ResetView() below.</p><p>Ok, thanks. <s>I can&#39;t seem to restore the default drawing transforms so I can draw text with al_draw_textf. Not sure how to do so</s>.</p><p>Here&#39;s what I&#39;m using :</p><p>If I uncomment the al_hold_bitmap_drawing calls things don&#39;t work right and it doesn&#39;t respect the camera, whether I have SetupView() before or imbetween them.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="k1">void</span> Visualizer::SetupView<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>   <span class="c">// set up projection</span>
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   <span class="c">//ltnrbf</span>
<span class="number">  6</span><span class="c">///   al_perspective_transform(&amp;proj_transform , -urad/2.0 , urad/2.0 , urad , urad/2.0 , -urad/2.0 , urad*3.0);</span>
<span class="number">  7</span>   <span class="k1">double</span> rad <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>   al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform , <span class="k3">-</span>rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , rad , rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , <span class="k3">-</span>rad<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span> , urad<span class="k3">*</span><span class="n">15</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>   al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   
<span class="number"> 11</span><span class="c">///void al_build_camera_transform(ALLEGRO_TRANSFORM *trans,</span>
<span class="number"> 12</span><span class="c">///   float position_x, float position_y, float position_z,</span>
<span class="number"> 13</span><span class="c">///   float look_x, float look_y, float look_z,</span>
<span class="number"> 14</span><span class="c">///   float up_x, float up_y, float up_z)      </span>
<span class="number"> 15</span>   al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>cam_transform , cam_x , cam_y , cam_z , gcx , gcy , gcz , <span class="n">0</span>.<span class="n">0</span> , <span class="n">1</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>   <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>cam_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>   
<span class="number"> 18</span>   
<span class="number"> 19</span><span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">void</span> Visualizer::ResetView<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>   
<span class="number"> 25</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>
<span class="number"> 26</span>   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>   <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>   
<span class="number"> 29</span>   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>   al_orthographic_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform , <span class="n">0</span> , <span class="n">0</span> , <span class="k3">-</span><span class="n">1</span> , <span class="n">600</span> , <span class="n">600</span> , <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>   al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span><span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span>
<span class="number"> 35</span><span class="k1">void</span> Visualizer::Draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span>   
<span class="number"> 37</span><span class="c">///int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl, ALLEGRO_BITMAP* texture, int start, int end, int type)      </span>
<span class="number"> 38</span><span class="c">//   al_hold_bitmap_drawing(true);</span>
<span class="number"> 39</span>   
<span class="number"> 40</span>   SetupView<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>   
<span class="number"> 42</span>   <span class="c">// draw edges vertices and then the vertices</span>
<span class="number"> 43</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_edges<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 44</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_edges , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_edges , ALLEGRO_PRIM_LINE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>   <span class="k2">}</span>
<span class="number"> 46</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_vertices<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_vertices , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_vertices , ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>   <span class="k2">}</span>
<span class="number"> 49</span>   
<span class="number"> 50</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_shortest_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 51</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_shortest_path , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_shortest_path , ALLEGRO_PRIM_LINE_STRIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>   <span class="k2">}</span>
<span class="number"> 53</span>   
<span class="number"> 54</span>   <span class="c">/// TODO Draw shortest path</span>
<span class="number"> 55</span>   
<span class="number"> 56</span><span class="c">//   al_hold_bitmap_drawing(false);</span>
<span class="number"> 57</span>   ResetView<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span>   <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span> , <span class="n">10</span>.<span class="n">0</span> , <span class="n">10</span>.<span class="n">0</span> , <span class="n">0</span> ,
<span class="number"> 60</span>                 <span class="s">"xyz = (%lf,%lf,%lf)"</span> , transx , transy , transz<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>   
<span class="number"> 62</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"xyz = (%lf,%lf,%lf) urad = %lf\n"</span> , transx , transy , transz , urad<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>   
<span class="number"> 64</span><span class="k2">}</span>
</div></div><p>

I made a small demo so you guys can try it out. Here it is (its a win32 binary, sorry no source yet) :<br /><a href="https://www.allegro.cc/files/attachment/609385">example1.7z</a></p><p>Keys are up down left right a and z. Esc quits the graphical part. help and quit will give you the rest of the commands.</p><p>The program processes vertexes and edges in format like this :<br />VERTEX2 0 0.0 0.0 0.0<br />VERTEX2 1 1.0 0.0 0.0<br />VERTEX2 2 0.0 1.0 0.0<br />EDGE2 0 1<br />EDGE2 1 2<br />EDGE2 0 2</p><p>The first number is simply the vertex id, it should just count up from 0. The next 3 numbers are the xyz coordinates of the vertex. The two numbers following the EDGE2 declaration are the vertex id&#39;s that the edge links to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 20 Apr 2015 08:17:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool graphics <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p>I have screenshots from the period when I crawled and scraped my way into 3D. I might dig them up later, they&#39;re quite art.  Learning 3D is a bit like being placed in a strange universe and trying to grab onto <i>something</i>, so you can reliably anchor yourself, to then try grabbing onto something else.  Eventually things start to fall into place and things get sorted out.</p><p>It was only a few months ago that I realized my entire 3D backend was completely flipped.  The only anomaly I was able to witness was that textures were reversed, and I didn&#39;t really even notice that much until later, everything else seemed to work as expected. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />  I think that&#39;s why several people reported strangely rendered polygons in A Slug&#39;s Life.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 20 Apr 2015 09:01:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Did you try the demo? <a href="https://www.allegro.cc/files/attachment/609385">https://www.allegro.cc/files/attachment/609385</a></p><p>It starts out with a double 4 sided pyramid and then shows that monster graph for the assignment with like 64000 edges. It slows down my laptop&#39;s fps a little bit when zooming in close but my desktop handled it no prob.</p><p>Features planned next :<br />1) Implement azimuth / zenith orientation. Azimuth is angle on the xy plane and zenith is declination from the positive z-axis. This requires a decent vector class.</p><p>2) Implement FACE2 faces. They should be fairly simple. Just store 3 VERTEX_ID&#39;s instead of 2 like an edge.<br />FACE2 0 1 2</p><p>3) Implement roll and yaw and pitch. This takes some more difficult trigonometry, but can all be implemented with <span class="source-code">al_rotate_transform_3d</span>.</p><p>Edit</p><p>It now shows the current shortest path and a bounding prism of the universe data.<br /><span class="remote-thumbnail"><span class="json">{"name":"609391","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/6\/e6346f3a5b635d1b40176235582531f5.png","w":606,"h":625,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/6\/e6346f3a5b635d1b40176235582531f5"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/6/e6346f3a5b635d1b40176235582531f5-240.jpg" alt="609391" width="240" height="247" /></span></p><p>Do you guys realize what you can use Djikstra&#39;s algorithm for? Not only could you solve mazes with relative ease by finding the shortest path but you could also use it for A* pathfinding in a game where you need your AI to respond to obstacles smoothly. Just don&#39;t put any vertices on the points where there are obstacles, and it will avoid them automatically finding the shortest path around. If you need your NPC&#39;s to attack monsters in range give the closer the monster the higher the attraction value, and then find the maximum path, where it fulfills the most objectives and maximizes value.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 22 Apr 2015 09:06:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since my main game project is going sluggishly I decide to make it go even more slowly by trying to make a basic &quot;3D&quot; dungeon crawler with Allegro, so examples like these are very useful. </p><p>And yes, Dijkstra&#39;s algorithm is cool when properly parametrized. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 22 Apr 2015 10:57:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can anyone explain the source of corruption in my vertice drawing? The white lines are supposed to be the edges of a bounding prism surrounding the universe, but sometimes they don&#39;t get drawn right, and they do this :<br /><span class="remote-thumbnail"><span class="json">{"name":"609392","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/5\/e5c21550024b21a4efa32829fe62f4cf.png","w":612,"h":632,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/5\/e5c21550024b21a4efa32829fe62f4cf"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/5/e5c21550024b21a4efa32829fe62f4cf-240.jpg" alt="609392" width="240" height="247" /></span></p><p>Here&#39;s the code I use to draw everything :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="k1">void</span> Visualizer::Draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>   
<span class="number">  4</span><span class="c">///int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl, ALLEGRO_BITMAP* texture, int start, int end, int type)      </span>
<span class="number">  5</span>
<span class="number">  6</span>   <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> bounding_vertices<span class="k2">[</span><span class="n">8</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  7</span>      <span class="k2">{</span>gxmin , gymin, gzmin, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// lbn</span>
<span class="number">  8</span>      <span class="k2">{</span>gxmin , gymin, gzmax, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// lbf</span>
<span class="number">  9</span>      <span class="k2">{</span>gxmin , gymax, gzmax, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// ltf</span>
<span class="number"> 10</span>      <span class="k2">{</span>gxmin , gymax, gzmin, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// ltn</span>
<span class="number"> 11</span>      <span class="k2">{</span>gxmax , gymin, gzmin, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// rbn</span>
<span class="number"> 12</span>      <span class="k2">{</span>gxmax , gymin, gzmax, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// rbf</span>
<span class="number"> 13</span>      <span class="k2">{</span>gxmax , gymax, gzmax, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span>,<span class="c">// rtf</span>
<span class="number"> 14</span>      <span class="k2">{</span>gxmax , gymax, gzmin, <span class="n">0</span>.<span class="n">0</span> , <span class="n">0</span>.<span class="n">0</span> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">}</span> <span class="c">// rtn</span>
<span class="number"> 15</span>   <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span><span class="c">//*/</span>
<span class="number"> 17</span>   <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> bounding_edge_vertices<span class="k2">[</span><span class="n">12</span><span class="k3">*</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number"> 18</span>      bounding_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> ,
<span class="number"> 19</span>      bounding_vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> ,
<span class="number"> 20</span>      bounding_vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> ,
<span class="number"> 21</span>      bounding_vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> ,
<span class="number"> 22</span>      bounding_vertices<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> ,
<span class="number"> 23</span>      bounding_vertices<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">6</span><span class="k2">]</span> ,
<span class="number"> 24</span>      bounding_vertices<span class="k2">[</span><span class="n">6</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">7</span><span class="k2">]</span> ,
<span class="number"> 25</span>      bounding_vertices<span class="k2">[</span><span class="n">7</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> ,
<span class="number"> 26</span>      bounding_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> ,
<span class="number"> 27</span>      bounding_vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> ,
<span class="number"> 28</span>      bounding_vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">6</span><span class="k2">]</span> ,
<span class="number"> 29</span>      bounding_vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> , bounding_vertices<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>
<span class="number"> 30</span>   <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 31</span>   
<span class="number"> 32</span><span class="c">//   al_hold_bitmap_drawing(true);</span>
<span class="number"> 33</span>
<span class="number"> 34</span>   SetupView<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>   
<span class="number"> 36</span>   al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>   
<span class="number"> 38</span>   <span class="c">// draw edges vertices and then the vertices</span>
<span class="number"> 39</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_edges<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 40</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_edges , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_edges , ALLEGRO_PRIM_LINE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>   <span class="k2">}</span>
<span class="number"> 42</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_vertices<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 43</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_vertices , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_vertices , ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>   <span class="k2">}</span>
<span class="number"> 45</span>   <span class="k1">if</span> <span class="k2">(</span>draw_bounds<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span><span class="c">//   if (bounding_edge_vertices) {</span>
<span class="number"> 47</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>bounding_edge_vertices , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , <span class="n">24</span> , ALLEGRO_PRIM_LINE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span><span class="c">//   }</span>
<span class="number"> 49</span>   <span class="k2">}</span>
<span class="number"> 50</span>   al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>   
<span class="number"> 51</span>   
<span class="number"> 52</span>   <span class="k1">if</span> <span class="k2">(</span>allegro_shortest_path<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 53</span><span class="c">//      printf("nallegro_shortest_path = %u\n" , nallegro_shortest_path);</span>
<span class="number"> 54</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>allegro_shortest_path , <span class="n">0</span> , <span class="n">0</span> , <span class="n">0</span> , nallegro_shortest_path , ALLEGRO_PRIM_LINE_STRIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>   <span class="k2">}</span>
<span class="number"> 56</span>   
<span class="number"> 57</span>   <span class="c">/// TODO Draw shortest path</span>
<span class="number"> 58</span>   
<span class="number"> 59</span><span class="c">//   al_hold_bitmap_drawing(false);</span>
<span class="number"> 60</span>   ResetView<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 61</span>
<span class="number"> 62</span>   <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span> , <span class="n">10</span>.<span class="n">0</span> , <span class="n">10</span>.<span class="n">0</span> , <span class="n">0</span> ,
<span class="number"> 63</span>                 <span class="s">"xyz = (%lf,%lf,%lf)"</span> , transx , transy , transz<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>   
<span class="number"> 65</span>   <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> , <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span> , <span class="n">10</span>.<span class="n">0</span> , <span class="n">570</span>.<span class="n">0</span> , <span class="n">0</span> ,
<span class="number"> 66</span>                 <span class="s">"gEsz = %u , nallegro_edges = %u, directed = %s"</span> , graph.ESize<span class="k2">(</span><span class="k2">)</span> , nallegro_edges , graph.Directed<span class="k2">(</span><span class="k2">)</span>?<span class="s">"true"</span><span class="k2">:</span><span class="s">"false"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>   
<span class="number"> 68</span>   
<span class="number"> 69</span><span class="c">//   printf("xyz = (%lf,%lf,%lf) urad = %lf\n" , transx , transy , transz , urad);</span>
<span class="number"> 70</span>   
<span class="number"> 71</span><span class="k2">}</span>
</div></div><p>

I can&#39;t explain why last night the bounding prism was drawn correctly and now it is not. It works for smaller graphs though, which I don&#39;t get.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 23 Apr 2015 11:15:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe because the Z position is now too near of the screen and part of what&#39;s drawn got eaten.</p><p>If your faces are like &#39;flashing&#39; when turning the object, it&#39;s because the point of each faces are not clockwise/counter clockwise ordered.</p><p>Edited
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 23 Apr 2015 12:05:04 +0000</pubDate>
	</item>
</rss>
