<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>FPS camera in Allegro 5</title>
		<link>http://www.allegro.cc/forums/view/616711</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 29 Jan 2017 19:37:58 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So I&#39;m trying to make a simple 3D game in Allegro5 and I&#39;m stuck trying to make the camera class work.</p><p>Here&#39;s my loop:
</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_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"><span class="a">al_map_rgb</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="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span>p <span class="k3">=</span> test.create_a5_perspective_transform<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>c <span class="k3">=</span> test.create_a5_camera_transform<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>al_use_projection_transform<span class="k2">(</span><span class="k3">&amp;</span>p<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</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>c<span class="k2">)</span><span class="k2">;</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><span class="k3">&amp;</span>test_hmap<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, NULL, NULL, <span class="n">0</span>, test_hmap.size<span class="k2">(</span><span class="k2">)</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>test.handle_mouse<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</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>

and here are the 2 functions: </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> LPG_CAMERA::create_a5_perspective_transform<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">double</span> pt_width <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_803.html" target="_blank">tan</a><span class="k2">(</span>h_fov<span class="k3">/</span><span class="n">360</span>.<span class="n">0</span><span class="k3">*</span><span class="n">3</span>.<span class="n">14159265358979</span><span class="k2">)</span><span class="k3">*</span>lpg_default_near<span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">double</span> pt_height<span class="k3">=</span> pt_width <span class="k3">/</span> <span class="k1">double</span><span class="k2">(</span><span class="k2">(</span><span class="k1">double</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>lpg_a5_display<span class="k2">)</span><span class="k3">/</span><span class="k2">(</span><span class="k1">double</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>lpg_a5_display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>    <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>th_output<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>th_output,
<span class="number">  7</span>                             <span class="k3">-</span>pt_width, pt_width, lpg_default_near,
<span class="number">  8</span>                             <span class="k3">-</span>pt_height, pt_height, lpg_render_distance<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">return</span> th_output<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> LPG_CAMERA::create_a5_camera_transform<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 12</span><span class="k2">{</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>th_output<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>th_output, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, deg_to_rad<span class="k2">(</span>y_rot<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//pitch</span>
<span class="number"> 15</span>    al_rotate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>th_output, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, deg_to_rad<span class="k2">(</span>x_rot<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//yaw</span>
<span class="number"> 16</span>    al_translate_transform_3d<span class="k2">(</span><span class="k3">&amp;</span>th_output, <span class="k3">-</span>x, <span class="k3">-</span>y, <span class="k3">-</span>z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">return</span> th_output<span class="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span>
</div></div><p>

The camera seems tilted and the FOV very limited (I attached the program to give you an idea), so I&#39;m clearly doing something wrong here. I can&#39;t really see what&#39;s exactly causing the problem, though.<br />Does anyone know what&#39;s wrong?</p><p>EDIT: I&#39;m an idiot, I looked at the documentation and realized I was passing arguments to al_perspective_transform in the wrong order <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Also, al_rotate_transform_3d() calls needed to be swapped. The camera is working perfectly now. I can&#39;t reply or delete this thread AFAIK, so I&#39;m leaving it here
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CrizerPL)</author>
		<pubDate>Sun, 29 Jan 2017 19:37:58 +0000</pubDate>
	</item>
</rss>
