<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>tranformations with A5</title>
		<link>http://www.allegro.cc/forums/view/618572</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 17 Dec 2021 23:46:42 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p> I&#39;ve read the bits of the docs about transforms and looked at ex_transform.</p><p>I still don&#39;t really understand what they do and how they should be used.</p><p>Is there a tutorial about them anywhere?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 07 Dec 2021 06:06:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just to ask, are you interested in transforms that are applied to the display (like controlling a camera), or transforms to establish the position different objects in a scene?  There&#39;s a bit of a difference between the two.</p><p>Also, 2d or 3d?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 07 Dec 2021 07:54:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m just trying to learn how to use the function al_draw_prim so I started trying to understand the code in ex_prim.c . I wanted to understand this function :</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">static</span> <span class="k1">void</span> LowPrimitives<span class="k2">(</span><span class="k1">int</span> mode<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <span class="k1">static</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">13</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> vtx2<span class="k2">[</span><span class="n">13</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">if</span> <span class="k2">(</span>mode <span class="k3">=</span><span class="k3">=</span> INIT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>      <span class="k1">int</span> ii <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">for</span> <span class="k2">(</span>ii <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> ii <span class="k3">&lt;</span> <span class="n">13</span><span class="k2">;</span> ii<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>         <span class="k1">float</span> x, y<span class="k2">;</span>
<span class="number"> 10</span>         x <span class="k3">=</span> <span class="n">200</span> <span class="k3">*</span> cosf<span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>ii <span class="k3">/</span> <span class="n">13</span>.<span class="n">0f</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">*</span> <a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>         y <span class="k3">=</span> <span class="n">200</span> <span class="k3">*</span> sinf<span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>ii <span class="k3">/</span> <span class="n">13</span>.<span class="n">0f</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">*</span> <a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>         
<span class="number"> 13</span>         color <span class="k3">=</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="k2">(</span>ii <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">3</span> <span class="k3">*</span> <span class="n">64</span>, <span class="k2">(</span>ii <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span> % <span class="n">3</span> <span class="k3">*</span> <span class="n">64</span>, <span class="k2">(</span>ii<span class="k2">)</span> % <span class="n">3</span> <span class="k3">*</span> <span class="n">64</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>         
<span class="number"> 15</span>         vtx<span class="k2">[</span>ii<span class="k2">]</span>.x <span class="k3">=</span> x<span class="k2">;</span> vtx<span class="k2">[</span>ii<span class="k2">]</span>.y <span class="k3">=</span> y<span class="k2">;</span> vtx<span class="k2">[</span>ii<span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>         vtx2<span class="k2">[</span>ii<span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span> <span class="k3">*</span> x<span class="k2">;</span> vtx2<span class="k2">[</span>ii<span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span> <span class="k3">*</span> y<span class="k2">;</span>
<span class="number"> 17</span>         vtx<span class="k2">[</span>ii<span class="k2">]</span>.color <span class="k3">=</span> color<span class="k2">;</span>
<span class="number"> 18</span>         vtx2<span class="k2">[</span>ii<span class="k2">]</span>.color <span class="k3">=</span> color<span class="k2">;</span>
<span class="number"> 19</span>      <span class="k2">}</span>
<span class="number"> 20</span>   <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>mode <span class="k3">=</span><span class="k3">=</span> LOGIC<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>      Theta <span class="k3">+</span><span class="k3">=</span> Speed<span class="k2">;</span>
<span class="number"> 22</span>      <a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>MainTrans, ScreenW <span class="k3">/</span> <span class="n">2</span>, ScreenH <span class="k3">/</span> <span class="n">2</span>, <span class="n">1</span>, <span class="n">1</span>, Theta<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   <span class="k2">}</span> <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>mode <span class="k3">=</span><span class="k3">=</span> DRAW<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>      <span class="k1">if</span> <span class="k2">(</span>Blend<span class="k2">)</span>
<span class="number"> 25</span>         <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>      <span class="k1">else</span>
<span class="number"> 27</span>         <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO<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_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>MainTrans<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>      
<span class="number"> 31</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>vtx, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">4</span>, ALLEGRO_PRIM_LINE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>vtx, <span class="n">0</span>, <span class="n">0</span>, <span class="n">4</span>, <span class="n">9</span>, ALLEGRO_PRIM_LINE_STRIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>vtx, <span class="n">0</span>, <span class="n">0</span>, <span class="n">9</span>, <span class="n">13</span>, ALLEGRO_PRIM_LINE_LOOP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>vtx2, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">13</span>, ALLEGRO_PRIM_POINT_LIST<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_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>Identity<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>   <span class="k2">}</span>
<span class="number"> 38</span><span class="k2">}</span>
</div></div><p>

