<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro 5 3D projections</title>
		<link>http://www.allegro.cc/forums/view/614194</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 30 Apr 2014 12:12:04 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Now that the newer version of allegro has 3D routines, I&#39;m trying to set things up to play around with.</p><p>I&#39;ve looked at ex_projection.c and tried to adapt what&#39;s going on there.  I&#39;m still at a block and haven&#39;t been able to find any general purpose tutorial, explanation on the wiki, or even any good discussions on the forums of the general &quot;pipeline&quot; of how a proper 3D scene could be achieved using Allegro 5.</p><p>I want to properly use vertex and index buffers, and I think I understand how they work (even though I haven&#39;t used one yet).</p><p>What do I need to set-up?  How do I need to affect my models before render?<br />How does a camera fit into this?</p><p>Here&#39;s where I&#39;m at:</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="k1">class</span> Model <span class="c">// as in a 3D Model</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>public:
<span class="number">  4</span>  std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt; vertex<span class="k2">;</span>
<span class="number">  5</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> vtx<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="c">//placement3d place;</span>
<span class="number">  7</span>
<span class="number">  8</span>  Model<span class="k2">(</span><span class="k1">int</span> size<span class="k2">)</span>
<span class="number">  9</span>  <span class="k2">{</span>
<span class="number"> 10</span>    vertex.push_back<span class="k2">(</span>build_vertex<span class="k2">(</span><span class="k3">-</span>size, <span class="k3">-</span>size, <span class="n">0</span>, color::green, <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"> 11</span>    vertex.push_back<span class="k2">(</span>build_vertex<span class="k2">(</span>size, <span class="k3">-</span>size, <span class="n">0</span>, color::green, <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"> 12</span>    vertex.push_back<span class="k2">(</span>build_vertex<span class="k2">(</span>size, size, <span class="n">0</span>, color::blue, <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"> 13</span>  <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 16</span>  <span class="k2">{</span>
<span class="number"> 17</span>    <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span><span class="k3">&amp;</span>vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, NULL, NULL, <span class="n">0</span>, vertex.size<span class="k2">(</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_STRIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <span class="k2">}</span>
<span class="number"> 19</span><span class="k2">}</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">class</span> Project <span class="k2">:</span> <span class="k1">public</span> Screen
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>public:
<span class="number"> 26</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> camera_transform<span class="k2">;</span>
<span class="number"> 27</span>  Model model<span class="k2">;</span>
<span class="number"> 28</span>  Project<span class="k2">(</span>Display <span class="k3">*</span>display<span class="k2">)</span>
<span class="number"> 29</span>    <span class="k2">:</span> Screen<span class="k2">(</span>display<span class="k2">)</span>
<span class="number"> 30</span>    , model<span class="k2">(</span><span class="n">100</span><span class="k2">)</span>
<span class="number"> 31</span>  <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 32</span>  <span class="k1">static</span> <span class="k1">void</span> setup_3d_projection<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> <span class="k3">*</span>projection<span class="k2">)</span>
<span class="number"> 33</span>  <span class="k2">{</span>
<span class="number"> 34</span>     <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>     <span class="k1">int</span> dw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>     <span class="k1">int</span> dh <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>     al_perspective_transform<span class="k2">(</span>projection, <span class="k3">-</span><span class="n">180</span> <span class="k3">*</span> dw <span class="k3">/</span> dh, <span class="k3">-</span><span class="n">180</span>, <span class="n">180</span>,
<span class="number"> 38</span>      <span class="n">180</span> <span class="k3">*</span> dw <span class="k3">/</span> dh, <span class="n">180</span>, <span class="n">3000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>     al_set_projection_transform<span class="k2">(</span>display, projection<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>  <span class="k2">}</span>
<span class="number"> 41</span>  <span class="k1">void</span> primary_timer_func<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 42</span>  <span class="k2">{</span>
<span class="number"> 43</span>    setup_3d_projection<span class="k2">(</span><span class="k3">&amp;</span>camera_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    model.draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>  <span class="k2">}</span>
<span class="number"> 46</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

<b>I think if I get a bare-bones example that renders two rotating textured cubes that z-buffer properly, I would be ok.</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 27 Apr 2014 07:59:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t see a flip <a href="http://alleg.sourceforge.net/a5docs/refman/display.html#al_flip_display">http://alleg.sourceforge.net/a5docs/refman/display.html#al_flip_display</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trezker)</author>
		<pubDate>Sun, 27 Apr 2014 09:10:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm, I was hoping I wouldn&#39;t have to describe my framework.</p><p>The <span class="source-code">Project</span> class inherits <span class="source-code">Screen</span> and then overrides <span class="source-code">Screen::primary_timer_func<span class="k2">(</span><span class="k2">)</span></span>.</p><p>Afterwhich, the flip is called.
</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> d<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> d<span class="k3">&lt;</span>Display::displays.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> d<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
  <span class="k2">{</span>
    Display::displays<span class="k2">[</span>d<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>set_as_target_bitmap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</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>Display::displays<span class="k2">[</span>d<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>_background_color<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>screens.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span>screens<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>display <span class="k3">=</span><span class="k3">=</span> Display::displays<span class="k2">[</span>d<span class="k2">]</span><span class="k2">)</span>
        screens<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>primary_timer_func<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
    Display::displays<span class="k2">[</span>d<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>flip<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// &lt;-- here</span>
  <span class="k2">}</span>
</pre></div></div><p>
A <span class="source-code">Screen</span> is anything, like a menu screen, a game screen, a world map screen.  You can nest several screens at the same time, so you would have a world screen and a hud screen at the same time.</p><p>But that&#39;s all tangential.</p><p>TLDR; the flip is in there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 27 Apr 2014 09:29:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Interesting! I never thought about drawing a 3D model with an Allegro al_draw_prim... Does that even work? I&#39;ll try it myself later if no one else steps up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 28 Apr 2014 12:01:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not cubes and not textured, but those parts are not really relevant, are they?</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   3</span><span class="p">#include "stdio.h"</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">   6</span><span class="k2">{</span>
<span class="number">   7</span>  <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span>  <span class="k1">auto</span> dw <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">  10</span>  <span class="k1">auto</span> dh <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  11</span>  
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_DEPTH_SIZE, <span class="n">16</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">auto</span> d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>dw, dh<span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>  
<span class="number">  15</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>d<span class="k2">)</span>
<span class="number">  16</span>  <span class="k2">{</span>
<span class="number">  17</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Failed to create display\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  19</span>  <span class="k2">}</span>
<span class="number">  20</span>  
<span class="number">  21</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>  
<span class="number">  23</span>  <span class="k1">auto</span> queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  <span class="k1">auto</span> timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>  
<span class="number">  26</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>  
<span class="number">  30</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>  
<span class="number">  32</span>  <span class="k1">int</span> ind<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> 
<span class="number">  33</span>  <span class="k2">{</span>
<span class="number">  34</span>    <span class="n">0</span>, <span class="n">1</span>, <span class="n">2</span>,
<span class="number">  35</span>    <span class="n">0</span>, <span class="n">1</span>, <span class="n">3</span>,
<span class="number">  36</span>    <span class="n">0</span>, <span class="n">2</span>, <span class="n">3</span>,
<span class="number">  37</span>    <span class="n">1</span>, <span class="n">2</span>, <span class="n">3</span>
<span class="number">  38</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number">  39</span>  
<span class="number">  40</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> vtx<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  41</span>  vtx<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  42</span>  vtx<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  43</span>  vtx<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  44</span>  vtx<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>  vtx<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  47</span>  vtx<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  48</span>  vtx<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="number">  49</span>  vtx<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>  vtx<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="number">  52</span>  vtx<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  53</span>  vtx<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span><span class="k2">;</span>
<span class="number">  54</span>  vtx<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>
<span class="number">  56</span>  vtx<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  57</span>  vtx<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="number">  58</span>  vtx<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  59</span>  vtx<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>  <span class="k1">float</span> theta <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  62</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> transform<span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="k1">int</span> mode <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  65</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  66</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  67</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  68</span>  <span class="k2">{</span>
<span class="number">  69</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">  70</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">  71</span>    <span class="k1">switch</span><span class="k2">(</span>ev.type<span class="k2">)</span>
<span class="number">  72</span>    <span class="k2">{</span>
<span class="number">  73</span>      <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number">  74</span>        <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  75</span>        <span class="k2">{</span>
<span class="number">  76</span>          <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  77</span>            done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  78</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  79</span>        <span class="k2">}</span>
<span class="number">  80</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  81</span>      <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number">  82</span>        theta <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">01</span><span class="k2">;</span>
<span class="number">  83</span>        redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  84</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  85</span>    <span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span>    <span class="k1">if</span><span class="k2">(</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="k3">&amp;</span><span class="k3">&amp;</span> redraw<span class="k2">)</span>
<span class="number">  88</span>    <span class="k2">{</span>
<span class="number">  89</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_f"><span class="a">al_map_rgb_f</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">  90</span>      al_clear_depth_buffer<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>      al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>      
<span class="number">  93</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, theta<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">100</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>      
<span class="number">  98</span>      <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span>vtx, NULL, NULL, ind, <span class="n">12</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>      
<span class="number"> 100</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, theta <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span><span class="n">100</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>      
<span class="number"> 105</span>      <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span>vtx, NULL, NULL, ind, <span class="n">12</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>      
<span class="number"> 107</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>      al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span>dw <span class="k3">/</span> <span class="n">2</span>, <span class="k3">-</span>dh <span class="k3">/</span> <span class="n">2</span>, dw <span class="k3">/</span> <span class="n">2</span>, dw <span class="k3">/</span> <span class="n">2</span>, dh <span class="k3">/</span> <span class="n">2</span>, <span class="n">10000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>      al_set_projection_transform<span class="k2">(</span>d, <span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>      
<span class="number"> 111</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"> 112</span>      
<span class="number"> 113</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 114</span>    <span class="k2">}</span>
<span class="number"> 115</span>  <span class="k2">}</span>
<span class="number"> 116</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 28 Apr 2014 16:35:10 +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/614194/1000017#target">SiegeLord</a> said:</div><div class="quote"><p>Not cubes and not textured, but those parts are not really relevant, are they?</p></div></div><p>Not at all. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />  Your post was tremendously helpful.  I managed to make some progress.  I still don&#39;t quite get that the perspective_transform/projection_transform is not related to drawing the primitives themselves.  When drawing the primitives, are they not (actually) fully drawn until the flip?  And how they are drawn is relative to the projection as set at some point before the flip?</p><p>Also, after some digging in my framework code, I found that a line:</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span></p><p>is causing the 3D to not render correctly. If I put it into your code thusly:</p><div class="source-code snippet"><div class="inner"><pre>...

<span class="k1">if</span><span class="k2">(</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="k3">&amp;</span><span class="k3">&amp;</span> redraw<span class="k2">)</span>
<span class="k2">{</span>
   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

   ...
<span class="k2">}</span>

...
</pre></div></div><p>

it has the same result.  I initially use that line to &quot;reset&quot; the drawing back so that the next screen can be drawn without any states set by the prior screen.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 29 Apr 2014 12:51:32 +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/614194/1000066#target">Mark Oates</a> said:</div><div class="quote"><p> When drawing the primitives, are they not (actually) fully drawn until the flip?
</p></div></div><p>That is undefined, but that&#39;s not really what you want to know... they take into account the transformations that were active at the time of the function call.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> is causing the 3D to not render correctly
</p></div></div><p>Projection transforms are very poorly implemented in A5 right now. The usual transformations ( <span class="source-code"><a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a></span>) are a bitmap-local state, while the projection transformations ( <span class="source-code">al_set_projection_transform</span>) are display local and <i>are reset to be orthographic whenever you change target bitmaps</i>. This is a disaster I noticed years ago, but haven&#39;t had time to fix myself.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> it has the same result.</p></div></div><p>So the solution is to do this:</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="k1">if</span><span class="k2">(</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="k3">&amp;</span><span class="k3">&amp;</span> redraw<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  
<span class="number">  5</span>  <span class="c">// Set the projection transform back</span>
<span class="number">  6</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span>dw <span class="k3">/</span> <span class="n">2</span>, <span class="k3">-</span>dh <span class="k3">/</span> <span class="n">2</span>, dw <span class="k3">/</span> <span class="n">2</span>, dw <span class="k3">/</span> <span class="n">2</span>, dh <span class="k3">/</span> <span class="n">2</span>, <span class="n">10000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  al_set_projection_transform<span class="k2">(</span>d, <span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</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_f"><span class="a">al_map_rgb_f</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"> 11</span>  al_clear_depth_buffer<span class="k2">(</span><span class="n">1000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  
<span class="number"> 14</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, theta<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">100</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span>vtx, NULL, NULL, ind, <span class="n">12</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  
<span class="number"> 21</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, theta <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span><span class="n">100</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  
<span class="number"> 26</span>  <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span>vtx, NULL, NULL, ind, <span class="n">12</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  
<span class="number"> 28</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"> 29</span>  
<span class="number"> 30</span>  redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 29 Apr 2014 16:45:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not too terribly exciting, but I&#39;m happy with what I&#39;ve managed to accomplish so far <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p><span class="remote-thumbnail"><span class="json">{"name":"608537","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/d\/0d38c4b169abf0c592eb6dbf494517bc.png","w":960,"h":540,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/d\/0d38c4b169abf0c592eb6dbf494517bc"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/d/0d38c4b169abf0c592eb6dbf494517bc-240.jpg" alt="608537" width="240" height="135" /></span><br /><span class="remote-thumbnail"><span class="json">{"name":"608540","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/1\/b1db0c150a901b24beae2da4b76d1717.png","w":960,"h":540,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/1\/b1db0c150a901b24beae2da4b76d1717"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/1/b1db0c150a901b24beae2da4b76d1717-240.jpg" alt="608540" width="240" height="135" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 30 Apr 2014 09:13:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool! How do you get the textures on there?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 30 Apr 2014 10:49:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Textures are very easy.  In the ALLEGRO_VERTEX there are 6 values:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> <span class="k2">{</span>
  <span class="k1">float</span> x, y, z<span class="k2">;</span>
  <span class="k1">float</span> u, v<span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>
(u, v) are the (x, y) coordinates of the texture in pixel coordinates.  If you overshoot or undershoot (u, v) to the width/height of the texture then the texture will loop.</p><p>When you draw the prim (via <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> or whatnot) then you pass the ALLEGRO_BITMAP texture in to that function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 30 Apr 2014 11:06:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see, I should have thought about it myself! Drat, now I want to program a classic dungeon crawler in Allegro... one day! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 30 Apr 2014 12:12:04 +0000</pubDate>
	</item>
</rss>
