<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>First person camera using transformations</title>
		<link>http://www.allegro.cc/forums/view/617520</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 03 Aug 2018 19:44:17 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i have tried to implement a first person camera, but as you might guess: It don&#39;t work. everything works fine in the whole 3d department of my code, except for the camera. if you look forwards everything works, but if you look 90 degrees to the side instead of the camera looking up and down when you move the mouse it spins in a circle and if you look 180 degrees behind yourself the camera is inverted. how do i fix this? i have tried many different formulas but none of them work.</p><p>mouse processing: </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">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number">  3</span>      p.m.x <span class="k3">+</span><span class="k3">=</span> ev.mouse.dx<span class="k2">;</span>
<span class="number">  4</span>      p.m.y <span class="k3">+</span><span class="k3">=</span> ev.mouse.dy<span class="k2">;</span>
<span class="number">  5</span>      p.m.ax <span class="k3">=</span> p.m.x <span class="k3">/</span> MOUSE_SPEED<span class="k2">;</span><span class="c">//angle x: 1 rotation = 2*PI</span>
<span class="number">  6</span>      p.m.ay <span class="k3">=</span> p.m.y <span class="k3">/</span> <span class="k3">-</span>MOUSE_SPEED<span class="k2">;</span><span class="c">//angle y: goes from -PI/2 to PI/2</span>
<span class="number">  7</span>      <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">if</span> <span class="k2">(</span>p.m.ay <span class="k3">&gt;</span> PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>        p.m.ay <span class="k3">=</span> PI <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 10</span>        p.m.y <span class="k3">=</span> <span class="k2">(</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="k3">-</span>MOUSE_SPEED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>      <span class="k2">}</span>
<span class="number"> 12</span>      <span class="k1">if</span> <span class="k2">(</span>p.m.ay <span class="k3">&lt;</span> <span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>        p.m.ay <span class="k3">=</span> <span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 14</span>        p.m.y <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k3">*</span><span class="k3">-</span>MOUSE_SPEED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      <span class="k2">}</span>
<span class="number"> 16</span><span class="c">//------------------------------------------------</span>
<span class="number"> 17</span><span class="c">//----------calculate camera rotation-------------</span>
<span class="number"> 18</span><span class="c">//------------------------------------------------</span>
<span class="number"> 19</span><span class="c">//-------------how do i do this?------------------</span>
<span class="number"> 20</span><span class="c">//------------------------------------------------</span>
<span class="number"> 21</span>      p.m.cax <span class="k3">=</span> p.m.ay<span class="k2">;</span>
<span class="number"> 22</span>      p.m.cay <span class="k3">=</span> p.m.ax<span class="k2">;</span>
<span class="number"> 23</span>      p.m.caz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> 
<span class="number"> 24</span>
<span class="number"> 25</span>      <span class="c">/*p.m.cax = cos(p.m.ax) * cos(p.m.ay)*PI;</span>
<span class="number"> 26</span><span class="c">      p.m.cay = sin(p.m.ay)*PI;</span>
<span class="number"> 27</span><span class="c">      p.m.caz = sin(p.m.ax) * cos(p.m.ay)*PI;*/</span>
<span class="number"> 28</span>      <span class="k1">break</span><span class="k2">;</span>
</div></div><p>
camera transformation 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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, p.x, p.y, p.z<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>tra, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, p.m.cax<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>tra, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, p.m.cay<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, p.m.caz<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>      al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="k3">-</span>SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, <span class="k3">-</span>SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span>, <span class="n">1000</span>, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span>, <span class="n">100000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>      al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</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>
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_font.h&gt;</span>
<span class="number">   3</span><span class="p">#include&lt;allegro5\allegro_ttf.h&gt;</span>
<span class="number">   4</span><span class="p">#include&lt;allegro5\allegro_color.h&gt;</span>
<span class="number">   5</span><span class="p">#include&lt;allegro5\allegro_primitives.h&gt;</span>
<span class="number">   6</span><span class="p">#include&lt;allegro5\allegro_image.h&gt;</span>
<span class="number">   7</span><span class="p">#include&lt;cmath&gt;</span>
<span class="number">   8</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="p">#define LOOP(var,max) for(var=0;var&lt;max;++var)</span>
<span class="number">  11</span><span class="p">#define KD(keycode)  al_key_down(&amp;key,ALLEGRO_KEY_##keycode)</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="p">#define SCREEN_WIDTH  (100 * 16)</span>
<span class="number">  14</span><span class="p">#define SCREEN_HEIGHT  (100 * 9)</span>
<span class="number">  15</span><span class="p">#define PI  3.141592653589793238462643</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="p">#define MOVE_SPEED  30</span>
<span class="number">  18</span><span class="p">#define MOUSE_SPEED  500. //higher = lower speed</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number">  21</span>  <span class="k1">int</span> x, y<span class="k2">;</span><span class="c">//xy location of mouse</span>
<span class="number">  22</span>  <span class="k1">float</span> ax, ay<span class="k2">;</span><span class="c">//xy angle of mouse</span>
<span class="number">  23</span>  <span class="k1">float</span> cax, cay, caz<span class="k2">;</span><span class="c">//camera angle</span>
<span class="number">  24</span><span class="k2">}</span>mouse_t<span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span><span class="k1">class</span> player_t <span class="k2">{</span>
<span class="number">  27</span>public:
<span class="number">  28</span>  mouse_t m <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  29</span>  <span class="k1">float</span> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span>, z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  30</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">void</span> process_keyboard<span class="k2">(</span>player_t<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  33</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">;</span>
<span class="number">  34</span>  <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span>  <span class="c">//move the player</span>
<span class="number">  37</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>A<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  38</span>    p.x <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>    p.z <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>  <span class="k2">}</span>
<span class="number">  41</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>D<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  42</span>    p.x <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>    p.z <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>  <span class="k2">}</span>
<span class="number">  45</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>W<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  46</span>    p.z <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>    p.x <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>  <span class="k2">}</span>
<span class="number">  49</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>S<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span>    p.z <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    p.x <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <span class="k2">}</span>
<span class="number">  53</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>SPACE<span class="k2">)</span><span class="k2">)</span>
<span class="number">  54</span>    p.y <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED<span class="k2">;</span>
<span class="number">  55</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>CAPSLOCK<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> KD<span class="k2">(</span>LSHIFT<span class="k2">)</span><span class="k2">)</span>
<span class="number">  56</span>    p.y <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED<span class="k2">;</span>
<span class="number">  57</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>ESCAPE<span class="k2">)</span><span class="k2">)</span>
<span class="number">  58</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">  59</span><span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  62</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">  63</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">  64</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">  65</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</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">  68</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</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">  70</span><span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  73</span>  init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">int</span> i, j<span class="k2">;</span>
<span class="number">  75</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>SCREEN_WIDTH, SCREEN_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>  <span class="k1">auto</span> q <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">  77</span>  <span class="k1">auto</span> fps <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="k3">/</span> <span class="n">60</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</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">  79</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> tra<span class="k2">;</span>
<span class="number">  80</span>  player_t p<span class="k2">;</span>
<span class="number">  81</span>  <span class="k1">auto</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DeansgateCondensed-Bold.ttf"</span>, <span class="n">64</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span><span class="c">//just a generic font for testing</span>
<span class="number">  82</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>q, <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>fps<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</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>q, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</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>q, <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">  85</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</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">  87</span>  <span class="k1">auto</span> image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"images/ground.jpeg"</span><span class="k2">)</span><span class="k2">;</span><span class="c">//random picture of some ground</span>
<span class="number">  88</span>  <span class="c">/*p.m.x = SCREEN_WIDTH / 2;</span>
<span class="number">  89</span><span class="c">  p.m.y = SCREEN_HEIGHT / 2;*/</span>
<span class="number">  90</span>  <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> cube<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  92</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,  <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  93</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  94</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  95</span>
<span class="number">  96</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,    <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  97</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  98</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number">  99</span>
<span class="number"> 100</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 101</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 102</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 103</span>
<span class="number"> 104</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 105</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 106</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 107</span>
<span class="number"> 108</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 109</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 110</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 111</span>
<span class="number"> 112</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 113</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 114</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 115</span>
<span class="number"> 116</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 117</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 118</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 119</span>
<span class="number"> 120</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 121</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 122</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 123</span>
<span class="number"> 124</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 125</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 126</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 127</span>
<span class="number"> 128</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 129</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 130</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 131</span>
<span class="number"> 132</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 133</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 134</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 135</span>
<span class="number"> 136</span>  <span class="k2">{</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 137</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 138</span>  <span class="k2">{</span><span class="n">1000</span>,<span class="k3">-</span><span class="n">1000</span>, <span class="n">1000</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 139</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 140</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> ground<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number"> 141</span>  <span class="k2">{</span> <span class="n">1000</span>,<span class="n">0</span>,<span class="n">1000</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 142</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1000</span>,<span class="n">0</span>,<span class="n">1000</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 143</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1000</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 144</span>
<span class="number"> 145</span>  <span class="k2">{</span> <span class="n">1000</span>,<span class="n">0</span>,<span class="n">1000</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 146</span>  <span class="k2">{</span> <span class="n">1000</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1000</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 147</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1000</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1000</span>,<span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 148</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 149</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 150</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>q, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>    <span class="k1">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 152</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number"> 153</span>      p.m.x <span class="k3">+</span><span class="k3">=</span> ev.mouse.dx<span class="k2">;</span>
<span class="number"> 154</span>      p.m.y <span class="k3">+</span><span class="k3">=</span> ev.mouse.dy<span class="k2">;</span>
<span class="number"> 155</span>      p.m.ax <span class="k3">=</span> p.m.x <span class="k3">/</span> MOUSE_SPEED<span class="k2">;</span><span class="c">//angle x: 1 rotation = 2*PI</span>
<span class="number"> 156</span>      p.m.ay <span class="k3">=</span> p.m.y <span class="k3">/</span> <span class="k3">-</span>MOUSE_SPEED<span class="k2">;</span><span class="c">//angle y: goes from -PI/2 to PI/2</span>
<span class="number"> 157</span>      <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>      <span class="k1">if</span> <span class="k2">(</span>p.m.ay <span class="k3">&gt;</span> PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 159</span>        p.m.ay <span class="k3">=</span> PI <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 160</span>        p.m.y <span class="k3">=</span> <span class="k2">(</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="k3">-</span>MOUSE_SPEED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>      <span class="k2">}</span>
<span class="number"> 162</span>      <span class="k1">if</span> <span class="k2">(</span>p.m.ay <span class="k3">&lt;</span> <span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 163</span>        p.m.ay <span class="k3">=</span> <span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 164</span>        p.m.y <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">-</span>PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k3">*</span><span class="k3">-</span>MOUSE_SPEED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 165</span>      <span class="k2">}</span>
<span class="number"> 166</span><span class="c">//------------------------------------------------</span>
<span class="number"> 167</span><span class="c">//----------calculate camera rotation-------------</span>
<span class="number"> 168</span><span class="c">//------------------------------------------------</span>
<span class="number"> 169</span><span class="c">//-------------how do i do this?------------------</span>
<span class="number"> 170</span><span class="c">//------------------------------------------------</span>
<span class="number"> 171</span>      p.m.cax <span class="k3">=</span> p.m.ay<span class="k2">;</span>
<span class="number"> 172</span>      p.m.cay <span class="k3">=</span> p.m.ax<span class="k2">;</span>
<span class="number"> 173</span>      p.m.caz <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//ev.mouse.z / 100.;</span>
<span class="number"> 174</span>
<span class="number"> 175</span>      <span class="c">/*p.m.cax = cos(p.m.ax) * cos(p.m.ay)*PI;</span>
<span class="number"> 176</span><span class="c">      p.m.cay = sin(p.m.ay)*PI;</span>
<span class="number"> 177</span><span class="c">      p.m.caz = sin(p.m.ax) * cos(p.m.ay)*PI;*/</span>
<span class="number"> 178</span>
<span class="number"> 179</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 180</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 181</span>      <span class="c">//key input</span>
<span class="number"> 182</span>      process_keyboard<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>
<span class="number"> 184</span>      <span class="c">//clear display</span>
<span class="number"> 185</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 186</span>      al_clear_depth_buffer<span class="k2">(</span><span class="n">10000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>
<span class="number"> 188</span>      <span class="c">//draw the normalized angles (floating text around you) (2*PI = 1)</span>
<span class="number"> 189</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 190</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="k3">-</span>p.x, <span class="k3">-</span>p.y, <span class="k3">-</span>p.z <span class="k3">-</span> <span class="n">2000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>      LOOP<span class="k2">(</span>j, <span class="n">12</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 193</span>        al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, PI <span class="k3">/</span> <span class="n">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>        LOOP<span class="k2">(</span>i, <span class="n">12</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 195</span>          al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, PI <span class="k3">/</span> <span class="n">6</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>          al_draw_multiline_textf<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">0</span>, <span class="n">1</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span>, <span class="n">50</span>, <span class="n">50</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="s">"ax_%.4f ay_%.4f cax_%.4f cay_%.4f caz_%.4f"</span>, p.m.ax <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.ay <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.cax <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.cay <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.caz <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>        <span class="k2">}</span>
<span class="number"> 199</span>      <span class="k2">}</span>
<span class="number"> 200</span>      <span class="c">//draw the ground</span>
<span class="number"> 201</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      al_scale_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">10</span>, <span class="n">0</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">6000</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>ground, NULL, image, <span class="n">0</span>, <span class="n">6</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>
<span class="number"> 207</span>      <span class="c">//draw the 5 floating cubes</span>
<span class="number"> 208</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <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"> 210</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 212</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">5000</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">5000</span>, <span class="k3">-</span><span class="n">5000</span>, <span class="n">5000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="k3">-</span><span class="n">5000</span>, <span class="k3">-</span><span class="n">5000</span>, <span class="n">5000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 220</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="k3">-</span><span class="n">5000</span>, <span class="n">5000</span>, <span class="n">5000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 223</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">)</span> <span class="k3">/</span> <span class="k1">sizeof</span><span class="k2">(</span>cube<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span>
<span class="number"> 225</span>      <span class="c">//do the camera transforms</span>
<span class="number"> 226</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, p.x, p.y, p.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, p.m.cax<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, p.m.cay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>      al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, p.m.caz<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>      al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="k3">-</span>SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, <span class="k3">-</span>SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span>, <span class="n">1000</span>, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span>, <span class="n">100000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>      al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>
<span class="number"> 234</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"> 235</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 236</span>    <span class="k2">}</span>
<span class="number"> 237</span>  <span class="k2">}</span>
<span class="number"> 238</span><span class="k2">}</span>
</div></div><p>


(and i also cant manage to figure out how to draw a &#39;hud&#39; or just simple things right on the display after the transformations)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Mon, 30 Jul 2018 01:26:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have to understand there are two matrices involved. The projection matrix, and the view matrix. You&#39;re mixing the two, and you still aren&#39;t even trying to do what I showed you in the other thread.</p><p><a href="https://www.allegro.cc/forums/thread/617512/1038669#target">https://www.allegro.cc/forums/thread/617512/1038669#target</a></p><p>Also, you are mixing 2D and 3D drawing without resetting your projection matrices properly.</p><p>You should read over the manual entry for transformations.</p><p><a href="https://liballeg.org/a5docs/trunk/transformations.html">https://liballeg.org/a5docs/trunk/transformations.html</a></p><p>Specifically, look at the docs for al_build_camera_transform , al_orthographic_transform, and al_perspective_transform.</p><p>For 2D you use the orthographic transform for the projection matrix. For 3D you use the perspective transform for the projection matrix. For 2D view matrix, all you need is the identity. For 3D, you need to apply a camera transform to the view matrix.</p><p>First, see <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> for the difference between 2D and 3D projection matrices.</p><p>Second, see <a href="https://liballeg.org/a5docs/trunk/transformations.html#al_build_camera_transform">https://liballeg.org/a5docs/trunk/transformations.html#al_build_camera_transform</a> for how to set up your camera. As I told you before, you need to use a forward, right, and up vector to define the orientation of the camera. You also need a position for the camera. Then the lookAt parameter becomes camera.position + forward_vector.</p><p><b>EDIT</b><br />You can also &#39;cheat&#39; and calculate the look vector yourself using a little trig.</p><p>The compass heading becomes the rotation around the y-axis on the xz plane.
</p><pre>
      +Y   -Z
       |   /
       |  /
       | /
-X_____|/____ +X
      /|
     / |
    /  |
  +Z  -Y
</pre><p>
And then the pitch become the rotation around the right vector.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">double</span> heading <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span><span class="k3">-</span>dz,dx<span class="k2">)</span><span class="k2">;</span>
<span class="k1">double</span> pitch <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_40.html" target="_blank">acos</a><span class="k2">(</span><span class="k2">(</span>dist<span class="k2">(</span>xz<span class="k2">)</span><span class="k3">/</span>dist<span class="k2">(</span>xyz<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
I think that&#39;s right but I&#39;m tired.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 30 Jul 2018 21:48:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK so; I have majorly rewritten how everything about my perspective/transformation/drawing works. I now first generate 1 mesh, where everything 3d is stored and then draw all of that at once to the screen. 2d operations work now too and i think i have gotten a much better grasp on how the perspective transformations work. i now also use the camera transformation. the only thing that doesent work now is: the camera. I think I&#39;m using the camera correctly, but apparently I&#39;m not. and if you see anything I&#39;m doing wrong now with the transformations, pleas tell me.</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_font.h&gt;</span>
<span class="number">   3</span><span class="p">#include&lt;allegro5\allegro_ttf.h&gt;</span>
<span class="number">   4</span><span class="p">#include&lt;allegro5\allegro_color.h&gt;</span>
<span class="number">   5</span><span class="p">#include&lt;allegro5\allegro_primitives.h&gt;</span>
<span class="number">   6</span><span class="p">#include&lt;allegro5\allegro_image.h&gt;</span>
<span class="number">   7</span><span class="p">#include&lt;cmath&gt;</span>
<span class="number">   8</span><span class="p">#include&lt;cstdlib&gt;</span>
<span class="number">   9</span><span class="p">#include&lt;iostream&gt;</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="p">#define FOV  (PI/2) //90 degrees (vertical not horizontal)</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="p">#define KD(keycode)  al_key_down(&amp;key,ALLEGRO_KEY_##keycode)</span>
<span class="number">  14</span><span class="p">#define LOOP(var,max) for(var=0;var&lt;max;++var)</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="p">#define PI  3.141592653589793238462643</span>
<span class="number">  17</span><span class="p">#define SCREEN_WIDTH  (100 * 16)</span>
<span class="number">  18</span><span class="p">#define SCREEN_HEIGHT  (100 * 9)</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="p">#define MOVE_SPEED  .03</span>
<span class="number">  21</span><span class="p">#define MOUSE_SPEED  500. //higher = lower speed</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number">  24</span>  <span class="k1">int</span> x, y<span class="k2">;</span><span class="c">//xy location of mouse</span>
<span class="number">  25</span>  <span class="k1">float</span> ax, ay<span class="k2">;</span><span class="c">//xy angle of mouse</span>
<span class="number">  26</span>  <span class="k1">float</span> cax, cay, caz<span class="k2">;</span><span class="c">//camera "location"</span>
<span class="number">  27</span><span class="k2">}</span>mouse_t<span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span><span class="k1">class</span> player_t <span class="k2">{</span>
<span class="number">  30</span>public:
<span class="number">  31</span>  mouse_t m <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">float</span> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span>, z <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  33</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="k1">class</span> mesh_t <span class="k2">{</span>
<span class="number">  36</span>public:
<span class="number">  37</span>  <span class="k1">size_t</span> size_of_mesh <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  38</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> <span class="k3">*</span> mesh <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  39</span>  <span class="k1">void</span> add_to_mesh_transform<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span>add, <span class="k1">size_t</span> amount_of_vertices, <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a><span class="k3">*</span>transform<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  40</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span>v <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k2">)</span><span class="k3">*</span>amount_of_vertices<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>    <span class="k1">if</span> <span class="k2">(</span>v <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  42</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"EVERYTHING HAS FAILED! ABORT NOW OR COMPUTER WILL EXPLODE!"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number">  43</span>      <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>    <span class="k2">}</span>
<span class="number">  46</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span>v, add, amount_of_vertices <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>    <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  48</span>    LOOP<span class="k2">(</span>i, amount_of_vertices<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  49</span>      al_transform_coordinates_3d<span class="k2">(</span>transform, <span class="k3">&amp;</span>v<span class="k2">[</span>i<span class="k2">]</span>.x, <span class="k3">&amp;</span>v<span class="k2">[</span>i<span class="k2">]</span>.y, <span class="k3">&amp;</span>v<span class="k2">[</span>i<span class="k2">]</span>.z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <span class="k2">}</span>
<span class="number">  51</span>    mesh <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_648.html" target="_blank">realloc</a><span class="k2">(</span>mesh, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>amount_of_vertices <span class="k3">+</span> size_of_mesh<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>mesh<span class="k2">[</span>size_of_mesh<span class="k2">]</span><span class="k2">)</span>, v, amount_of_vertices <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>    size_of_mesh <span class="k3">+</span><span class="k3">=</span> amount_of_vertices<span class="k2">;</span>
<span class="number">  54</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>v<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>  <span class="k2">}</span>
<span class="number">  56</span>  <span class="k1">void</span> reset_mesh<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  57</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>mesh<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>    mesh <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  59</span>    size_of_mesh <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  60</span>  <span class="k2">}</span>
<span class="number">  61</span>  <span class="c">//size_t size() {</span>
<span class="number">  62</span>  <span class="c">//  return size_of_mesh;</span>
<span class="number">  63</span>  <span class="c">//}</span>
<span class="number">  64</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span><span class="k1">void</span> process_keyboard<span class="k2">(</span>player_t<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  67</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">;</span>
<span class="number">  68</span>  <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</span>  <span class="c">//move the player</span>
<span class="number">  71</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>A<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>    p.x <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>    p.z <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k2">}</span>
<span class="number">  75</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>D<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  76</span>    p.x <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>    p.z <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>  <span class="k2">}</span>
<span class="number">  79</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>W<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  80</span>    p.z <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    p.x <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>  <span class="k2">}</span>
<span class="number">  83</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>S<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  84</span>    p.z <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>    p.x <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED <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="k3">-</span>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>  <span class="k2">}</span>
<span class="number">  87</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>SPACE<span class="k2">)</span><span class="k2">)</span>
<span class="number">  88</span>    p.y <span class="k3">+</span><span class="k3">=</span> MOVE_SPEED<span class="k2">;</span>
<span class="number">  89</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>CAPSLOCK<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> KD<span class="k2">(</span>LSHIFT<span class="k2">)</span><span class="k2">)</span>
<span class="number">  90</span>    p.y <span class="k3">-</span><span class="k3">=</span> MOVE_SPEED<span class="k2">;</span>
<span class="number">  91</span>  <span class="k1">if</span> <span class="k2">(</span>KD<span class="k2">(</span>ESCAPE<span class="k2">)</span><span class="k2">)</span>
<span class="number">  92</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">  93</span><span class="k2">}</span>
<span class="number">  94</span>
<span class="number">  95</span><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  96</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">  97</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">  98</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">  99</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</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"> 102</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</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"> 104</span><span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span><span class="k1">void</span> setup_3d_projection<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> projection<span class="k2">;</span>
<span class="number"> 108</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"> 109</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>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>  <span class="k1">double</span> fov <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="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>  al_perspective_transform<span class="k2">(</span><span class="k3">&amp;</span>projection, <span class="k3">-</span><span class="n">1</span> <span class="k3">*</span> SCREEN_WIDTH <span class="k3">/</span> SCREEN_HEIGHT <span class="k3">*</span> fov, fov, <span class="n">1</span>, fov<span class="k3">*</span>SCREEN_WIDTH <span class="k3">/</span> SCREEN_HEIGHT, <span class="k3">-</span>fov, <span class="n">1000</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>  al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>projection<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span><span class="k2">}</span>
<span class="number"> 114</span>
<span class="number"> 115</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 116</span>  init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>  <span class="k1">int</span> i, j<span class="k2">;</span>
<span class="number"> 118</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>SCREEN_WIDTH, SCREEN_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>  <span class="k1">auto</span> q <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"> 120</span>  <span class="k1">auto</span> fps <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="k3">/</span> <span class="n">60</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>  mesh_t mesh<span class="k2">;</span>
<span class="number"> 122</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"> 123</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> tra, cam, curprotra<span class="k2">;</span>
<span class="number"> 124</span>  player_t p<span class="k2">;</span>
<span class="number"> 125</span>  <span class="k1">auto</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DeansgateCondensed-Bold.ttf"</span>, <span class="n">16</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span><span class="c">//just a generic font for testing</span>
<span class="number"> 126</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>q, <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>fps<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</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>q, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</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>q, <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"> 129</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>fps<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>  <span class="k1">auto</span> image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"images/ground.jpeg"</span><span class="k2">)</span><span class="k2">;</span><span class="c">//random picture of some ground</span>
<span class="number"> 131</span>  <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> cube<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number"> 133</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,  <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 134</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 135</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 136</span>
<span class="number"> 137</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,    <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 138</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 139</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 140</span>
<span class="number"> 141</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 142</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 143</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 144</span>
<span class="number"> 145</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 146</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 147</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 148</span>
<span class="number"> 149</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 150</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 151</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 152</span>
<span class="number"> 153</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 154</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 155</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 156</span>
<span class="number"> 157</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 158</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 159</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 160</span>
<span class="number"> 161</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 162</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 163</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 164</span>
<span class="number"> 165</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 166</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 167</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 168</span>
<span class="number"> 169</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 170</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 171</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 172</span>
<span class="number"> 173</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 174</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 175</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 176</span>
<span class="number"> 177</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 178</span>  <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 179</span>  <span class="k2">{</span><span class="n">1</span>.<span class="n">0f</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>,   <span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">}</span>,
<span class="number"> 180</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 181</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> ground<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number"> 182</span>  <span class="k2">{</span> <span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="n">1</span>.<span class="n">0f</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 183</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 184</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 185</span>
<span class="number"> 186</span>  <span class="k2">{</span> <span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="n">1</span>.<span class="n">0f</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>image<span class="k2">)</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 187</span>  <span class="k2">{</span> <span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>image<span class="k2">)</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 188</span>  <span class="k2">{</span> <span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span>,<span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span> <span class="k2">}</span>,
<span class="number"> 189</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 190</span>
<span class="number"> 191</span>  <span class="c">//initialize the mesh</span>
<span class="number"> 192</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>  mesh.add_to_mesh_transform<span class="k2">(</span>cube, std::size<span class="k2">(</span>cube<span class="k2">)</span>, <span class="k3">&amp;</span>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>  al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">3</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>  mesh.add_to_mesh_transform<span class="k2">(</span>cube, std::size<span class="k2">(</span>cube<span class="k2">)</span>, <span class="k3">&amp;</span>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>  al_scale_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">10</span>, <span class="n">1</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>  al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>tra, <span class="n">0</span>, <span class="n">6</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>  mesh.add_to_mesh_transform<span class="k2">(</span>ground, std::size<span class="k2">(</span>ground<span class="k2">)</span>, <span class="k3">&amp;</span>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>
<span class="number"> 201</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</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>q, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>    <span class="k1">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 204</span>    <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number"> 205</span>      p.m.x <span class="k3">+</span><span class="k3">=</span> ev.mouse.dx<span class="k2">;</span>
<span class="number"> 206</span>      p.m.y <span class="k3">+</span><span class="k3">=</span> ev.mouse.dy<span class="k2">;</span>
<span class="number"> 207</span>      p.m.ax <span class="k3">=</span> p.m.x <span class="k3">/</span> MOUSE_SPEED<span class="k2">;</span><span class="c">//angle x: 1 rotation = 2*PI</span>
<span class="number"> 208</span>      p.m.ay <span class="k3">=</span> p.m.y <span class="k3">/</span> <span class="k3">-</span>MOUSE_SPEED<span class="k2">;</span><span class="c">//angle y: goes from -PI/2 to PI/2</span>
<span class="number"> 209</span>      <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display, SCREEN_WIDTH <span class="k3">/</span> <span class="n">2</span>, SCREEN_HEIGHT <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>      <span class="c">/*if (p.m.ay &gt; PI / 2) {</span>
<span class="number"> 211</span><span class="c">        p.m.ay = PI / 2;</span>
<span class="number"> 212</span><span class="c">        p.m.y = ((PI / 2)*-MOUSE_SPEED);</span>
<span class="number"> 213</span><span class="c">      }</span>
<span class="number"> 214</span><span class="c">      if (p.m.ay &lt; -PI / 2) {</span>
<span class="number"> 215</span><span class="c">        p.m.ay = -PI / 2;</span>
<span class="number"> 216</span><span class="c">        p.m.y = ((-PI / 2)*-MOUSE_SPEED);</span>
<span class="number"> 217</span><span class="c">      }*/</span>
<span class="number"> 218</span>
<span class="number"> 219</span><span class="c">//--------------camera calculations----------------</span>
<span class="number"> 220</span>      p.m.cax <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ay<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>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>      p.m.cay <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>p.m.ay<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>p.m.ax<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>      p.m.caz <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>p.m.ay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 223</span>
<span class="number"> 224</span>      std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"cax="</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> p.m.cax <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">'\t'</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"cay="</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> p.m.cay <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">'\t'</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"caz="</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> p.m.caz <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">'\t'</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 225</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 226</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 227</span>      <span class="c">//key input</span>
<span class="number"> 228</span>      process_keyboard<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>
<span class="number"> 230</span>      curprotra <span class="k3">=</span> <span class="k3">*</span>al_get_current_projection_transform<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>      setup_3d_projection<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>
<span class="number"> 233</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</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"> 235</span>      al_clear_depth_buffer<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 236</span>
<span class="number"> 237</span><span class="c">//  ----------------camera transform---------------</span>
<span class="number"> 238</span>      al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>cam, p.x, p.y, p.z,
<span class="number"> 239</span>        p.x <span class="k3">+</span> p.m.cax, p.y <span class="k3">+</span> p.m.cay, p.z <span class="k3">+</span> p.m.caz,
<span class="number"> 240</span>        <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 241</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"> 242</span>      <span class="c">//draw 3d things</span>
<span class="number"> 243</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>mesh.mesh, NULL, NULL, <span class="n">0</span>, mesh.size_of_mesh, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>
<span class="number"> 245</span>      <span class="c">//restore projection</span>
<span class="number"> 246</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</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>tra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>      al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>curprotra<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>      al_set_render_state<span class="k2">(</span>ALLEGRO_DEPTH_TEST, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>
<span class="number"> 251</span>      <span class="c">//draw 2d things</span>
<span class="number"> 252</span>      al_draw_multiline_textf<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">0</span>.<span class="n">8</span>, <span class="n">0</span>.<span class="n">1</span>, <span class="n">0</span>.<span class="n">2</span><span class="k2">)</span>, <span class="n">50</span>, <span class="n">50</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="s">"normalized(2PI=1) ax_%.4f ay_%.4f not_normalized cax_%.4f cay_%.4f caz_%.4f"</span>, p.m.ax <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.ay <span class="k3">/</span> PI <span class="k3">/</span> <span class="n">2</span>, p.m.cax, p.m.cay, p.m.caz<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 253</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"> 254</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 255</span>    <span class="k2">}</span>
<span class="number"> 256</span>  <span class="k2">}</span>
<span class="number"> 257</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Thu, 02 Aug 2018 06:46:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think your formula is just a bit off. You have z and y reversed. It should be :</p><div class="source-code snippet"><div class="inner"><pre>   fw.x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>pitch<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>yaw<span class="k2">)</span><span class="k2">;</span>
   fw.z <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>pitch<span class="k2">)</span><span class="k3">*</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>yaw<span class="k2">)</span><span class="k2">;</span>
   fw.y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>pitch<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

