<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>&quot;camera&quot; in 3D scene</title>
		<link>http://www.allegro.cc/forums/view/587135</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 22 Aug 2006 00:17:05 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>if i make a 3d scene with a bunch of quads and pyramids everywhere, if i make a &quot;camera&quot; that i can move around the world with, do i draw the scene around the origin (0,0,0) then move the camera to where i want to view then render that. or do i draw the scene as the camera as the origin?</p><p>or is there another way?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Mon, 21 Aug 2006 00:32:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A camera is (afaik) just a transformation. Once you have your scene ready, modify it by the inverse of the camera matrix. Ie, if your camera is at 5,0,0 - you move all world coords by -5, 0, 0.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 21 Aug 2006 00:47:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>can you give an example of how to do that. because if i remember correctly i tried it with glTranslatef(...) and glRotatef(...) before i did allegro_gl_flip(), and it didnt have an effect.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Mon, 21 Aug 2006 00:49:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In openGl you could use the simple
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> gluLookAt<span class="k2">(</span> GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz <span class="k2">)</span>
</pre></div></div><p>
function.</p><p>But if you dont want to.. hm. well, my ogl is a bit rusty, but before you draw your scene, do a translate in the negative of the cameras position, and then a rotate in the negative of the cameras rotation. Push this and pop it for each object you want to draw. <br />If you do it before allegro_gl_flip(), no vertices will be affected by it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 21 Aug 2006 01:14:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>im using allegroGL which from what i understand doesnt use GLU which that function does. is there an allegrogl function to do it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Mon, 21 Aug 2006 01:26:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is nothing preventing you from including glu and using it.<br />AllegroGL is simply a layer which sets up OpenGL together with allegro + some helper functions and defintions. And some other useful stuff I&#39;m sure, but i don&#39;t know them <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Anyway, anything you can do in openGL alone, you can do in allegroGl. AFAIK.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 21 Aug 2006 02:08:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
A camera is (afaik) just a transformation. Once you have your scene ready, modify it by the inverse of the camera matrix. Ie, if your camera is at 5,0,0 - you move all world coords by -5, 0, 0.
</p></div></div><p>
You need to transform negative to the &#39;camera coords&#39; before drawing. Just remember to use glPushMatrix and glPopMatrix rather than glLoadIdentity to reset the position of the models.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
im using allegroGL which from what i understand doesnt use GLU which that function does. is there an allegrogl function to do it?
</p></div></div><p>
You can use any GLU functions with AllegroGL - and I think that AllegroGL <i>does</i> use GLU in multiple places.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Mon, 21 Aug 2006 13:13:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Right, a bit of bad wording on my part there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Mon, 21 Aug 2006 15:26:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok thanks guys</p><p>ill see if i can get one of them to work.</p><p>EDIT:: Ok, i sorta got it to work...</p><p>the thing is the moving forward and backward works, but the strafing only works some times, or only if im facing certain directions.  here are the parts of the code that affect the camera movement.</p><p>camera struct
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> CAMERA
<span class="k2">{</span>
  <span class="k1">float</span> xoff, yoff, zoff<span class="k2">;</span>
  <span class="k1">float</span> xfacing, yfacing, zfacing<span class="k2">;</span>
  <span class="k1">float</span> xrot, yrot<span class="k2">;</span>
  <span class="k1">int</span> mousex, mousey<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

input routine
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> input<span class="k2">(</span>CAMERA<span class="k3">*</span> camera<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <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></td></tr><tr><td class="number">4</td><td>  <a href="http://www.allegro.cc/manual/poll_mouse" target="_blank"><span class="a">poll_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <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></td></tr><tr><td class="number">6</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>    camera-&gt;xoff <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    camera-&gt;zoff <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    camera-&gt;xfacing <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    camera-&gt;zfacing <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">12</td><td>  <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_S<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>    camera-&gt;xoff <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    camera-&gt;zoff <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    camera-&gt;xfacing <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    camera-&gt;zfacing <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>  <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></td></tr><tr><td class="number">20</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">21</td><td>    camera-&gt;zoff <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    camera-&gt;xoff <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    camera-&gt;zfacing <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    camera-&gt;xfacing <span class="k3">-</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>  <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_D<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>    camera-&gt;zoff <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    camera-&gt;xoff <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    camera-&gt;zfacing <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    camera-&gt;xfacing <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span><span class="k2">(</span>camera-&gt;yrot<span class="k3">*</span><span class="k2">(</span>PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05f</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">if</span><span class="k2">(</span>camera-&gt;mousex <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">|</span><span class="k3">|</span> camera-&gt;mousey <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>    camera-&gt;yrot <span class="k3">=</span> <span class="k3">-</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">-</span> camera-&gt;mousex<span class="k2">)</span><span class="k3">/</span><span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    camera-&gt;xrot <span class="k3">=</span> <span class="k3">-</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">-</span> camera-&gt;mousey<span class="k2">)</span><span class="k3">/</span><span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span>  </td></tr><tr><td class="number">38</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

setting the &quot;view&quot;
</p><div class="source-code snippet"><div class="inner"><pre>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

  glRotatef<span class="k2">(</span><span class="k3">-</span>camera-&gt;xrot, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">0</span>.<span class="n">0f</span>, <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
  glRotatef<span class="k2">(</span><span class="k3">-</span>camera-&gt;yrot, <span class="n">0</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
  gluLookAt<span class="k2">(</span>camera-&gt;xoff,camera-&gt;yoff,camera-&gt;zoff,camera-&gt;xfacing,camera-&gt;yfacing,camera-&gt;zfacing,<span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Tue, 22 Aug 2006 00:17:05 +0000</pubDate>
	</item>
</rss>