What I actually want to do is draw some lines on a display&#39;s backbuffer with low level routines.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 07 Dec 2021 15:13:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="https://liballeg.org/a5docs/trunk/transformations.html#al_build_transform">https://liballeg.org/a5docs/trunk/transformations.html#al_build_transform</a></p><p>al_build_transform(&amp;MainTrans, ScreenW / 2, ScreenH / 2, 1, 1, Theta);</p><p>This call creates a transform matrix that does this :</p><p>1) Rotate by theta<br />2) Scale by 1,1<br />3) Translate by sw/2 , sh/2</p><p>It is equivalent to doing the same thing sequentially.</p><p>Most the time you want to precede rotation and scaling by a centering translation, unto the center of the object you are drawing. This way it isn&#39;t skewed by the scaling.</p><p>In the case of the function you are asking about, the model it is drawing is already centered on 0,0 so rotation and scaling are applied evenly to the whole figure.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 07 Dec 2021 19:43:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see. The screen is a coordinate system with pixel (0, 0) as it&#39;s origin. The translation shifts the origin to the center of the screen. The scaling makes things stay the same size and the rotation rotated everything around the center of the screen.</p><p>Thanks a lot.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Wed, 08 Dec 2021 00:12:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Furthermore, <a href="https://liballeg.org/a5docs/trunk/transformations.html#al_use_transform">https://liballeg.org/a5docs/trunk/transformations.html#al_use_transform</a> sets the view matrix.</p><p><a href="https://liballeg.org/a5docs/trunk/transformations.html#al_use_projection_transform">https://liballeg.org/a5docs/trunk/transformations.html#al_use_projection_transform</a> sets the perspective transform - for 3D, and <a href="https://liballeg.org/a5docs/trunk/transformations.html#al_orthographic_transform">https://liballeg.org/a5docs/trunk/transformations.html#al_orthographic_transform</a> for 2D flat perspective.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 08 Dec 2021 00:36:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar.</p><p>Can I also use al_draw_prim to draw lines and other geometrical objects with different translucencies?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Wed, 08 Dec 2021 19:21:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes. In the ALLEGRO_VERTEX struct is a member called color or col or ... simply use al_map_rgba instead of al_map_rgb to create your vertex color.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 10 Dec 2021 23:43:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I still struggle with Allegro transformations every time I need to use them. Given that Allegro is a multiplatform library, I wonder why it didn&#39;t adopt OpenGL style transformations.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Sat, 11 Dec 2021 10:33:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>kenmasters1976 - the only difference between them is the order they are applied. Allegro transformations are pre-multiplied, and OpenGL transformations are post-multiplied. All you do is reverse the order you apply them in.</p><p>Personally, I think OpenGL is backwards. :/
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 11 Dec 2021 21:18:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p> Thanks both of you. </p><p> I managed to work out how to draw with blending by experimentation. The potential of allegro is slowly dawning on me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Sun, 12 Dec 2021 01:46:54 +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/618572/1051415#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> Personally, I think OpenGL is backwards. :/ 
</p></div></div><p>I&#39;ve read that before. However, I learned some basic OpenGL ever since Allegro 4 with AllegroGL so I guess I&#39;m so used to OpenGL that I can&#39;t easily think of transformations the other way around. That said, I can use Allegro 5 transformations whenever I need them, they just don&#39;t seem intuitive to me since OpenGL is what I&#39;m used to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Tue, 14 Dec 2021 22:35:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Generally, transformations follow this pattern :</p><p>0) Setup your view transform (your camera)<br />1) Translate the center of your object to the origin<br />2) Rotate<br />3) Scale<br />4) Untranslate back to the correct position of the center of your object</p><p>This prevents your object from stretching or skewing or spiraling off course.</p><p>kenmasters1976, what is that in OpenGL? Something like this??</p><div class="source-code snippet"><div class="inner"><pre>glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
glIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
glTranslate<span class="k2">(</span>cx,cy,cz<span class="k2">)</span><span class="k2">;</span>
glScale<span class="k2">(</span>sx,sy,sz<span class="k2">)</span><span class="k2">;</span>
glRotate<span class="k2">(</span>rx , ry , rz<span class="k2">)</span>
glTranslate<span class="k2">(</span><span class="k3">-</span>cx , <span class="k3">-</span>cy , <span class="k3">-</span>cz<span class="k2">)</span>
glMultiply<span class="k2">(</span>CameraMatrix<span class="k2">)</span>
</pre></div></div><p>
Doesn&#39;t this require you to know the camera matrix?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 17 Dec 2021 23:46:42 +0000</pubDate>
	</item>
</rss>
