<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Sin &amp; Cos Questions (Amarillion&#39;s tutorial)</title>
		<link>http://www.allegro.cc/forums/view/554028</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 20 Dec 2005 07:57:46 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nearing the end of Amarillion&#039;s tutorial, [url <a href="http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm]Sin">http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm]Sin</a> &amp; Cos: The Programmer&#039;s Pals![/url], I started getting confused with some things, namely the whole &quot;space cordinates to screen coordinates&quot; concept. I was hoping someone could clear this up for me by justifying the math behind his code (circ11.c and circ12.c [url <a href="http://pixwiki.bafsoft.com/mags/5/articles/circle/circle_examples.zip]here[/url">http://pixwiki.bafsoft.com/mags/5/articles/circle/circle_examples.zip]here[/url</a>]) or coming up with some crazy analogies <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>PS:<br />Go easy on the math terms, I don&#039;t want to look anything up (which is pointless because for every mathematical term, there&#039;s an accompanying 99 that you have to look up as well...)</p><p>circ12.c:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/*</span>
<span class="number">   2</span><span class="c">    CIRCLE 12</span>
<span class="number">   3</span><span class="c">    Written by Amarillion (amarillion@yahoo.com)</span>
<span class="number">   4</span><span class="c"></span>
<span class="number">   5</span><span class="c">    This program uses "Mode 7" to map a bitmap on to a horizontal plane.</span>
<span class="number">   6</span><span class="c">    The mode_7 function is actually pretty similar to the rotate_sprite</span>
<span class="number">   7</span><span class="c">    function.</span>
<span class="number">   8</span><span class="c"></span>
<span class="number">   9</span><span class="c">    This is almost the same as CIRCLE 11, but this example also shows</span>
<span class="number">  10</span><span class="c">    how to draw objects on the surface of the map.</span>
<span class="number">  11</span><span class="c"></span>
<span class="number">  12</span><span class="c">    You can move around with the up, down, left and right keys. Use the</span>
<span class="number">  13</span><span class="c">    following keys to change the Mode 7 parameters:</span>
<span class="number">  14</span><span class="c">    H / J : move the horizon up / down</span>
<span class="number">  15</span><span class="c">    Q / W : change the x scale</span>
<span class="number">  16</span><span class="c">    E / R : change the y scale</span>
<span class="number">  17</span><span class="c">    Z / X : change the camera height</span>
<span class="number">  18</span><span class="c">*/</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">  21</span>
<span class="number">  22</span><span class="c">/* MODE_7_PARAMS is a struct containing all the different parameters</span>
<span class="number">  23</span><span class="c">that are relevant for Mode 7, so you can pass them to the functions</span>
<span class="number">  24</span><span class="c">as a single unit */</span>
<span class="number">  25</span><span class="k1">typedef</span> <span class="k1">struct</span> MODE_7_PARAMS
<span class="number">  26</span><span class="k2">{</span>
<span class="number">  27</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_z<span class="k2">;</span> <span class="c">// this is the height of the camera above the plane</span>
<span class="number">  28</span>    <span class="k1">int</span> horizon<span class="k2">;</span> <span class="c">// this is the number of pixels line 0 is below the horizon</span>
<span class="number">  29</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> scale_x, scale_y<span class="k2">;</span> <span class="c">// this determines the scale of space coordinates</span>
<span class="number">  30</span>    <span class="c">// to screen coordinates</span>
<span class="number">  31</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_scale_x, obj_scale_y<span class="k2">;</span> <span class="c">// this determines the relative size of</span>
<span class="number">  32</span>    <span class="c">// the objects</span>
<span class="number">  33</span><span class="k2">}</span> MODE_7_PARAMS<span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="c">/* draw_object just draws a single object at a fixed position, although</span>
<span class="number">  36</span><span class="c">this can easily be modified to allow for more objects.</span>
<span class="number">  37</span><span class="c">bmp = bitmap to draw to. obj = sprite for the object.</span>
<span class="number">  38</span><span class="c">angle, cx, cy define the camera position.</span>
<span class="number">  39</span><span class="c">*/</span>
<span class="number">  40</span><span class="k1">void</span> draw_object <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>obj, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cx, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cy, MODE_7_PARAMS params<span class="k2">)</span>
<span class="number">  41</span><span class="k2">{</span>
<span class="number">  42</span>    <span class="k1">int</span> width, height<span class="k2">;</span>
<span class="number">  43</span>    <span class="k1">int</span> screen_y, screen_x<span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>    <span class="c">// The object in this case is at a fixed position of (160, 100).</span>
<span class="number">  46</span>    <span class="c">// Calculate the position relative to the camera.</span>
<span class="number">  47</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">160</span><span class="k2">)</span> <span class="k3">-</span> cx<span class="k2">;</span>
<span class="number">  48</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> obj_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">100</span><span class="k2">)</span> <span class="k3">-</span> cy<span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>    <span class="c">// use a rotation transformation to rotate the object by the camera</span>
<span class="number">  51</span>    <span class="c">// angle</span>
<span class="number">  52</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_x <span class="k3">=</span> fmul <span class="k2">(</span>obj_x, fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> fmul <span class="k2">(</span>obj_y, fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_y <span class="k3">=</span> <span class="k3">-</span>fmul <span class="k2">(</span>obj_x, fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> fmul <span class="k2">(</span>obj_y, fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>    <span class="c">// calculate the screen coordinates that go with these space coordinates</span>
<span class="number">  56</span>    <span class="c">// by dividing everything by space_x (the distance)</span>
<span class="number">  57</span>    screen_x <span class="k3">=</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>fmul <span class="k2">(</span>fdiv <span class="k2">(</span>params.scale_x, space_x<span class="k2">)</span>, space_y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>    screen_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>fdiv <span class="k2">(</span>fmul <span class="k2">(</span>params.space_z, params.scale_y<span class="k2">)</span>, space_x<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> params.horizon<span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span>    <span class="c">// the size of the object has to be scaled according to the distance</span>
<span class="number">  61</span>    height <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>obj-&gt;h <span class="k3">*</span> fdiv<span class="k2">(</span>params.obj_scale_y, space_x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>    width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>obj-&gt;w <span class="k3">*</span> fdiv<span class="k2">(</span>params.obj_scale_x, space_x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>    <span class="c">// draw the object</span>
<span class="number">  65</span>    <a href="http://www.allegro.cc/manual/stretch_sprite" target="_blank"><span class="a">stretch_sprite</span></a> <span class="k2">(</span>bmp, obj, screen_x <span class="k3">-</span> width <span class="k3">/</span> <span class="n">2</span>, screen_y <span class="k3">-</span> height, width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span><span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span><span class="k1">void</span> mode_7 <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tile, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cx, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> cy, MODE_7_PARAMS params<span class="k2">)</span>
<span class="number">  69</span><span class="k2">{</span>
<span class="number">  70</span>    <span class="c">// current screen position</span>
<span class="number">  71</span>    <span class="k1">int</span> screen_x, screen_y<span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>    <span class="c">// the distance and horizontal scale of the line we are drawing</span>
<span class="number">  74</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> distance, horizontal_scale<span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>    <span class="c">// masks to make sure we don't read pixels outside the tile</span>
<span class="number">  77</span>    <span class="k1">int</span> mask_x <span class="k3">=</span> <span class="k2">(</span>tile-&gt;w <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <span class="k1">int</span> mask_y <span class="k3">=</span> <span class="k2">(</span>tile-&gt;h <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>
<span class="number">  80</span>    <span class="c">// step for points in space between two pixels on a horizontal line</span>
<span class="number">  81</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> line_dx, line_dy<span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>    <span class="c">// current space position</span>
<span class="number">  84</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> space_x, space_y<span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>    <span class="k1">for</span> <span class="k2">(</span>screen_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> screen_y <span class="k3">&lt;</span> bmp-&gt;h<span class="k2">;</span> screen_y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  87</span>    <span class="k2">{</span>
<span class="number">  88</span>        <span class="c">// first calculate the distance of the line we are drawing</span>
<span class="number">  89</span>        distance <span class="k3">=</span> fdiv <span class="k2">(</span>fmul <span class="k2">(</span>params.space_z, params.scale_y<span class="k2">)</span>,
<span class="number">  90</span>            <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span>screen_y <span class="k3">+</span> params.horizon<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>        <span class="c">// then calculate the horizontal scale, or the distance between</span>
<span class="number">  92</span>        <span class="c">// space points on this horizontal line</span>
<span class="number">  93</span>        horizontal_scale <span class="k3">=</span> fdiv <span class="k2">(</span>distance, params.scale_x<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>        <span class="c">// calculate the dx and dy of points in space when we step</span>
<span class="number">  96</span>        <span class="c">// through all points on this line</span>
<span class="number">  97</span>        line_dx <span class="k3">=</span> fmul <span class="k2">(</span><span class="k3">-</span>fsin<span class="k2">(</span>angle<span class="k2">)</span>, horizontal_scale<span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>        line_dy <span class="k3">=</span> fmul <span class="k2">(</span>fcos<span class="k2">(</span>angle<span class="k2">)</span>, horizontal_scale<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>        <span class="c">// calculate the starting position</span>
<span class="number"> 101</span>        space_x <span class="k3">=</span> cx <span class="k3">+</span> fmul <span class="k2">(</span>distance, fcos<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> line_dx<span class="k2">;</span>
<span class="number"> 102</span>        space_y <span class="k3">=</span> cy <span class="k3">+</span> fmul <span class="k2">(</span>distance, fsin<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> bmp-&gt;w<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> line_dy<span class="k2">;</span>
<span class="number"> 103</span>
<span class="number"> 104</span>        <span class="c">// go through all points in this screen line</span>
<span class="number"> 105</span>        <span class="k1">for</span> <span class="k2">(</span>screen_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> screen_x <span class="k3">&lt;</span> bmp-&gt;w<span class="k2">;</span> screen_x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 106</span>        <span class="k2">{</span>
<span class="number"> 107</span>            <span class="c">// get a pixel from the tile and put it on the screen</span>
<span class="number"> 108</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>bmp, screen_x, screen_y,
<span class="number"> 109</span>                <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a> <span class="k2">(</span>tile,
<span class="number"> 110</span>                    <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_x<span class="k2">)</span> <span class="k3">&amp;</span> mask_x,
<span class="number"> 111</span>                    <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a> <span class="k2">(</span>space_y<span class="k2">)</span> <span class="k3">&amp;</span> mask_y <span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>            <span class="c">// advance to the next position in space</span>
<span class="number"> 113</span>            space_x <span class="k3">+</span><span class="k3">=</span> line_dx<span class="k2">;</span>
<span class="number"> 114</span>            space_y <span class="k3">+</span><span class="k3">=</span> line_dy<span class="k2">;</span>
<span class="number"> 115</span>        <span class="k2">}</span>
<span class="number"> 116</span>    <span class="k2">}</span>
<span class="number"> 117</span><span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</span><span class="k1">void</span> test_mode_7 <span class="k2">(</span><span class="k2">)</span>
<span class="number"> 120</span><span class="k2">{</span>
<span class="number"> 121</span>    MODE_7_PARAMS params<span class="k2">;</span>
<span class="number"> 122</span>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tile, <span class="k3">*</span>sprite, <span class="k3">*</span>buffer<span class="k2">;</span>
<span class="number"> 123</span>    <a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> pal<span class="k2">;</span>
<span class="number"> 124</span>    <span class="k1">int</span> quit <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 125</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 127</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> dx <span class="k3">=</span> <span class="n">0</span>, dy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 128</span>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 129</span>    <span class="k1">int</span> i, j, r2<span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>    params.space_z <span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="n">50</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>    params.scale_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">200</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>    params.scale_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">200</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>    params.obj_scale_x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">50</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>    params.obj_scale_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">50</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>    params.horizon <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
<span class="number"> 137</span>
<span class="number"> 138</span>    <span class="c">// to avoid flicker the program makes use of a double-buffering system</span>
<span class="number"> 139</span>    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>screen-&gt;w, screen-&gt;h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>    <span class="c">// create a 64x64 tile bitmap and draw something on it.</span>
<span class="number"> 141</span>    tile <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">64</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</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> <span class="n">32</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 143</span>    <span class="k2">{</span>
<span class="number"> 144</span>        <span class="k1">for</span> <span class="k2">(</span>j <span class="k3">=</span> i<span class="k2">;</span> j <span class="k3">&lt;</span> <span class="n">32</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 145</span>        <span class="k2">{</span>
<span class="number"> 146</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, i, j, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, i, <span class="n">63</span><span class="k3">-</span>j, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, <span class="n">63</span><span class="k3">-</span>i, j, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, <span class="n">63</span><span class="k3">-</span>i, <span class="n">63</span><span class="k3">-</span>j, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, j, i, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, j, <span class="n">63</span><span class="k3">-</span>i, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, <span class="n">63</span><span class="k3">-</span>j, i, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>            <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>tile, <span class="n">63</span><span class="k3">-</span>j, <span class="n">63</span><span class="k3">-</span>i, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>        <span class="k2">}</span>
<span class="number"> 155</span>    <span class="k2">}</span>
<span class="number"> 156</span>    text_mode <span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>
<span class="number"> 158</span>    <span class="c">// Create another bitmap and draw something to it.</span>
<span class="number"> 159</span>    <span class="c">// This bitmap contains the object.</span>
<span class="number"> 160</span>    sprite <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">64</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>    clear <span class="k2">(</span>sprite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</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> <span class="n">64</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 163</span>    <span class="k2">{</span>
<span class="number"> 164</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> <span class="n">64</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 165</span>        <span class="k2">{</span>
<span class="number"> 166</span>            r2 <span class="k3">=</span> <span class="k2">(</span><span class="n">32</span> <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">32</span> <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">32</span> <span class="k3">-</span> j<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">32</span> <span class="k3">-</span> j<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>            <span class="k1">if</span> <span class="k2">(</span>r2 <span class="k3">&lt;</span> <span class="n">30</span> <span class="k3">*</span> <span class="n">30</span><span class="k2">)</span>
<span class="number"> 168</span>            <span class="k2">{</span>
<span class="number"> 169</span>                r2 <span class="k3">=</span> <span class="k2">(</span><span class="n">24</span> <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">24</span> <span class="k3">-</span> i<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">24</span> <span class="k3">-</span> j<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">24</span> <span class="k3">-</span> j<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>                <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a> <span class="k2">(</span>sprite, i, j, <span class="n">127</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>fsqrt<span class="k2">(</span><a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>r2<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span>            <span class="k2">}</span>
<span class="number"> 172</span>        <span class="k2">}</span>
<span class="number"> 173</span>    <span class="k2">}</span>
<span class="number"> 174</span>
<span class="number"> 175</span>    <span class="c">// create a palette</span>
<span class="number"> 176</span>    <span class="c">// colors for the tiles</span>
<span class="number"> 177</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> <span class="n">64</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 178</span>    <span class="k2">{</span>
<span class="number"> 179</span>        pal<span class="k3">&lt;</span>i&gt;.r <span class="k3">=</span> i<span class="k2">;</span>
<span class="number"> 180</span>        pal<span class="k3">&lt;</span>i&gt;.g <span class="k3">=</span> i<span class="k2">;</span>
<span class="number"> 181</span>        pal<span class="k3">&lt;</span>i&gt;.b <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 182</span>    <span class="k2">}</span>
<span class="number"> 183</span>    <span class="c">// colors for the object</span>
<span class="number"> 184</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> <span class="n">32</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 185</span>    <span class="k2">{</span>
<span class="number"> 186</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">64</span><span class="k2">]</span>.r <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 187</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">64</span><span class="k2">]</span>.g <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 188</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">64</span><span class="k2">]</span>.b <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> i<span class="k2">;</span>
<span class="number"> 189</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">96</span><span class="k2">]</span>.r <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> i<span class="k2">;</span>
<span class="number"> 190</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">96</span><span class="k2">]</span>.g <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> i<span class="k2">;</span>
<span class="number"> 191</span>        pal<span class="k2">[</span>i<span class="k3">+</span><span class="n">96</span><span class="k2">]</span>.b <span class="k3">=</span> <span class="n">63</span><span class="k2">;</span>
<span class="number"> 192</span>    <span class="k2">}</span>
<span class="number"> 193</span>    <a href="http://www.allegro.cc/manual/set_palette" target="_blank"><span class="a">set_palette</span></a> <span class="k2">(</span>pal<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>
<span class="number"> 195</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 196</span>    <span class="k2">{</span>
<span class="number"> 197</span>        <span class="c">// act on keyboard input</span>
<span class="number"> 198</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_ESC<span class="k2">]</span><span class="k2">)</span> quit <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 199</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="k3">&amp;</span><span class="k3">&amp;</span> speed <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 200</span>            speed <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">0</span>.<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</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="k3">&amp;</span><span class="k3">&amp;</span> speed <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="k3">-</span><span class="n">5</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 202</span>            speed <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">0</span>.<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</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="number"> 204</span>            angle <span class="k3">=</span> <span class="k2">(</span>angle <span class="k3">-</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFFFFFF</span><span class="k2">;</span>
<span class="number"> 205</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="number"> 206</span>            angle <span class="k3">=</span> <span class="k2">(</span>angle <span class="k3">+</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a> <span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0xFFFFFF</span><span class="k2">;</span>
<span class="number"> 207</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="number"> 208</span>            params.space_z <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 209</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="number"> 210</span>            params.space_z <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</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_Q<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 212</span>            params.scale_x <span class="k3">=</span> fmul <span class="k2">(</span>params.scale_x, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</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="number"> 214</span>            params.scale_x <span class="k3">=</span> fdiv <span class="k2">(</span>params.scale_x, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</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_E<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 216</span>            params.scale_y <span class="k3">=</span> fmul <span class="k2">(</span>params.scale_y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</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="number"> 218</span>            params.scale_y <span class="k3">=</span> fdiv <span class="k2">(</span>params.scale_y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span><span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 219</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="number"> 220</span>            params.horizon<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 221</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_J<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 222</span>            params.horizon--<span class="k2">;</span>
<span class="number"> 223</span>
<span class="number"> 224</span>        dx <span class="k3">=</span> fmul <span class="k2">(</span>speed, fcos <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>        dy <span class="k3">=</span> fmul <span class="k2">(</span>speed, fsin <span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>
<span class="number"> 227</span>        x <span class="k3">+</span><span class="k3">=</span> dx<span class="k2">;</span>
<span class="number"> 228</span>        y <span class="k3">+</span><span class="k3">=</span> dy<span class="k2">;</span>
<span class="number"> 229</span>
<span class="number"> 230</span>        mode_7 <span class="k2">(</span>buffer, tile, angle, x, y, params<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>        draw_object <span class="k2">(</span>buffer, sprite, angle, x, y, params<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>        <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>        <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>, <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"> 234</span>
<span class="number"> 235</span>    <span class="k2">}</span>
<span class="number"> 236</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a> <span class="k2">(</span>tile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a> <span class="k2">(</span>sprite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a> <span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 239</span><span class="k2">}</span>
<span class="number"> 240</span>
<span class="number"> 241</span><span class="k1">int</span> main <span class="k2">(</span><span class="k2">)</span>
<span class="number"> 242</span><span class="k2">{</span>
<span class="number"> 243</span>    <span class="c">// initialize Allegro</span>
<span class="number"> 244</span>    <span class="k1">if</span> <span class="k2">(</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="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 245</span>    <span class="k2">{</span>
<span class="number"> 246</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: Could not initialize Allegro"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 248</span>    <span class="k2">}</span>
<span class="number"> 249</span>    <span class="c">// initialize gfx mode</span>
<span class="number"> 250</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_AUTODETECT, <span class="n">320</span>, <span class="n">200</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 251</span>    <span class="k2">{</span>
<span class="number"> 252</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: Could not set graphics mode"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 253</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 254</span>    <span class="k2">}</span>
<span class="number"> 255</span>    <span class="c">// initialize keyboard</span>
<span class="number"> 256</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"> 257</span>    <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 258</span>
<span class="number"> 259</span>    <span class="c">// call the example function</span>
<span class="number"> 260</span>    test_mode_7 <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 261</span>
<span class="number"> 262</span>    <span class="c">// exit Allegro</span>
<span class="number"> 263</span>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 264</span>
<span class="number"> 265</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 266</span>
<span class="number"> 267</span><span class="k2">}</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>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (scriptX)</author>
		<pubDate>Mon, 19 Dec 2005 22:14:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Space coordinate as what you, as the programmer, make up.  In OpenGL, for example, you will often find programmers using 1.0f to represent the top of the screen, -1.0f for the bottom, -1.0f for the left side of the screen, and 1.0f for the right side of the screen.</p><p>So a dot at the right side of the screen in the middle would be defined (in code) as (1.0f, 0.0f).  A dot in the middle of the screen would be (0.0f, 0.0f).  A dot at the bottom of the screen in the middle would be (0.0f, -1.0f).</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span><span class="k3">-</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span> <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> <span class="k2">(</span><span class="n">0</span>, <span class="n">1</span><span class="k2">)</span> <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> <span class="k2">(</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span>
<span class="k3">|</span>
<span class="k3">|</span>
<span class="k3">|</span>
<span class="k2">(</span><span class="k3">-</span><span class="n">1</span>, <span class="n">0</span><span class="k2">)</span>         <span class="k2">(</span><span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>            <span class="k2">(</span><span class="n">1</span>, <span class="n">0</span><span class="k2">)</span>
<span class="k3">|</span>
<span class="k3">|</span>
<span class="k3">|</span>
<span class="k2">(</span><span class="k3">-</span><span class="n">1</span>,<span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> <span class="k2">(</span><span class="n">0</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span><span class="k3">-</span> <span class="k2">(</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span>
</pre></div></div><p>

Now the screen, in memory, can really defined by a 2 dimentional array defiend as video_mem[height][width].  This is what&#39;s called screen coordinates.  It usually goes from (0,0) - Upper Left, to (width_resolution, height_resolution) - Lower Right.  So to convert world coordinates to screen coordinates, you would have to take the coordiantes you made up, like from -1 to 1, and convert them into which pixels in the array.  So if you&#39;re running in 640 x 480, you would convert the word coordinates (1, -1) from above as (639, 479) in screen coordinates to represent the bottom right hand side of the screen.</p><p>In other words, World Coordinates are what the programmer makes up to best fit whatever the program is supposed to do, while screen coordinates are made up by the hardware and video memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (NyanKoneko)</author>
		<pubDate>Mon, 19 Dec 2005 22:31:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In the sin/cos tutorial, those sections are describing a technique for representing a 3D world in 2D.  To do this, you need to be able to take points in 3D space and know where to place them on the screen -- i.e. in 2D space.  The simplest method for this is to just divide the 3D coordinates by their &#39;z&#39; value, or their distance from the screen, which has the effect of squishing together pixels which are farther from the screen.<br />So this gives us his equation:<br />space_x / space_z = screen_x<br />space_y / spaze_z = screen_y<br />space_z / space_z = 1</p><p>So now we have a way of &#39;translating&#39; pixels in 3D space to pixels in 2D space.  But we can&#39;t just pick pixels in 3D space, translate them, and fill the screen -- what if we pick pixels that are too far apart, and we miss parts of the screen?  So we need a way of saying, &#39;for this pixel on the screen, what part of 3D space did it come from?&#39;.  Note that he is trying to draw a plane of fixed &#39;y&#39;, so space_y is a known constant.<br />This gives us his equations:<br />space_z = space_y / screen_y<br />space_x = screen_x * space_y / screen_y</p><p>Due to the nature of the technique he gives for rendering, he wants to turn the space_x variable into a value which means &#39;the amount of movement in x, in space, we need to move one pixel in x, in the screen&#39;, so he replaces screen_x with the constant 1:<br />space_x = 1 * space_y / screen_y</p><p>His variables scale_x and scale_y are introduced to solve the issues described by Nyan; they scale the space coordinates so that the screen coordinates that result from this translation correspond to the right amount of screen-space.  They&#39;re constants that you may adjust, and should be set to &#39;whatever looks good&#39;.</p><p>edit: I missed one: The horizon variable is also a constant which can be set to &#39;whatever looks good&#39; -- it determines where on the screen the horizon should be ... it&#39;s just an offset you add to screen_y.<br />Also, horizontal_scale in the code is essentially space_x in the description.<br />There&#39;s more to the algorithm, but this should cover most of the details of the world-space to screen-space translation.  Hope it helps <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Zaphos)</author>
		<pubDate>Tue, 20 Dec 2005 05:05:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Slowly but surely.. -.-</p><p>Thanks guys.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (scriptX)</author>
		<pubDate>Tue, 20 Dec 2005 07:57:46 +0000</pubDate>
	</item>
</rss>
