<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Help rendering texture on AllegroGL</title>
		<link>http://www.allegro.cc/forums/view/587826</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 03 Oct 2006 17:02:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Fellows,</p><p>I´m recently trying to modify an allegroGL example </p><p>- excamera</p><p>void draw_field() {</p><p>	int i, j;<br />	<br />	for (j = 0; j &lt; GRID_SIZE; j++) {<br />		for (i = 0; i &lt; GRID_SIZE; i++) {<br />			glPushMatrix();<br />			glTranslatef(i * 2 - GRID_SIZE + 1, -2, j * 2 - GRID_SIZE + 1);<br />			<br />			if ((i + j) &amp; 1) {<br />				glColor3ub(255, 255, 0);<br />			}<br />			else {<br />				glColor3ub(0, 255, 0);<br />			}</p><p>			glBegin(GL_QUADS);<br />				glVertex3f(-1, 0, -1);<br />				glVertex3f(-1, 0,  1);<br />				glVertex3f( 1, 0,  1);<br />				glVertex3f( 1, 0, -1);<br />			glEnd();<br />			glPopMatrix();<br />		}<br />	}<br />}</p><p>i was following this tutorial  <a href="http://pixwiki.bafsoft.com/mags/7/articles/agl-b/agl08.html">http://pixwiki.bafsoft.com/mags/7/articles/agl-b/agl08.html</a> , that renders a texture with allegroGL in excamera example.</p><p>But this code isn´t working. </p><p>the floor gets all white</p><p>In my opinion the error might be related to the fact that in tutorial they use glVertex2f(...); and in our excamera we are using glVertex3f, but yet<br />i can´t realize how does it work nor even how to handle it. Please any help would be welcome, thx for your attention.</p><p><img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (vrgvrgvrg)</author>
		<pubDate>Mon, 02 Oct 2006 03:47:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>White where a texture should be indicates that the texture wasn&#39;t properly loaded or selected. So, what exactly does your drawing code look like? It should be something like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//load texture into video ram, store an ID to address it later...</span>
SlateTex <span class="k3">=</span> allegro_gl_make_texture<span class="k2">(</span>slate_bmp<span class="k2">)</span><span class="k2">;</span>

<span class="c">//before drawing bind texture using the ID we got earlier</span>
glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, SlateTex<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Also texturing requires a bit of setup to enable it. So maybe this will help you out, maybe you will need to post some more code.</p><p>BTW, welcome to the forums, and please, oh please, use mock-up for your code. <a href="http://www.allegro.cc/mockup.html">Mock-up help</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (razor)</author>
		<pubDate>Mon, 02 Oct 2006 21:41:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All of the 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;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;alleggl.h&gt;</span>
