<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>drawing a rectangle in 3D</title>
		<link>http://www.allegro.cc/forums/view/590216</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 23 Feb 2007 21:27:52 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,<br />    I&#39;m totally new to 3D stuff. I thought I&#39;d see if I could draw a rectangle<br />in perspective. For now it&#39;s face-on to the screen and doesn&#39;t move. I&#39;m just trying to get used to the ideas and functions.<br /> Here&#39;s the code I&#39;ve got :-</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">struct</span> vertex <span class="k2">{</span></td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> x, y, z<span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">typedef</span> <span class="k1">struct</span> vertex VERTEX<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="k1">struct</span> rectangle <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>   VERTEX rect_vertices<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>          <span class="c">/* vertices of rectangle relative to eachother */</span></td></tr><tr><td class="number">11</td><td>   <span class="k1">int</span> x, y, z<span class="k2">;</span>                      <span class="c">/* co-ordinates of rectangle in world */</span></td></tr><tr><td class="number">12</td><td>   VERTEX rect_vertices_world<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>    <span class="c">/* vertices of rectangle in world */</span></td></tr><tr><td class="number">13</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="k1">typedef</span> <span class="k1">struct</span> rectangle RECTANGLE<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k1">struct</span> cartesian_point <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>   <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x, y<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">typedef</span> <span class="k1">struct</span> cartesian_point C_POINT<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="c">/* all the vertices of the rectangle */</span></td></tr><tr><td class="number">24</td><td>VERTEX points<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</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="k2">{</span>  <span class="n">0</span>,   <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>,</td></tr><tr><td class="number">27</td><td>   <span class="k2">{</span><span class="n">100</span>,   <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>,</td></tr><tr><td class="number">28</td><td>   <span class="k2">{</span><span class="n">100</span>, <span class="n">100</span>, <span class="n">0</span><span class="k2">}</span>,</td></tr><tr><td class="number">29</td><td>   <span class="k2">{</span>  <span class="n">0</span>, <span class="n">100</span>, <span class="n">0</span><span class="k2">}</span></td></tr><tr><td class="number">30</td><td><span class="k2">}</span><span class="k2">;</span>                </td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td>RECTANGLE r<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td><span class="k2">{</span></td></tr><tr><td class="number">37</td><td>   <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></td></tr><tr><td class="number">38</td><td>   <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></td></tr><tr><td class="number">39</td><td>   <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>   <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_AUTODETECT, <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></td></tr><tr><td class="number">41</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>       <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></td></tr><tr><td class="number">43</td><td>       <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">"Unable to set graphics mode.\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>   <span class="k2">}</span>  </td></tr><tr><td class="number">46</td><td><span class="k2">}</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td><span class="k1">void</span> draw_line<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>, C_POINT, C_POINT<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td><span class="k1">void</span> make_rect<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td>&#160;</td></tr><tr><td class="number">54</td><td><span class="k1">void</span> draw_line<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>a, C_POINT point_1, C_POINT point_2<span class="k2">)</span></td></tr><tr><td class="number">55</td><td><span class="k2">{</span></td></tr><tr><td class="number">56</td><td>   <span class="k1">int</span> white <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol32" target="_blank"><span class="a">makecol32</span></a><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></td></tr><tr><td class="number">57</td><td>   <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>a, <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>point_1.x<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>point_1.y<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>point_2.x<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>point_2.x<span class="k2">)</span>, white<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td><span class="k2">}</span></td></tr><tr><td class="number">59</td><td>&#160;</td></tr><tr><td class="number">60</td><td>&#160;</td></tr><tr><td class="number">61</td><td><span class="k1">void</span> make_rect<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td><span class="k2">{</span></td></tr><tr><td class="number">63</td><td>   r.rect_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> points<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span> </td></tr><tr><td class="number">64</td><td>   r.rect_vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> points<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>   r.rect_vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> points<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>   r.rect_vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> points<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>   </td></tr><tr><td class="number">68</td><td>   r.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>   r.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>   r.z <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td><span class="k2">}</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td>&#160;</td></tr><tr><td class="number">74</td><td>&#160;</td></tr><tr><td class="number">75</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">76</td><td><span class="k2">{</span></td></tr><tr><td class="number">77</td><td>   <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">78</td><td>   </td></tr><tr><td class="number">79</td><td>   C_POINT rect_points_2d<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span> <span class="c">/* Somewhere to store the translated points of the</span></td></tr><tr><td class="number">80</td><td><span class="c">                                 rectangle. */</span></td></tr><tr><td class="number">81</td><td>&#160;</td></tr><tr><td class="number">82</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">83</td><td>&#160;</td></tr><tr><td class="number">84</td><td>   init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>&#160;</td></tr><tr><td class="number">86</td><td>   buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>&#160;</td></tr><tr><td class="number">88</td><td>   <a href="http://www.allegro.cc/manual/set_projection_viewport" target="_blank"><span class="a">set_projection_viewport</span></a><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></td></tr><tr><td class="number">89</td><td>&#160;</td></tr><tr><td class="number">90</td><td>   <span class="c">/* work out where vertices are in the world */</span></td></tr><tr><td class="number">91</td><td>&#160;</td></tr><tr><td class="number">92</td><td>   <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> <span class="n">4</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span></td></tr><tr><td class="number">93</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">94</td><td>      r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.x <span class="k3">=</span> r.rect_vertices<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> r.x<span class="k2">;</span></td></tr><tr><td class="number">95</td><td>      r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.y <span class="k3">=</span> r.rect_vertices<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> r.y<span class="k2">;</span> </td></tr><tr><td class="number">96</td><td>      r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.z <span class="k3">=</span> r.rect_vertices<span class="k3">&lt;</span>i&gt;.z <span class="k3">+</span> r.z<span class="k2">;</span></td></tr><tr><td class="number">97</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">98</td><td>   </td></tr><tr><td class="number">99</td><td>   <span class="c">/* translate the shapes into cartesian coordinates */</span></td></tr><tr><td class="number">100</td><td>&#160;</td></tr><tr><td class="number">101</td><td>   <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> <span class="n">4</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span></td></tr><tr><td class="number">102</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">103</td><td>      <a href="http://www.allegro.cc/manual/persp_project" target="_blank"><span class="a">persp_project</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.x<span class="k2">)</span>,</td></tr><tr><td class="number">104</td><td>                    <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.y<span class="k2">)</span>,</td></tr><tr><td class="number">105</td><td>                    <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>r.rect_vertices_world<span class="k3">&lt;</span>i&gt;.z<span class="k2">)</span>, </td></tr><tr><td class="number">106</td><td>                    <span class="k3">&amp;</span>rect_points_2d<span class="k3">&lt;</span>i&gt;.x,   </td></tr><tr><td class="number">107</td><td>                    <span class="k3">&amp;</span>rect_points_2d<span class="k3">&lt;</span>i&gt;.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">109</td><td>   </td></tr><tr><td class="number">110</td><td>   <span class="c">/* Draw lines between connecting points of the rectangle. */</span></td></tr><tr><td class="number">111</td><td>&#160;</td></tr><tr><td class="number">112</td><td>   draw_line<span class="k2">(</span>buffer, rect_points_2d<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, rect_points_2d<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">113</td><td>   draw_line<span class="k2">(</span>buffer, rect_points_2d<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, rect_points_2d<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>   draw_line<span class="k2">(</span>buffer, rect_points_2d<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>, rect_points_2d<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>   draw_line<span class="k2">(</span>buffer, rect_points_2d<span class="k2">[</span><span class="n">4</span><span class="k2">]</span>, rect_points_2d<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>&#160;</td></tr><tr><td class="number">117</td><td>   <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>   <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">119</td><td>&#160;</td></tr><tr><td class="number">120</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td><span class="k2">}</span></td></tr><tr><td class="number">122</td><td><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></td></tr></tbody></table></div></div><p>