<span class="remote-thumbnail"><span class="json">{"name":"611674","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/4\/94b598fff0562e56a5c7bf072c62b984.png","w":800,"h":600,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/4\/94b598fff0562e56a5c7bf072c62b984"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/9/4/94b598fff0562e56a5c7bf072c62b984-240.jpg" alt="611674" width="240" height="180" /></span></p><p>Or you can build your forward vector using transforms :
</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> RebuildTransform<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>      fw <span class="k3">=</span> Vec<span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>      rt <span class="k3">=</span> Vec<span class="k2">(</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>      up <span class="k3">=</span> Vec<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>      <span class="c">/// Apply yaw</span>
<span class="number">  6</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t1<span class="k2">;</span>
<span class="number">  7</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>t1<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>      <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , up.x , up.y , up.z , yaw<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>      <a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , <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"> 10</span>      <a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , <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>      <span class="c">/// Apply pitch</span>
<span class="number"> 13</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>t1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , rt.x , rt.y , rt.z , yaw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      <a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , <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>      <a href="http://www.allegro.cc/manual/al_transform_coordinates"><span class="a">al_transform_coordinates</span></a><span class="k2">(</span><span class="k3">&amp;</span>t1 , <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"> 17</span>      
<span class="number"> 18</span>      <span class="c">/// Apply roll</span>
<span class="number"> 19</span>      <span class="c">//...</span>
<span class="number"> 20</span>      Vec look <span class="k3">=</span> pos <span class="k3">+</span> fw<span class="k2">;</span>
<span class="number"> 21</span>      al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>t , pos.x , pos.y , pos.z , look.x , look.y , look.z , up.x , up.y , up.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 02 Aug 2018 17:06:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok thank you! you&#39;ve been a great help in all of this. there is just 1 more thing id like to figure out. in my code right after i use the camera transformation, i draw the whole map mesh. now i would like to also draw other things and use transformations on them. but if i trie to do that, it doesent really work. the things i draw after the new transformations move with the camera rotation. how would i fix that? 
</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">//  ----------------camera transform---------------</span>
<span class="number">  2</span>      al_build_camera_transform<span class="k2">(</span><span class="k3">&amp;</span>cam, p.x, p.y, p.z,
<span class="number">  3</span>        p.x <span class="k3">+</span> p.m.cax, p.y <span class="k3">+</span> p.m.cay, p.z <span class="k3">+</span> p.m.caz,
<span class="number">  4</span>        <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</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">  6</span>
<span class="number">  7</span>      <span class="c">//draw 3d things</span>
<span class="number">  8</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>mesh.mesh, NULL, NULL, <span class="n">0</span>, mesh.size_of_mesh, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span><span class="c">//drawing the mesh as before</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="c">//now draw an extra cube 3 units below 0,0,0</span>
<span class="number"> 11</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> copy_of_cam, transform<span class="k2">;</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>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>      <a href="http://www.allegro.cc/manual/al_copy_transform"><span class="a">al_copy_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>copy_of_cam, <span class="k3">&amp;</span>cam<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>      al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>transform,<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="k2">;</span>
<span class="number"> 16</span>      <a href="http://www.allegro.cc/manual/al_compose_transform"><span class="a">al_compose_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>copy_of_cam, <span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>      <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>copy_of_cam<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>      <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>cube, NULL, NULL, <span class="n">0</span>, std::size<span class="k2">(</span>cube<span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>      <span class="c">//restore projection</span>
<span class="number"> 22</span>      <span class="c">//...</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Fri, 03 Aug 2018 03:08:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to transform your objects first, before applying the camera transform.</p><p>Do the same thing, but swap the order.</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> t<span class="k2">;</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>
<a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t , <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="k2">;</span>
<a href="http://www.allegro.cc/manual/al_compose_transform"><span class="a">al_compose_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t , <span class="k3">&amp;</span>cam<span class="k2">)</span><span class="k2">;</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>t<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 03 Aug 2018 17:37:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thank you! you&#39;ve been a great help!<br />if anybody wants the full source code:<a href="https://github.com/dontknow3d/fps-camera-using-allegro-5">https://github.com/dontknow3d/fps-camera-using-allegro-5</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DontKnow3D)</author>
		<pubDate>Fri, 03 Aug 2018 19:44:17 +0000</pubDate>
	</item>
</rss>