<span class="number">   6</span><span class="p">#ifdef ALLEGRO_MACOSX</span>
<span class="number">   7</span><span class="p">#include &lt;OpenGL/glu.h&gt;</span>
<span class="number">   8</span><span class="p">#else</span>
<span class="number">   9</span><span class="p">#include &lt;GL/glu.h&gt;</span>
<span class="number">  10</span><span class="p">#endif</span>
<span class="number">  11</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="c">/* Define M_PI in case the compiler doesn't */</span>
<span class="number">  14</span><span class="p">#ifndef M_PI</span>
<span class="number">  15</span>   <span class="p">#define M_PI   3.1415926535897932384626433832795</span>
<span class="number">  16</span><span class="p">#endif</span>
<span class="number">  17</span>
<span class="number">  18</span>GLuint SlateTex<span class="k2">;</span>
<span class="number">  19</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="c">/* Define a 3D vector type */</span>
<span class="number">  22</span><span class="k1">typedef</span> <span class="k1">struct</span> VECTOR <span class="k2">{</span>
<span class="number">  23</span>  <span class="k1">float</span> x, y, z<span class="k2">;</span>
<span class="number">  24</span><span class="k2">}</span> VECTOR<span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="c">/* display a nice 12x12 chessboard grid */</span>
<span class="number">  28</span><span class="p">#define GRID_SIZE    12</span>
<span class="number">  29</span>
<span class="number">  30</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="c">/* Parameters controlling the camera and projection state */</span>
<span class="number">  33</span><span class="k1">int</span> viewport_w <span class="k3">=</span> <span class="n">320</span><span class="k2">;</span>  <span class="c">/* Viewport Width  (pixels)  */</span>
<span class="number">  34</span><span class="k1">int</span> viewport_h <span class="k3">=</span> <span class="n">240</span><span class="k2">;</span>  <span class="c">/* Viewport Height (pixels)  */</span>
<span class="number">  35</span><span class="k1">int</span> fov <span class="k3">=</span> <span class="n">48</span><span class="k2">;</span>          <span class="c">/* Field of view   (degrees) */</span>
<span class="number">  36</span><span class="k1">float</span> aspect <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>      <span class="c">/* Aspect ratio              */</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="c">/* Define the camera </span>
<span class="number">  39</span><span class="c"> * We need: One position vector, and one orientation QUAT</span>
<span class="number">  40</span><span class="c"> */</span>
<span class="number">  41</span><span class="k1">struct</span> CAMERA <span class="k2">{</span>
<span class="number">  42</span>  VECTOR position<span class="k2">;</span>
<span class="number">  43</span>  <a href="http://www.allegro.cc/manual/QUAT" target="_blank"><span class="a">QUAT</span></a> orientation<span class="k2">;</span>
<span class="number">  44</span><span class="k2">}</span> camera<span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>
<span class="number">  47</span>
<span class="number">  48</span><span class="c">/* A simple font to display some info on screen */</span>
<span class="number">  49</span><a href="http://www.allegro.cc/manual/FONT" target="_blank"><span class="a">FONT</span></a> <span class="k3">*</span>agl_font<span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>
<span class="number">  52</span>
<span class="number">  53</span><span class="c">/* Sets up the viewport to designated values */</span>
<span class="number">  54</span><span class="k1">void</span> set_viewport<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  55</span>  glViewport<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> viewport_w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> viewport_h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>,
<span class="number">  56</span>             viewport_w, viewport_h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span><span class="k2">}</span>
<span class="number">  58</span>
<span class="number">  59</span>
<span class="number">  60</span>
<span class="number">  61</span><span class="c">/* Sets up the camera for displaying the world */</span>
<span class="number">  62</span><span class="k1">void</span> set_camera<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  63</span>  <span class="k1">float</span> theta<span class="k2">;</span>
<span class="number">  64</span>
<span class="number">  65</span>  <span class="c">/* First, we set up the projection matrix.</span>
<span class="number">  66</span><span class="c">   * Note that SCREEN_W / SCREEN_H = 1.333333, so we need to multiply the</span>
<span class="number">  67</span><span class="c">   * aspect ratio by that value so that the display doesn't get distorted.</span>
<span class="number">  68</span><span class="c">   */</span>
<span class="number">  69</span>  glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>  gluPerspective<span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>fov, aspect <span class="k3">*</span> <span class="n">1</span>.<span class="n">333333</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">120</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>  glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>  <span class="c">/* Macro to convert radians to degrees */</span>
<span class="number">  76</span>  <span class="p">#define RAD_2_DEG(x) ((x) * 180 / M_PI)</span>
<span class="number">  77</span>
<span class="number">  78</span>  <span class="c">/* Convert the QUAT to something OpenGL can understand </span>
<span class="number">  79</span><span class="c">   * We can use allegro_gl_apply_quat() here, but I'd just like</span>
<span class="number">  80</span><span class="c">   * to show how it can be done with regular GL code.</span>
<span class="number">  81</span><span class="c">   *</span>
<span class="number">  82</span><span class="c">   * Since we're working with the camera, we have to rotate first,</span>
<span class="number">  83</span><span class="c">   * and then translate. Objects are done the other way around.</span>
<span class="number">  84</span><span class="c">   */</span>
<span class="number">  85</span>  theta <span class="k3">=</span> RAD_2_DEG<span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_40.html" target="_blank">acos</a><span class="k2">(</span>camera.orientation.w<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>  <span class="k1">if</span> <span class="k2">(</span>camera.orientation.w <span class="k3">&lt;</span> <span class="n">1</span>.<span class="n">0f</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> camera.orientation.w <span class="k3">&gt;</span> <span class="k3">-</span><span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>    glRotatef<span class="k2">(</span>theta, camera.orientation.x, camera.orientation.y,
<span class="number">  88</span>      camera.orientation.z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>  <span class="k2">}</span>
<span class="number">  90</span>
<span class="number">  91</span>  glTranslatef<span class="k2">(</span><span class="k3">-</span>camera.position.x, <span class="k3">-</span>camera.position.y, <span class="k3">-</span>camera.position.z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>  <span class="p">#undef RAD_2_DEG</span>
<span class="number">  94</span><span class="k2">}</span>
<span class="number">  95</span>
<span class="number">  96</span>
<span class="number">  97</span>
<span class="number">  98</span><span class="c">/* Draw the (simple) world </span>
<span class="number">  99</span><span class="c"> * Notice how the camera doesn't affect the positioning.</span>
<span class="number"> 100</span><span class="c"> */</span>
<span class="number"> 101</span><span class="k1">void</span> draw_field<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 102</span>
<span class="number"> 103</span>  <span class="k1">int</span> i, j<span class="k2">;</span>
<span class="number"> 104</span>  
<span class="number"> 105</span>  <span class="k1">for</span> <span class="k2">(</span>j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> GRID_SIZE<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 106</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> GRID_SIZE<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 107</span>      glPushMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>      glTranslatef<span class="k2">(</span>i <span class="k3">*</span> <span class="n">2</span> <span class="k3">-</span> GRID_SIZE <span class="k3">+</span> <span class="n">1</span>, <span class="k3">-</span><span class="n">2</span>, j <span class="k3">*</span> <span class="n">2</span> <span class="k3">-</span> GRID_SIZE <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>      
<span class="number"> 110</span>       glBindTexture<span class="k2">(</span>GL_TEXTURE_2D,SlateTex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>        
<span class="number"> 112</span>           glClear<span class="k2">(</span>GL_COLOR_BUFFER_BIT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>
<span class="number"> 114</span>      glBegin<span class="k2">(</span>GL_QUADS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>      
<span class="number"> 116</span>      
<span class="number"> 117</span>               
<span class="number"> 118</span>                 glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">1</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"> 119</span>         glVertex3f<span class="k2">(</span><span class="k3">-</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"> 120</span>           glVertex3f<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"> 121</span>         glVertex3f<span class="k2">(</span> <span class="n">1</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"> 122</span>        
<span class="number"> 123</span>      glEnd<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>      glPopMatrix<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>    <span class="k2">}</span>
<span class="number"> 126</span>  <span class="k2">}</span>
<span class="number"> 127</span><span class="k2">}</span>
<span class="number"> 128</span>
<span class="number"> 129</span>
<span class="number"> 130</span>
<span class="number"> 131</span><span class="c">/* For display, we'd like to convert the QUAT back to heading, pitch and roll</span>
<span class="number"> 132</span><span class="c"> * These don't serve any purpose but to make it look human readable.</span>
<span class="number"> 133</span><span class="c"> * Note: Produces incorrect results.</span>
<span class="number"> 134</span><span class="c"> */</span>
<span class="number"> 135</span><span class="k1">void</span> convert_quat<span class="k2">(</span><a href="http://www.allegro.cc/manual/QUAT" target="_blank"><span class="a">QUAT</span></a> <span class="k3">*</span>q, <span class="k1">float</span> <span class="k3">*</span>heading, <span class="k1">float</span> <span class="k3">*</span>pitch, <span class="k1">float</span> <span class="k3">*</span>roll<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 136</span>  <a href="http://www.allegro.cc/manual/MATRIX_f" target="_blank"><span class="a">MATRIX_f</span></a> matrix<span class="k2">;</span>
<span class="number"> 137</span>  <a href="http://www.allegro.cc/manual/quat_to_matrix" target="_blank"><span class="a">quat_to_matrix</span></a><span class="k2">(</span>q, <span class="k3">&amp;</span>matrix<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>  
<span class="number"> 139</span>  <span class="k3">*</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>matrix.v<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, matrix.v<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  <span class="k3">*</span>pitch   <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_46.html" target="_blank">asin</a><span class="k2">(</span>matrix.v<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>  <span class="k3">*</span>roll    <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>matrix.v<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, matrix.v<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span><span class="k2">}</span>
<span class="number"> 143</span>
<span class="number"> 144</span>
<span class="number"> 145</span>
<span class="number"> 146</span><span class="c">/* Draws the overlay over the field. The position of the overlay is</span>
<span class="number"> 147</span><span class="c"> * independent of the camera.</span>
<span class="number"> 148</span><span class="c"> */</span>
<span class="number"> 149</span><span class="k1">void</span> draw_overlay<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 150</span>  <span class="k1">float</span> heading, pitch, roll<span class="k2">;</span>
<span class="number"> 151</span>  <span class="k1">int</span> color<span class="k2">;</span>
<span class="number"> 152</span>  VECTOR v<span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>  <span class="c">/* Set up the viewport so that it takes up the whole screen */</span>
<span class="number"> 155</span>  glViewport<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>
<span class="number"> 157</span>  <span class="c">/* Draw a line around the viewport */</span>
<span class="number"> 158</span>  allegro_gl_set_projection<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>
<span class="number"> 160</span>  glColor3ub<span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>  glDisable<span class="k2">(</span>GL_DEPTH_TEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>  
<span class="number"> 163</span>  glBegin<span class="k2">(</span>GL_LINE_LOOP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>    glVertex2i<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> viewport_w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> viewport_h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 165</span>    glVertex2i<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">+</span> viewport_w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span> <span class="k3">-</span> <span class="n">1</span>,
<span class="number"> 166</span>               <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> viewport_h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>    glVertex2i<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">+</span> viewport_w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span> <span class="k3">-</span> <span class="n">1</span>,
<span class="number"> 168</span>               <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">+</span> viewport_h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>    glVertex2i<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> viewport_w<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>,
<span class="number"> 170</span>               <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">+</span> viewport_h<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span>  glEnd<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 172</span>
<span class="number"> 173</span>  <span class="c">/* Overlay some text describing the current situation */</span>
<span class="number"> 174</span>  glBlendFunc<span class="k2">(</span>GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>  color <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 176</span>  glTranslatef<span class="k2">(</span><span class="k3">-</span><span class="n">0</span>.<span class="n">375</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">375</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>,  <span class="n">0</span>, <span class="n">0</span>, color,
<span class="number"> 178</span>                    <span class="s">"Viewport width:  %03d pix (w/W changes)"</span>, viewport_w<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>,  <span class="n">8</span>, <span class="n">0</span>, color,
<span class="number"> 180</span>                    <span class="s">"Viewport height: %03d pix (h/H changes)"</span>, viewport_h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">16</span>, <span class="n">0</span>, color,
<span class="number"> 182</span>                    <span class="s">"Field Of View:    %02d deg (f/F changes)"</span>, fov<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">24</span>, <span class="n">0</span>, color,
<span class="number"> 184</span>                    <span class="s">"Aspect Ratio:    %.2f   (a/A changes)"</span>, aspect<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">32</span>, <span class="n">0</span>, color,
<span class="number"> 186</span>                    <span class="s">"X position:     %+.2f (x/X changes)"</span>, camera.position.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">40</span>, <span class="n">0</span>, color,
<span class="number"> 188</span>                    <span class="s">"Y position:     %+.2f (y/Y changes)"</span>, camera.position.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">48</span>, <span class="n">0</span>, color,
<span class="number"> 190</span>                    <span class="s">"Z position:     %+.2f (z/Z changes)"</span>, camera.position.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>
<span class="number"> 192</span>  <span class="c">/* Convert the orientation QUAT into heading, pitch and roll to display */</span>
<span class="number"> 193</span>  convert_quat<span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>heading, <span class="k3">&amp;</span>pitch, <span class="k3">&amp;</span>roll<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>
<span class="number"> 195</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">56</span>, <span class="n">0</span>, color,
<span class="number"> 196</span>      <span class="s">"Heading:        %+.2f deg (left/right changes)"</span>, heading <span class="k3">*</span> <span class="n">180</span> <span class="k3">/</span> M_PI<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">64</span>, <span class="n">0</span>, color,
<span class="number"> 198</span>      <span class="s">"Pitch:          %+.2f deg (pgup/pgdn changes)"</span>, pitch <span class="k3">*</span> <span class="n">180</span> <span class="k3">/</span> M_PI<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">72</span>, <span class="n">0</span>, color,
<span class="number"> 200</span>      <span class="s">"Roll:           %+.2f deg (r/R changes)"</span>, roll <span class="k3">*</span> <span class="n">180</span> <span class="k3">/</span> M_PI<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>  
<span class="number"> 202</span>  <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>, <span class="k3">&amp;</span>v.x, <span class="k3">&amp;</span>v.y, <span class="k3">&amp;</span>v.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>  
<span class="number"> 204</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">80</span>, <span class="n">0</span>, color,
<span class="number"> 205</span>                   <span class="s">"Front Vector:    %.2f, %.2f, %.2f"</span>, v.x, v.y, v.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>  
<span class="number"> 207</span>  <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span>, <span class="k3">&amp;</span>v.x, <span class="k3">&amp;</span>v.y, <span class="k3">&amp;</span>v.z<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 208</span>  
<span class="number"> 209</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">88</span>, <span class="n">0</span>, color,
<span class="number"> 210</span>                    <span class="s">"Up Vector:       %.2f, %.2f, %.2f"</span>, v.x, v.y, v.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>  allegro_gl_printf<span class="k2">(</span>agl_font, <span class="n">0</span>, <span class="n">96</span>, <span class="n">0</span>, color,
<span class="number"> 212</span>            <span class="s">"QUAT:  %f, %f, %f, %f "</span>, camera.orientation.w,
<span class="number"> 213</span>            camera.orientation.x, camera.orientation.y, camera.orientation.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</span>  
<span class="number"> 215</span>  allegro_gl_unset_projection<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>  
<span class="number"> 217</span>  glBlendFunc<span class="k2">(</span>GL_ONE, GL_ZERO<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>  glEnable<span class="k2">(</span>GL_DEPTH_TEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</span><span class="k2">}</span>
<span class="number"> 220</span>
<span class="number"> 221</span>
<span class="number"> 222</span>
<span class="number"> 223</span><span class="c">/* draw everything */</span>
<span class="number"> 224</span><span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 225</span><span class="k2">{</span>
<span class="number"> 226</span>  set_viewport<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>  
<span class="number"> 228</span> glClearColor<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>  glClear<span class="k2">(</span>GL_COLOR_BUFFER_BIT <span class="k3">|</span> GL_DEPTH_BUFFER_BIT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>  
<span class="number"> 231</span>  set_camera<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>  
<span class="number"> 233</span>  draw_field<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>  
<span class="number"> 235</span>  draw_overlay<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 236</span>  
<span class="number"> 237</span>  glFlush<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>  
<span class="number"> 239</span>  allegro_gl_flip<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span><span class="k2">}</span>
<span class="number"> 241</span>
<span class="number"> 242</span>
<span class="number"> 243</span>
<span class="number"> 244</span><span class="c">/* deal with user input */</span>
<span class="number"> 245</span><span class="k1">void</span> process_input<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 246</span>
<span class="number"> 247</span>  <a href="http://www.allegro.cc/manual/QUAT" target="_blank"><span class="a">QUAT</span></a> q<span class="k2">;</span>
<span class="number"> 248</span>
<span class="number"> 249</span>  <a href="http://www.allegro.cc/manual/poll_keyboard" target="_blank"><span class="a">poll_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>
<span class="number"> 251</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 252</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 253</span>      <span class="k1">if</span> <span class="k2">(</span>viewport_w <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span>
<span class="number"> 254</span>        viewport_w <span class="k3">+</span><span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 255</span>    <span class="k2">}</span>
<span class="number"> 256</span>    <span class="k1">else</span> <span class="k2">{</span> 
<span class="number"> 257</span>      <span class="k1">if</span> <span class="k2">(</span>viewport_w <span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span>
<span class="number"> 258</span>        viewport_w <span class="k3">-</span><span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 259</span>    <span class="k2">}</span>
<span class="number"> 260</span>  <span class="k2">}</span>
<span class="number"> 261</span>
<span class="number"> 262</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_H<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 263</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 264</span>      <span class="k1">if</span> <span class="k2">(</span>viewport_h <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span>
<span class="number"> 265</span>        viewport_h <span class="k3">+</span><span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 266</span>    <span class="k2">}</span>
<span class="number"> 267</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 268</span>      <span class="k1">if</span> <span class="k2">(</span>viewport_h <span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span>
<span class="number"> 269</span>        viewport_h <span class="k3">-</span><span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 270</span>    <span class="k2">}</span>
<span class="number"> 271</span>  <span class="k2">}</span>
<span class="number"> 272</span>
<span class="number"> 273</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_X<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 274</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span>
<span class="number"> 275</span>      camera.position.x <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 276</span>    <span class="k1">else</span>
<span class="number"> 277</span>      camera.position.x <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 278</span>  <span class="k2">}</span>
<span class="number"> 279</span>
<span class="number"> 280</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_Y<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 281</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span>
<span class="number"> 282</span>      camera.position.y <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 283</span>    <span class="k1">else</span>
<span class="number"> 284</span>      camera.position.y <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 285</span>  <span class="k2">}</span>
<span class="number"> 286</span>
<span class="number"> 287</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_Z<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 288</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span>
<span class="number"> 289</span>      camera.position.z <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 290</span>    <span class="k1">else</span>
<span class="number"> 291</span>      camera.position.z <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 292</span>  <span class="k2">}</span>
<span class="number"> 293</span>  
<span class="number"> 294</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 295</span>    VECTOR front<span class="k2">;</span>
<span class="number"> 296</span>    <span class="c">/* Note: We use -1 here because Allegro's coordinate system</span>
<span class="number"> 297</span><span class="c">     * is slightly different than OpenGL's.</span>
<span class="number"> 298</span><span class="c">     */</span>
<span class="number"> 299</span>    <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>, <span class="k3">&amp;</span>front.x, <span class="k3">&amp;</span>front.y, <span class="k3">&amp;</span>front.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 300</span>    camera.position.x <span class="k3">+</span><span class="k3">=</span> front.x <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 301</span>    camera.position.y <span class="k3">+</span><span class="k3">=</span> front.y <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 302</span>    camera.position.z <span class="k3">+</span><span class="k3">=</span> front.z <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 303</span>  <span class="k2">}</span>
<span class="number"> 304</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 305</span>    VECTOR front<span class="k2">;</span>
<span class="number"> 306</span>    <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>, <span class="k3">&amp;</span>front.x, <span class="k3">&amp;</span>front.y, <span class="k3">&amp;</span>front.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 307</span>    camera.position.x <span class="k3">-</span><span class="k3">=</span> front.x <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 308</span>    camera.position.y <span class="k3">-</span><span class="k3">=</span> front.y <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 309</span>    camera.position.z <span class="k3">-</span><span class="k3">=</span> front.z <span class="k3">/</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 310</span>  <span class="k2">}</span>
<span class="number"> 311</span>
<span class="number"> 312</span>
<span class="number"> 313</span>  <span class="c">/* When turning right or left, we only want to change the heading.</span>
<span class="number"> 314</span><span class="c">   * That is, we only want to rotate around the absolute Y axis</span>
<span class="number"> 315</span><span class="c">   */</span>
<span class="number"> 316</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 317</span>    <a href="http://www.allegro.cc/manual/get_y_rotate_quat" target="_blank"><span class="a">get_y_rotate_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 318</span>    <a href="http://www.allegro.cc/manual/quat_mul" target="_blank"><span class="a">quat_mul</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>q, <span class="k3">&amp;</span>camera.orientation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 319</span>  <span class="k2">}</span>
<span class="number"> 320</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 321</span>    <a href="http://www.allegro.cc/manual/get_y_rotate_quat" target="_blank"><span class="a">get_y_rotate_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 322</span>    <a href="http://www.allegro.cc/manual/quat_mul" target="_blank"><span class="a">quat_mul</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>q, <span class="k3">&amp;</span>camera.orientation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 323</span>  <span class="k2">}</span>
<span class="number"> 324</span>
<span class="number"> 325</span>  <span class="c">/* However, when rolling or changing pitch, we do a rotation relative to</span>
<span class="number"> 326</span><span class="c">   * the current orientation of the camera. This is why we extract the</span>
<span class="number"> 327</span><span class="c">   * 'right' and 'front' vectors of the camera and apply a rotation on</span>
<span class="number"> 328</span><span class="c">   * those.</span>
<span class="number"> 329</span><span class="c">   */</span>
<span class="number"> 330</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_PGUP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 331</span>    VECTOR right<span class="k2">;</span>
<span class="number"> 332</span>    <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">&amp;</span>right.x, <span class="k3">&amp;</span>right.y, <span class="k3">&amp;</span>right.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 333</span>    <a href="http://www.allegro.cc/manual/get_vector_rotation_quat" target="_blank"><span class="a">get_vector_rotation_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, right.x, right.y, right.z, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 334</span>    <a href="http://www.allegro.cc/manual/quat_mul" target="_blank"><span class="a">quat_mul</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>q, <span class="k3">&amp;</span>camera.orientation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 335</span>  <span class="k2">}</span>
<span class="number"> 336</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_PGDN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 337</span>    VECTOR right<span class="k2">;</span>
<span class="number"> 338</span>    <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">&amp;</span>right.x, <span class="k3">&amp;</span>right.y, <span class="k3">&amp;</span>right.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 339</span>    <a href="http://www.allegro.cc/manual/get_vector_rotation_quat" target="_blank"><span class="a">get_vector_rotation_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, right.x, right.y, right.z, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 340</span>    <a href="http://www.allegro.cc/manual/quat_mul" target="_blank"><span class="a">quat_mul</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>q, <span class="k3">&amp;</span>camera.orientation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 341</span>  <span class="k2">}</span>
<span class="number"> 342</span>
<span class="number"> 343</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_R<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 344</span>    VECTOR front<span class="k2">;</span>
<span class="number"> 345</span>    <a href="http://www.allegro.cc/manual/apply_quat" target="_blank"><span class="a">apply_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="k3">&amp;</span>front.x, <span class="k3">&amp;</span>front.y, <span class="k3">&amp;</span>front.z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 346</span>
<span class="number"> 347</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span>
<span class="number"> 348</span>      <a href="http://www.allegro.cc/manual/get_vector_rotation_quat" target="_blank"><span class="a">get_vector_rotation_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, front.x, front.y, front.z, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 349</span>    <span class="k1">else</span>
<span class="number"> 350</span>      <a href="http://www.allegro.cc/manual/get_vector_rotation_quat" target="_blank"><span class="a">get_vector_rotation_quat</span></a><span class="k2">(</span><span class="k3">&amp;</span>q, front.x, front.y, front.z, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 351</span>
<span class="number"> 352</span>    <a href="http://www.allegro.cc/manual/quat_mul" target="_blank"><span class="a">quat_mul</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera.orientation, <span class="k3">&amp;</span>q, <span class="k3">&amp;</span>camera.orientation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 353</span>  <span class="k2">}</span>
<span class="number"> 354</span>  
<span class="number"> 355</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_F<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 356</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 357</span>      <span class="k1">if</span> <span class="k2">(</span>fov <span class="k3">&lt;</span> <span class="n">96</span><span class="k2">)</span>
<span class="number"> 358</span>        fov<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 359</span>    <span class="k2">}</span>
<span class="number"> 360</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 361</span>      <span class="k1">if</span> <span class="k2">(</span>fov <span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span>
<span class="number"> 362</span>        fov--<span class="k2">;</span>
<span class="number"> 363</span>    <span class="k2">}</span>
<span class="number"> 364</span>  <span class="k2">}</span>
<span class="number"> 365</span>
<span class="number"> 366</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_A<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 367</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key_shifts" target="_blank"><span class="a">key_shifts</span></a> <span class="k3">&amp;</span> KB_SHIFT_FLAG<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 368</span>      aspect <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 369</span>      <span class="k1">if</span> <span class="k2">(</span>aspect <span class="k3">&gt;</span> <span class="n">2</span><span class="k2">)</span>
<span class="number"> 370</span>        aspect <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 371</span>    <span class="k2">}</span>
<span class="number"> 372</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 373</span>      aspect <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number"> 374</span>      <span class="k1">if</span> <span class="k2">(</span>aspect <span class="k3">&lt;</span> .<span class="n">1</span><span class="k2">)</span>
<span class="number"> 375</span>        aspect <span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span>
<span class="number"> 376</span>    <span class="k2">}</span>
<span class="number"> 377</span>  <span class="k2">}</span>
<span class="number"> 378</span><span class="k2">}</span>
<span class="number"> 379</span>
<span class="number"> 380</span>
<span class="number"> 381</span>
<span class="number"> 382</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 383</span>
<span class="number"> 384</span>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 385</span>  install_allegro_gl<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 386</span>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 387</span>
<span class="number"> 388</span>  <span class="c">/* Initialise the camera */</span>
<span class="number"> 389</span>  camera.orientation <span class="k3">=</span> <a href="http://www.allegro.cc/manual/identity_quat" target="_blank"><span class="a">identity_quat</span></a><span class="k2">;</span>
<span class="number"> 390</span>  camera.position.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 391</span>  camera.position.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 392</span>  camera.position.z <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 393</span>
<span class="number"> 394</span>  <span class="c">/* Set up AllegroGL */</span>
<span class="number"> 395</span>  allegro_gl_clear_settings<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 396</span>  allegro_gl_set <span class="k2">(</span>AGL_COLOR_DEPTH, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 397</span>  allegro_gl_set <span class="k2">(</span>AGL_Z_DEPTH, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 398</span>  allegro_gl_set <span class="k2">(</span>AGL_DOUBLEBUFFER, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 399</span>  allegro_gl_set <span class="k2">(</span>AGL_RENDERMETHOD, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 400</span>  allegro_gl_set <span class="k2">(</span>AGL_WINDOWED, TRUE<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 401</span>  allegro_gl_set <span class="k2">(</span>AGL_SUGGEST, AGL_Z_DEPTH <span class="k3">|</span> AGL_DOUBLEBUFFER
<span class="number"> 402</span>          <span class="k3">|</span> AGL_RENDERMETHOD <span class="k3">|</span> AGL_WINDOWED <span class="k3">|</span> AGL_COLOR_DEPTH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 403</span>   
<span class="number"> 404</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_OPENGL, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 405</span>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <span class="n">0</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"> 406</span>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a> <span class="k2">(</span><span class="s">"Error setting OpenGL graphics mode:\n%s\n"</span>
<span class="number"> 407</span>                     <span class="s">"Allegro GL error : %s\n"</span>,
<span class="number"> 408</span>                     <a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a>, allegro_gl_error<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 409</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 410</span>  <span class="k2">}</span>
<span class="number"> 411</span>
<span class="number"> 412</span>    allegro_gl_set_texture_format<span class="k2">(</span>GL_RGB8<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 413</span>    
<span class="number"> 414</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> slate_bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"imagem.bmp"</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 415</span>    SlateTex <span class="k3">=</span> allegro_gl_make_texture<span class="k2">(</span>slate_bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 416</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>slate_bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 417</span>    
<span class="number"> 418</span>    
<span class="number"> 419</span>  <span class="c">/* Set up OpenGL */</span>
<span class="number"> 420</span>  glEnable<span class="k2">(</span>GL_DEPTH_TEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 421</span>  glCullFace<span class="k2">(</span>GL_BACK<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 422</span>  glEnable<span class="k2">(</span>GL_CULL_FACE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 423</span>  glEnable<span class="k2">(</span>GL_TEXTURE_2D<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 424</span>  glEnable<span class="k2">(</span>GL_BLEND<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 425</span>
<span class="number"> 426</span>  glShadeModel<span class="k2">(</span>GL_SMOOTH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 427</span>
<span class="number"> 428</span>  <span class="c">/* Build the font we'll use to display info */</span>
<span class="number"> 429</span>  agl_font <span class="k3">=</span> allegro_gl_convert_allegro_font_ex<span class="k2">(</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,
<span class="number"> 430</span>                                       AGL_FONT_TYPE_TEXTURED, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, GL_ALPHA8<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 431</span>    glEnable<span class="k2">(</span>GL_TEXTURE_2D<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 432</span>    
<span class="number"> 433</span>  
<span class="number"> 434</span>
<span class="number"> 435</span>  <span class="c">/* Run the example program */</span>
<span class="number"> 436</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 437</span>    render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 438</span>
<span class="number"> 439</span>    process_input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 440</span>  <span class="k2">}</span>
<span class="number"> 441</span>  
<span class="number"> 442</span>  allegro_gl_destroy_font<span class="k2">(</span>agl_font<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 443</span>
<span class="number"> 444</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 445</span><span class="k2">}</span>
<span class="number"> 446</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

[url <a href="http://img242.imageshack.us/img242/6421/beforegz4.jpg]Before[/url">http://img242.imageshack.us/img242/6421/beforegz4.jpg]Before[/url</a>]</p><p>[url <a href="http://img174.imageshack.us/img174/5242/afterat7.jpg]After[/url">http://img174.imageshack.us/img174/5242/afterat7.jpg]After[/url</a>]</p><p>tks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (vrgvrgvrg)</author>
		<pubDate>Tue, 03 Oct 2006 07:53:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In the quad drawing loop you need to take out
</p><div class="source-code snippet"><div class="inner"><pre>   glClear<span class="k2">(</span>GL_COLOR_BUFFER_BIT<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This will clear the viewport every time you draw a quad.</p><p>Also you need texture coordinates to tell it how to orientate the texture onto the quad</p><p>eg.</p><div class="source-code snippet"><div class="inner"><pre>  glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">1</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
  glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">1</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
  glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<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>
  glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="n">1</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

another thing that always throws me is if GL_COLOR_MATERIAL is on or not</p><p>try adding :-</p><div class="source-code snippet"><div class="inner"><pre>                       glDisable<span class="k2">(</span>GL_COLOR_MATERIAL<span class="k2">)</span><span class="k2">;</span>
                       glColor3ub<span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kikabo)</author>
		<pubDate>Tue, 03 Oct 2006 17:02:22 +0000</pubDate>
	</item>
</rss>