All it does is draw a diagonal line across the screen.<br />I put plently of comments in to make it easy to understand.</p><p>Can someone help me understand what I&#39;m doing wrong please ?</p><p>[edit]</p><p>sorry, It&#39;d help if I&#39;d have spent a bit more time checking for obvious mistakes <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 23 Feb 2007 05:35:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe a pointless comment, but I strongly suggest using AllegroGL and OpenGL instead of Allegro 3D routines. This way you&#39;ll get 3D acceleration and programming OpenGL is a bit easier than programming 3D Allegro. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Krzysztof Kluczek)</author>
		<pubDate>Fri, 23 Feb 2007 17:19:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
and programming OpenGL is a bit easier than programming 3D Allegro.
</p></div></div><p>
No, it&#39;s not. It&#39;s a lot easier. Allegro&#39;s 3d routines are the <a href="http://en.wikipedia.org/wiki/Malbolge">Malbolge</a> of 3d APIs.</p><p>If you want to learn the hard way (by trial and error) how a 3d rendering pipeline works, and how one would go implementing one in software, then by all means look into allegro 3d.<br />For practical programming tasks, they are rather useless except for very rare situations (e.g. very simple 3d on a very low-end machine that doesn&#39;t come with 3d hw accel).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Fri, 23 Feb 2007 18:21:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks guys, you&#39;re great.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 23 Feb 2007 21:27:52 +0000</pubDate>
	</item>
</rss>
