<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Coordinate systems and allegro transformations</title>
		<link>http://www.allegro.cc/forums/view/617698</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 16 Jan 2019 05:48:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can someone help me understand what is going on with my 3D. I&#39;m trying to use a left handed coordinate system like this :</p><p>RGB is XYZ of a Left Handed coordinate system. What I get is the purple vector instead, with left and right completely reversed.</p><p><span class="remote-thumbnail"><span class="json">{"name":"611851","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/d\/dd515541d9190f8ac1c7788c01a47690.png","w":800,"h":600,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/d\/dd515541d9190f8ac1c7788c01a47690"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/d/dd515541d9190f8ac1c7788c01a47690-240.jpg" alt="611851" width="240" height="180" /></span></p><p>You can clearly see in my program, that positive x goes left :</p><p><span class="remote-thumbnail"><span class="json">{"name":"611852","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/8\/686905ed95760d4d392c2b05243133cf.png","w":902,"h":633,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/8\/686905ed95760d4d392c2b05243133cf"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/6/8/686905ed95760d4d392c2b05243133cf-240.jpg" alt="611852" width="240" height="168" /></span></p><p>I&#39;m using al_build_camera_transform to setup my camera.
</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>Camera::Camera<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>
<span class="number">  2</span>      info<span class="k2">(</span>START<span class="k2">)</span>,
<span class="number">  3</span>      hfov<span class="k2">(</span><span class="n">90</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number">  4</span>      aspect<span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k3">/</span><span class="n">3</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number">  5</span>      ortho<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>
<span class="number">  6</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  7</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">void</span> Camera::Setup3D<span class="k2">(</span><span class="k1">bool</span> orthographic<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>   ortho  <span class="k3">=</span> orthographic<span class="k2">;</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> proj<span class="k2">;</span>
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> cam<span class="k2">;</span>
<span class="number"> 13</span>   
<span class="number"> 14</span>   <span class="k1">const</span> <span class="k1">double</span> near <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">const</span> <span class="k1">double</span> w <span class="k3">=</span> near<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_803.html" target="_blank">tan</a><span class="k2">(</span>hfov<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">const</span> <span class="k1">double</span> l <span class="k3">=</span> <span class="k3">-</span>w<span class="k2">;</span>
<span class="number"> 17</span>   <span class="k1">const</span> <span class="k1">double</span> r <span class="k3">=</span> w<span class="k2">;</span>
<span class="number"> 18</span>   <span class="k1">const</span> <span class="k1">double</span> top <span class="k3">=</span> w<span class="k3">/</span>aspect<span class="k2">;</span>
<span class="number"> 19</span>   <span class="k1">const</span> <span class="k1">double</span> bot <span class="k3">=</span> <span class="k3">-</span>w<span class="k3">/</span>aspect<span class="k2">;</span>
<span class="number"> 20</span>   <span class="k1">const</span> <span class="k1">double</span> far <span class="k3">=</span> <span class="n">2000</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   
<span class="number"> 23</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<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ortho<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>      al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>proj , l , top , near , r , bot , far<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   <span class="k2">}</span>
<span class="number"> 27</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 28</span>      al_orthographic_transform<span class="k2">(</span><span class="k3">&amp;</span>proj , <span class="k3">-</span><span class="n">500</span>,<span class="n">500</span>,<span class="n">0</span>,<span class="n">500</span>,<span class="k3">-</span><span class="n">500</span>,<span class="n">1000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   <span class="k2">}</span>
<span class="number"> 30</span>   al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>proj<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>   
<span class="number"> 32</span>   Vec3 eye <span class="k3">=</span> info.pos<span class="k2">;</span>
<span class="number"> 33</span>   Vec3 look <span class="k3">=</span> info.pos <span class="k3">+</span> info.orient.Fw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>   Vec3 up <span class="k3">=</span> info.orient.Up<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>   
<span class="number"> 36</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>cam<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>   al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>cam , eye.x , eye.y , eye.z , look.x , look.y , look.z , up.x , up.y , up.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span><span class="c">///   al_scale_transform_3d(&amp;cam , 1.0 , 1.0 , 1.0);</span>
<span class="number"> 39</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<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k2">}</span>
</div></div><p>



Also, I have a question, should I apply the rotation scale translation transformation <b>before</b> or <b>after</b> the camera transform? Right now I apply it before, but that seems wrong. I use al_compose_transform to add the camera to my transform before rendering.</p><p>I understand there are 8 possible combinations of axes, but how do I specify my specific XYZ configuration to OpenGL? Do I need to use gluLookAt()? What does al_build_camera_transform do? Is it inverting my coordinates?</p><p>I&#39;ve tried multiple things to &quot;fix&quot; this, but none of them work. I&#39;ve applied negative scale transforms to x and z and nothing works. Half the time my things are inside out.</p><p>Oh and one more thing, which way does al_rotate_transform rotate? Ie if the vector is pointing forward, is positive clockwise?</p><p>I also realize that left handed and right handed are essentially the same, only with axes switched. So maybe my XYZ is not left handed either? I am getting confused, and I&#39;m tired of the left side being on the right and the right side being on the left.</p><p><b>EDIT</b><br />Also, bonus points if anyone can figure out why characters in my font are disappearing. I know it&#39;s something to do with OpenGL but I can&#39;t figure it out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 15 Jan 2019 07:03:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OpenGL uses a Right-handed coordinate system (and so does Direct3D nowadays), the camera is at (0,0,0) and points towards negative Z (positive X goes right and positive Y goes up).</p><pre>
   y
   |
   !____x
  /
 /
z
</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mr-Hide)</author>
		<pubDate>Tue, 15 Jan 2019 19:30:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, here are the fixes I got from elias on IRC on #allegro :</p><p>1. Call glGetError() before calling allegro font drawing routines, because they will skip glyphs if there is an error.</p><p>2. Flip l and r in al_perspective_transform so r is negative and l is positive, or greater than r. This flips the x axis so it does what I want.</p><p>Thank you Mr-Hide for the explanation.</p><p>My model is fixed now and ready to save as an .obj file and edit it in blender.</p><p><span class="remote-thumbnail"><span class="json">{"name":"611853","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/5\/85b9d6bc3377848b1157f7e8e5720066.png","w":902,"h":633,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/5\/85b9d6bc3377848b1157f7e8e5720066"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/5/85b9d6bc3377848b1157f7e8e5720066-240.jpg" alt="611853" width="240" height="168" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 16 Jan 2019 05:48:53 +0000</pubDate>
	</item>
</rss>
