<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>3D rotation using Allegro 5.2.4</title>
		<link>http://www.allegro.cc/forums/view/617512</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 26 Jul 2018 00:55:11 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t quite get how the 3D rotation transformations work. In my program I first rotate an object and then move it.(you can rotate it by the arrow keys and space and m.) I would think that the object would just rotate where it is but no; in a full rotation it first is where it should be, then it rotates in a circle to 0,0,0 and then it rotates back to where it should be. Why doesn&#39;t it just rotate where the object is? Why does it move to a different place when rotated?</p><p>translation 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><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"> 2</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 3</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>, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 4</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 5</span>al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">4000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 6</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>
</div></div><p>

whole 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="p">#include&lt;allegro5\allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include&lt;allegro5\allegro_color.h&gt;</span>
<span class="number">   3</span><span class="p">#include&lt;allegro5\allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include&lt;allegro5\allegro_primitives.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#define W  1000</span>
<span class="number">   7</span><span class="p">#define H  1000</span>
<span class="number">   8</span><span class="p">#define PPHI  100</span>
<span class="number">   9</span><span class="p">#define PTHETA  100</span>
<span class="number">  10</span><span class="p">#define XYZ_MOVE_AMOUNT  0.01</span>
<span class="number">  11</span><span class="p">#define AMOUNT_OF_INDEXES  (PPHI*PTHETA * 2-PPHI)</span>
<span class="number">  12</span><span class="p">#define LOOP(var,max)  for(var=0;var&lt;max;++var)</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  15</span>
<span class="number">  16</span>  <span class="c">//------------setup-----------</span>
<span class="number">  17</span>
<span class="number">  18</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">  19</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</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">  21</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">  22</span>  <span class="k1">auto</span> display <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>W, H<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</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">  24</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">  25</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">  26</span>  <span class="c">//auto image = al_load_bitmap("C:\\Users\\ae1admin1\\Desktop\\programming_stizzle\\progz\\langtons_ant\\langtons_ant\\images\\square_pattern\\end.png");</span>
<span class="number">  27</span>
<span class="number">  28</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">  29</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">  30</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_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</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">  32</span>
<span class="number">  33</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">  34</span>
<span class="number">  35</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">  36</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">  37</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> white <span class="k3">=</span> <span class="k2">{</span> <span class="n">1</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">  38</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> black <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</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">  39</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> gray <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>.<span class="n">5</span>,<span class="n">0</span>.<span class="n">5</span>,<span class="n">0</span>.<span class="n">5</span>, <span class="n">1</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  40</span>  <span class="k1">int</span> index_list<span class="k2">[</span>AMOUNT_OF_INDEXES<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  41</span>  <span class="k1">int</span> i, j, k, <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  42</span>  <span class="k1">float</span> x, y, z<span class="k2">;</span>
<span class="number">  43</span>  x <span class="k3">=</span> y <span class="k3">=</span> z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  44</span>  LOOP<span class="k2">(</span>i, PPHI <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  45</span>    LOOP<span class="k2">(</span>j, PTHETA<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  46</span>      index_list<span class="k2">[</span><span class="k2">(</span>i<span class="k3">*</span>PPHI <span class="k3">+</span> j<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> i <span class="k3">*</span> PPHI <span class="k3">+</span> j<span class="k2">;</span>
<span class="number">  47</span>      index_list<span class="k2">[</span><span class="k2">(</span>i<span class="k3">*</span>PPHI <span class="k3">+</span> j<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">(</span>i <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k3">*</span>PPHI <span class="k3">+</span> j<span class="k2">;</span>
<span class="number">  48</span>    <span class="k2">}</span>
<span class="number">  49</span>  <span class="k2">}</span>
<span class="number">  50</span>  <span class="k1">float</span> rotate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span>  <span class="k1">float</span> r<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  53</span>  <span class="k1">float</span> phi, theta<span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>  <span class="k1">float</span> m<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">2</span>,<span class="n">3</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  56</span>  <span class="k1">float</span> n1<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>.<span class="n">7</span>,<span class="n">100</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  57</span>  <span class="k1">float</span> n2<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>.<span class="n">3</span>,<span class="n">100</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  58</span>  <span class="k1">float</span> n3<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>.<span class="n">2</span>,<span class="n">100</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  59</span>  <span class="k1">float</span> a<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</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="k1">float</span> b<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">1</span>,<span class="n">1</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  61</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v<span class="k2">[</span>PPHI<span class="k3">*</span>PTHETA<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>  <span class="c">//------------create the shape-------------</span>
<span class="number">  64</span>
<span class="number">  65</span>  LOOP<span class="k2">(</span>i, PPHI<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  66</span>    LOOP<span class="k2">(</span>j, PTHETA<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  67</span>      phi <span class="k3">=</span> i <span class="k3">*</span> PI <span class="k3">*</span> <span class="n">2</span> <span class="k3">/</span> PPHI<span class="k2">;</span>
<span class="number">  68</span>      theta <span class="k3">=</span> j <span class="k3">*</span> PI <span class="k3">*</span> <span class="n">2</span> <span class="k3">/</span> PTHETA<span class="k2">;</span><span class="c">//half and shift</span>
<span class="number">  69</span>      r<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span> <span class="k3">/</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> a<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>m<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k3">*</span>phi<span class="k2">)</span><span class="k2">)</span>, n2<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> b<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>m<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k3">*</span>phi<span class="k2">)</span><span class="k2">)</span>, n3<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> n1<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>      r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span> <span class="k3">/</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> a<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>m<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k3">*</span>theta<span class="k2">)</span><span class="k2">)</span>, n2<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> b<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>m<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">/</span> <span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k3">*</span>theta<span class="k2">)</span><span class="k2">)</span>, n3<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> n1<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> j <span class="k3">+</span> i <span class="k3">*</span> PTHETA<span class="k2">;</span>
<span class="number">  72</span>      v<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>.x <span class="k3">=</span> r<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>theta<span class="k2">)</span><span class="k3">*</span>r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>phi<span class="k2">)</span> <span class="k3">*</span> <span class="n">1000</span><span class="k2">;</span>
<span class="number">  73</span>      v<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>.y <span class="k3">=</span> r<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>theta<span class="k2">)</span><span class="k3">*</span>r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>phi<span class="k2">)</span> <span class="k3">*</span> <span class="n">1000</span><span class="k2">;</span>
<span class="number">  74</span>      v<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>.z <span class="k3">=</span> r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>phi<span class="k2">)</span> <span class="k3">*</span> <span class="n">1000</span><span class="k2">;</span>
<span class="number">  75</span>      v<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_color_hsv"><span class="a">al_color_hsv</span></a><span class="k2">(</span>phi <span class="k3">/</span> <span class="k2">(</span>PI <span class="k3">*</span> <span class="n">2</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">360</span>, <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>
<span class="number">  77</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>gray<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</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">  79</span>    <span class="k2">}</span>
<span class="number">  80</span>  <span class="k2">}</span>
<span class="number">  81</span>
<span class="number">  82</span>  <span class="c">//------------main loop--------------</span>
<span class="number">  83</span>
<span class="number">  84</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  85</span>  <span class="k2">{</span>
<span class="number">  86</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">  87</span>    <span class="k1">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span>
<span class="number">  88</span>    <span class="k2">{</span>
<span class="number">  89</span>    <span class="k1">case</span> ALLEGRO_EVENT_KEY_CHAR:
<span class="number">  90</span>      <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  91</span>      <span class="k2">{</span>
<span class="number">  92</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  93</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  95</span>        x <span class="k3">-</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number">  96</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  97</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number">  98</span>        x <span class="k3">+</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number">  99</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 100</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 101</span>        y <span class="k3">-</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number"> 102</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 103</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 104</span>        y <span class="k3">+</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number"> 105</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 106</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 107</span>        z <span class="k3">+</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number"> 108</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 109</span>      <span class="k1">case</span> ALLEGRO_KEY_M:
<span class="number"> 110</span>        z <span class="k3">-</span><span class="k3">=</span> XYZ_MOVE_AMOUNT<span class="k2">;</span>
<span class="number"> 111</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 112</span>      <span class="k2">}</span>
<span class="number"> 113</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 114</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 115</span>
<span class="number"> 116</span>      <span class="c">//------------drawing-----------</span>
<span class="number"> 117</span>
<span class="number"> 118</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>gray<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</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"> 120</span>
<span class="number"> 121</span><span class="c">// -------------------------Problem is here-------------------------------</span>
<span class="number"> 122</span>
<span class="number"> 123</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"> 124</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</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>, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">4000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</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"> 129</span>
<span class="number"> 130</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>v, NULL, NULL, index_list, AMOUNT_OF_INDEXES, ALLEGRO_PRIM_TRIANGLE_STRIP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>
<span class="number"> 132</span>      al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span>W <span class="k3">/</span> <span class="n">2</span>, <span class="k3">-</span>H <span class="k3">/</span> <span class="n">2</span>, <span class="n">1000</span>, W <span class="k3">/</span> <span class="n">2</span>, H <span class="k3">/</span> <span class="n">2</span>, <span class="n">100000000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>      al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</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"> 135</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 136</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 137</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    <span class="k2">}</span>
<span class="number"> 139</span>  <span class="k2">}</span>
<span class="number"> 140</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Tue, 24 Jul 2018 23:40:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s not how you use <a href="https://liballeg.org/a5docs/trunk/transformations.html#al_rotate_transform_3d">al_rotate_transform_3d</a>. Or at least, I don&#39;t think you&#39;re doing it right. In your case, x,y, and z would be the angle you rotate around the axis. What you do is rotate around a single axis. That will make it spin. If you rotate around two axes, you can get roll, yaw, and pitch. But you need to rotate around the forward, up, and right vectors to do that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 25 Jul 2018 00:19:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t quite get what you mean. Could you post some example code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Wed, 25 Jul 2018 00:41:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>XYZ defines the vector (axis) you wish to rotate around. Theta is by how much.</p><p>If you rotate around the z (forward) vector, you get roll.</p><p>If you rotate around the x (right) vector, you get pitch.</p><p>If you rotate around the y (up) vector, you get yaw.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 25 Jul 2018 03:05:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I thought that that is exactly what im doing. First I rotate by x amount around axis x, then by y amount around axis y etc. and at the end I move it a bit back
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Wed, 25 Jul 2018 05:00:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re missing an <span class="source-code"><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a></span> before you construct your perspective transformation (thanks for providing the code, it took me a few minutes to figure out what was going on).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 25 Jul 2018 06:40:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes thank you! I forgot the identity transform...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Wed, 25 Jul 2018 15:57:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The thing you have to realize is that you&#39;re applying yaw, roll, and pitch improperly.</p><p>Time for a quick tut.</p><p>Take your left hand and open it and spread out your fingers. Now close the pinky and ring fingers into your palm while keeping your other fingers in place as best you can. Now form the 3 remaining fingers into the shape of a 3D corner. Now point your middle finger directly towards you. They now form the basis of a Left Handed Coordinate system. Your middle finger points towards positive z, towards the screen, or you. Your pointer finger points towards the positive x axis, and your thumb points towards positive y axis.</p><p>Now try to rotate your hand around one of your open fingers. You can&#39;t do it without affecting the other two axes. This means if you want to apply yaw, pitch, and roll, then you need to modify the other two vectors when you rotate around an axis. So anytime you rotate around one of the three axis vectors (forward, right, up), you change the other two.</p><p>This means you need to account for that in your code, if you truly want local roll, pitch, and yaw.</p><p>This is mostly psuedocode. Initialization of fw,rt,and up are up to you. They should be normalized to length 1, and they can simply be your xyz axes.</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><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t,t2<span class="k2">;</span>
<span class="number">  2</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> fw,rt,up<span class="k2">;</span>
<span class="number">  3</span><span class="k1">double</span> yaw,pitch,roll<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  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>t2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t , rt.x , rt.y , rt.z , pitch<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t2 , rt.x , rt.y , rt.z , pitch<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>up.x , <span class="k3">&amp;</span>up.y , <span class="k3">&amp;</span>up.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>fw.x , <span class="k3">&amp;</span>fw.y , <span class="k3">&amp;</span>fw.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t , fw.x , fw.y , fw.z , roll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t2 , fw.x , fw.y , fw.z , roll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>up.x , <span class="k3">&amp;</span>up.y , <span class="k3">&amp;</span>up.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>rt.x , <span class="k3">&amp;</span>rt.y , <span class="k3">&amp;</span>rt.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span><a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t , up.x , up.y , up.z , yaw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>t2 , up.x , up.y , up.z , yaw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>rt.x , <span class="k3">&amp;</span>rt.y , <span class="k3">&amp;</span>rt.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>al_transform_coordinates_3d<span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>fw.x , <span class="k3">&amp;</span>fw.y , <span class="k3">&amp;</span>fw.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</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>t2<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 26 Jul 2018 00:55:11 +0000</pubDate>
	</item>
</rss>
