<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] What&#39;s the current, proper way to use both 2-D and 3-D functions</title>
		<link>http://www.allegro.cc/forums/view/614844</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 05 Dec 2014 02:47:38 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Drawing text. Great.</p><p>Doing 3-D transformations. Great.</p><p>Together? Nope!</p><p><span class="remote-thumbnail"><span class="json">{"name":"tivuHw2.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/4\/74ec4c724ed32098edcd70a2b9693b10.png","w":801,"h":624,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/7\/4\/74ec4c724ed32098edcd70a2b9693b10"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/7/4/74ec4c724ed32098edcd70a2b9693b10-240.jpg" alt="tivuHw2.png" width="240" height="186" /></span></p><p>I&#39;ve tried saving and restoring the projection matrix and the transformation matrix. But it doesn&#39;t fix rotation for some reason (the text is rotated!), and restoring to the identity leaves screen position 0,0 in the center of the screen (the text should be top-left at (x,y)=(10,10)!)</p><p>I want 3-D stuff drawn. (Note my lines and circles are supposed to be transformed--as ugly as they are for now.) And then I want 2-D stuff drawn without perspective transformations.</p><p>So what&#39;s the modern, proper way to do this with Allegro 5? </p><p>Code snippets follow:</p><p>Before looping:
</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> projection<span class="k2">;</span> <span class="c">//active one for general use</span>
  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> <span class="k3">*</span>allegro_2d_projection <span class="k3">=</span> al_get_projection_transform<span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> <span class="k3">*</span>allegro_2d_transform <span class="k3">=</span> <span class="k1">new</span> <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a><span class="k2">;</span> 
    <a href="http://www.allegro.cc/manual/al_copy_transform"><span class="a">al_copy_transform</span></a><span class="k2">(</span>allegro_2d_transform, <a href="http://www.allegro.cc/manual/al_get_current_transform"><span class="a">al_get_current_transform</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

During looping:
</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="c">// ALLEGRO 2-D DRAWING</span>
<span class="number">  3</span>    al_set_projection_transform<span class="k2">(</span>display, allegro_2d_projection<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span>allegro_2d_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</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">10</span>, <span class="n">0</span>, <span class="s">"offset_vel [%f/%f]"</span>, offset_x_vel, offset_y_vel<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</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">20</span>, <span class="n">0</span>, <span class="s">"frame rate [%i]"</span>, frame_rate<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    
<span class="number">  8</span>    <span class="c">// ALLEGRO 3-D DRAWING</span>
<span class="number">  9</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>projection<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>projection, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, tilt_angle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>projection, <span class="n">0</span>, <span class="n">0</span>, zoom_distance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>    al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</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="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"> 13</span>    al_set_projection_transform<span class="k2">(</span>display, <span class="k3">&amp;</span>projection<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    
<span class="number"> 15</span>    universe.draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    
<span class="number"> 17</span>    <span class="c">// ALLEGRO 2-D DRAWING TOP LAYER</span>
<span class="number"> 18</span>    al_set_projection_transform<span class="k2">(</span>display, allegro_2d_projection<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span>allegro_2d_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    <span class="c">//mouse cursor for testing</span>
<span class="number"> 22</span>    <a href="http://www.allegro.cc/manual/al_draw_circle"><span class="a">al_draw_circle</span></a><span class="k2">(</span>ms_state.x,
<span class="number"> 23</span>             ms_state.y, 
<span class="number"> 24</span>               <span class="n">5</span>,
<span class="number"> 25</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">0</span>,<span class="n">0</span><span class="k2">)</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    
<span class="number"> 27</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>
</div></div><p>

I found <a href="https://www.allegro.cc/forums/thread/610149">this post</a> but I wasn&#39;t sure if it was up-to-date or not since it&#39;s from 2012.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 03 Dec 2014 09:33:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want billboard lime text, you may need to set an orthographic transform for that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Wed, 03 Dec 2014 14:13:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But what is Allegro doing under the hood and why can&#39;t I just easily go back to that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 03 Dec 2014 19:49:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro is using an orthographic transform. It pretty much ignores perspective and z coords (except things should still be z-index layered properly). In my latest program, I grab the perspective transform allegro sets up when I start up, so I can change it later, and switch back to it at any time.</p><p><a href="https://github.com/Tomasu/mctools/blob/master/mapviewer/src/Renderer.cpp#L202">https://github.com/Tomasu/mctools/blob/master/mapviewer/src/Renderer.cpp#L202</a><br /><a href="https://github.com/Tomasu/mctools/blob/master/mapviewer/src/Renderer.cpp#L418">https://github.com/Tomasu/mctools/blob/master/mapviewer/src/Renderer.cpp#L418</a></p><p>Basically I do: (pseudo code)</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="c">// startup</span>
<span class="number">  2</span>al_proj_transform <span class="k3">=</span> al_get_projection_transform<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">// draw</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span>ALL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>al_set_projection_transform<span class="k2">(</span>dpy_, <span class="k3">&amp;</span>al_proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>glClear<span class="k2">(</span>GL_DEPTH_BUFFER_BIT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</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">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// draw 3d shit</span>
<span class="number"> 12</span>
<span class="number"> 13</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>al_set_projection_transform<span class="k2">(</span>dpy_, <span class="k3">&amp;</span>al_proj_transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      
<span class="number"> 16</span>drawHud<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// draw a 2d layer on top of everything</span>
<span class="number"> 17</span>      
<span class="number"> 18</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</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>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Wed, 03 Dec 2014 20:10:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You code isn&#39;t exactly correct. But after a few hours I think I got something that works.</p><p>What is Allegro 5 doing under-the-hood for 2-D drawing routines? Is it just drawing to a texture and then blitting that, or what? </p><p>I&#39;m having trouble figuring out where I should use Allegro&#39;s tranformation routines, and where I should is OpenGL ones, and in what combination.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Thu, 04 Dec 2014 23:51:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re restricting yourself to OpenGL?</p><p>This is what I&#39;ve been doing it (for shader stuff too, I don&#39;t know how to get A5 to draw text with shaders):
</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="c">//The 3d projection is in effect here</span>
<span class="number">  2</span>  glMatrixMode<span class="k2">(</span>GL_TEXTURE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>  glPushMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  glPushMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>  glPushMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  glDisable<span class="k2">(</span>GL_TEXTURE_2D<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  glDisable<span class="k2">(</span>GL_CULL_FACE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  glOrtho<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>, display_width, display_height, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1000</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</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_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="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>,<span class="n">20</span>.<span class="n">0</span>,<span class="n">40</span>.<span class="n">0</span>,<span class="n">0</span>,<span class="s">"blah blah -- blah blah blah"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="c">//Restore the 3d projection</span>
<span class="number"> 19</span>  glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  glPopMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  glPopMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  glMatrixMode<span class="k2">(</span>GL_TEXTURE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>  glPopMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 05 Dec 2014 00:00:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll try that code when I get home from work today, thanks!</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614844/1007705#target">Arthur Kalliokoski</a> said:</div><div class="quote"><p>
You&#39;re restricting yourself to OpenGL?
</p></div></div><p>
Is that implying I shouldn&#39;t? I thought Allegro ran on top of OpenGL. What else would I use for polygons?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 05 Dec 2014 00:26:24 +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/614844/1007706#target">Chris Katko</a> said:</div><div class="quote"><p> Is that implying I shouldn&#39;t? I thought Allegro ran on top of OpenGL. What else would I use for polygons?</p></div></div><p>The A5 primitives etc. are calling DirectX functions on windows by default, unless OpenGL is specified as an display option.  Cross compatibility or something.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 05 Dec 2014 00:38:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m on Linux. I wasn&#39;t aware of the DirectX under-the-hood, though. Running OpenGL doesn&#39;t &quot;break&quot; anything in Allegro does it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 05 Dec 2014 00:42:28 +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/614844/1007708#target">Chris Katko</a> said:</div><div class="quote"><p> Running OpenGL doesn&#39;t &quot;break&quot; anything in Allegro does it?</p></div></div><p>If it did, it would get fixed by the awesome devs.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 05 Dec 2014 00:45:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Back to my earlier question though, how does Allegro 5 run it&#39;s own drawing routines within the context of OpenGL? Are they all just drawn to a texture and a single quad is drawn? And what is the default frustum in Allegro? It appears to be clipping like crazy when I rotate or try to zoom in.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 05 Dec 2014 00:49:13 +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/614844/1007711#target">Chris Katko</a> said:</div><div class="quote"><p> Back to my earlier question though, how does Allegro 5 run it&#39;s own drawing routines within the context of OpenGL? Are they all just drawn to a texture and a single quad is drawn?</p></div></div><p>As far as I&#39;ve been able to tell, FreeType sets a bitmap (using actual bits, not pixels) to render a glyph, and A5 sets pixels on a texture, then these textures are drawn aligned with the pixels on the screen.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> And what is the default frustum in Allegro? It appears to be clipping like crazy when I rotate or try to zoom in. </p></div></div><p>When you&#39;re doing the 3D stuff, use glFrustum or gluPerspective or even set your own, then restore the 2D stuff as above before drawing text.
</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">void</span> set_perspective<span class="k2">(</span><span class="k1">float</span> <span class="k3">*</span>m, <span class="k1">float</span> fov, <span class="k1">float</span> aspect,
<span class="number">  2</span>           <span class="k1">float</span> znear, <span class="k1">float</span> zfar<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <span class="k1">float</span> xymax <span class="k3">=</span> znear <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_803.html" target="_blank">tan</a><span class="k2">(</span>fov <span class="k3">*</span> <span class="k2">(</span>M_PI<span class="k3">/</span><span class="n">360</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">float</span> ymin <span class="k3">=</span> <span class="k3">-</span>xymax<span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">float</span> xmin <span class="k3">=</span> <span class="k3">-</span>xymax<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  <span class="k1">float</span> width <span class="k3">=</span> xymax <span class="k3">-</span> xmin<span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">float</span> height <span class="k3">=</span> xymax <span class="k3">-</span> ymin<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">float</span> depth <span class="k3">=</span> zfar <span class="k3">-</span> znear<span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">float</span> q <span class="k3">=</span> <span class="k3">-</span><span class="k2">(</span>zfar <span class="k3">+</span> znear<span class="k2">)</span> <span class="k3">/</span> depth<span class="k2">;</span>
<span class="number"> 13</span>  <span class="k1">float</span> qn <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span> <span class="k3">*</span> <span class="k2">(</span>zfar <span class="k3">*</span> znear<span class="k2">)</span> <span class="k3">/</span> depth<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="k1">float</span> w <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> znear <span class="k3">/</span> width<span class="k2">;</span>
<span class="number"> 16</span>  w <span class="k3">=</span> w <span class="k3">/</span> aspect<span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">float</span> h <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> znear <span class="k3">/</span> height<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  m<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>  <span class="k3">=</span> w<span class="k2">;</span>
<span class="number"> 20</span>  m<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 21</span>  m<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 22</span>  m<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  m<span class="k2">[</span><span class="n">4</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 25</span>  m<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>  <span class="k3">=</span> h<span class="k2">;</span>
<span class="number"> 26</span>  m<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 27</span>  m<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  m<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>  m<span class="k2">[</span><span class="n">9</span><span class="k2">]</span>  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 31</span>  m<span class="k2">[</span><span class="n">10</span><span class="k2">]</span> <span class="k3">=</span> q<span class="k2">;</span>
<span class="number"> 32</span>  m<span class="k2">[</span><span class="n">11</span><span class="k2">]</span> <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>  m<span class="k2">[</span><span class="n">12</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 35</span>  m<span class="k2">[</span><span class="n">13</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 36</span>  m<span class="k2">[</span><span class="n">14</span><span class="k2">]</span> <span class="k3">=</span> qn<span class="k2">;</span>
<span class="number"> 37</span>  m<span class="k2">[</span><span class="n">15</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 05 Dec 2014 00:56:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you very much for your help. That&#39;s the kind of detail I needed to solve the issues I&#39;m having. I&#39;ll get back to you with my results when I have them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 05 Dec 2014 01:06:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did mess up the code example but the code in github seems to work fine for a 2d overlay on a 3d view.</p><p>As for how allegro draws... Blitz are textured quads or triangles and the primitives addon uses generated lists of triangles to make up the various shapes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 05 Dec 2014 02:47:38 +0000</pubDate>
	</item>
</rss>
