<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Anybody have any .obj file to ALLEGRO_VERTEX code?</title>
		<link>http://www.allegro.cc/forums/view/614206</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 01 May 2014 22:33:53 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So I wrote a routine to load a blender .obj file into my program.  This is just a simple cube:</p><p><span class="remote-thumbnail"><span class="json">{"name":"608542","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/f\/efc6caeda9d0a6762939e1e1b5eaec9b.png","w":644,"h":509,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/f\/efc6caeda9d0a6762939e1e1b5eaec9b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/f/efc6caeda9d0a6762939e1e1b5eaec9b-240.jpg" alt="608542" width="240" height="189" /></span></p><p>That exports like this:</p><pre class="terminal scroll"># Blender v2.64 (sub 0) OBJ File: &#39;&#39;
# www.blender.org
o Cube
v 300.000000 -300.000000 -299.999969
v 300.000000 -300.000000 300.000000
v -300.000031 -300.000000 299.999939
v -299.999878 -300.000000 -300.000122
v 300.000153 300.000000 -299.999847
v 299.999817 300.000000 300.000183
v -300.000122 300.000000 299.999878
v -299.999969 300.000000 -300.000000
s off
f 1 2 3 4
f 5 8 7 6
f 1 5 6 2
f 2 6 7 3
f 3 7 8 4
f 5 1 4 8</pre><p>

And when displayed it looks like this:</p><p><span class="remote-thumbnail"><span class="json">{"name":"608541","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/c\/ec2f741c5e888f24a33d98427083e1f5.png","w":644,"h":509,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/c\/ec2f741c5e888f24a33d98427083e1f5"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/c/ec2f741c5e888f24a33d98427083e1f5-240.jpg" alt="608541" width="240" height="189" /></span></p><p>So obviously I&#39;m getting <i>something</i> right.  It looks like the coordinates are being imported correctly, but not being drawn correctly.  I tried different ALLEGRO_PRIM_TYPEs because it seems like that might be what&#39;s causing it to not work, and they changed the way it displayed but never displayed correctly.  I tried reversing the order of the vertexes, cause, who knows that might do something. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>here&#39;s the import function:
</p><div class="spoiler"><p>
</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="k1">class</span> Model
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>public:
<span class="number">  4</span>  std::vector<span class="k3">&lt;</span>std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt;&gt; face<span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_PRIM_TYPE"><span class="a">ALLEGRO_PRIM_TYPE</span></a> prim_type<span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>texture<span class="k2">;</span>
<span class="number">  7</span>  <span class="c">//placement3d place;</span>
<span class="number">  8</span>
<span class="number">  9</span>  Model<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">void</span> clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">void</span> scale<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  <span class="k1">void</span> move<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">void</span> move_to<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  
<span class="number"> 16</span>  <span class="k1">void</span> set_texture<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="k1">void</span> load_obj<span class="k2">(</span>std::string filename, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span><span class="k2">;</span>  <span class="c">// see below</span>
<span class="number"> 19</span>
<span class="number"> 20</span>  <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>
<span class="number"> 24</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">void</span> Model::load_obj<span class="k2">(</span>std::string filename, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 27</span><span class="k2">{</span>
<span class="number"> 28</span>  clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span>
<span class="number"> 31</span>  std::ifstream in<span class="k2">(</span>filename, std::ios::in<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>in<span class="k2">)</span>
<span class="number"> 33</span>  <span class="k2">{</span>
<span class="number"> 34</span>    std::cerr <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Cannot open "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> filename <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 35</span>    <span class="c">//exit(1);</span>
<span class="number"> 36</span>  <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>  <span class="c">//prim_type = ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_LIST;</span>
<span class="number"> 39</span>  <span class="c">//prim_type = ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_STRIP;</span>
<span class="number"> 40</span>  prim_type <span class="k3">=</span> ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_FAN<span class="k2">;</span>
<span class="number"> 41</span>  <span class="c">//ALLEGRO_PRIM_TRIANGLE_FAN;</span>
<span class="number"> 42</span>
<span class="number"> 43</span>  <span class="c">//vec3d vec;</span>
<span class="number"> 44</span>  <span class="c">//Face *current_face = face;</span>
<span class="number"> 45</span>
<span class="number"> 46</span>  std::string <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">;</span>
<span class="number"> 47</span>  std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt; <span class="k3">*</span>current_face <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 48</span>  std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt; dummy_face<span class="k2">;</span>
<span class="number"> 49</span>  <span class="k1">float</span> x, y, z<span class="k2">;</span>
<span class="number"> 50</span>  <span class="k1">while</span> <span class="k2">(</span>getline<span class="k2">(</span>in, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 51</span>  <span class="k2">{</span>
<span class="number"> 52</span>    <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"o "</span><span class="k2">)</span>
<span class="number"> 53</span>  <span class="k2">{</span>
<span class="number"> 54</span>    face.push_back<span class="k2">(</span>dummy_face<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>    current_face <span class="k3">=</span> <span class="k3">&amp;</span>face.back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>  <span class="k2">}</span>
<span class="number"> 57</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"v "</span><span class="k2">)</span>
<span class="number"> 58</span>  <span class="k2">{</span>
<span class="number"> 59</span>      std::istringstream s<span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>    s <span class="k3">&gt;</span><span class="k3">&gt;</span> x<span class="k2">;</span> s <span class="k3">&gt;</span><span class="k3">&gt;</span> y<span class="k2">;</span> s <span class="k3">&gt;</span><span class="k3">&gt;</span> z<span class="k2">;</span>
<span class="number"> 61</span>    current_face-&gt;push_back<span class="k2">(</span>build_vertex<span class="k2">(</span>x, y, z, color, <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"> 62</span>    <span class="k2">}</span>
<span class="number"> 63</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"f "</span><span class="k2">)</span>
<span class="number"> 64</span>  <span class="k2">{</span>
<span class="number"> 65</span>    <span class="c">/*</span>
<span class="number"> 66</span><span class="c">      std::istringstream s(line.substr(2));</span>
<span class="number"> 67</span><span class="c">      GLushort a,b,c;</span>
<span class="number"> 68</span><span class="c">      s &gt;&gt; a; s &gt;&gt; b; s &gt;&gt; c;</span>
<span class="number"> 69</span><span class="c">      a--; b--; c--;</span>
<span class="number"> 70</span><span class="c"></span>
<span class="number"> 71</span><span class="c">      elements.push_back(a);</span>
<span class="number"> 72</span><span class="c">    elements.push_back(b);</span>
<span class="number"> 73</span><span class="c">    elements.push_back(c);</span>
<span class="number"> 74</span><span class="c">    */</span>
<span class="number"> 75</span>    <span class="k2">}</span>
<span class="number"> 76</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'#'</span><span class="k2">)</span> <span class="k2">{</span> <span class="c">/* ignoring this line */</span> <span class="k2">}</span>
<span class="number"> 77</span>    <span class="k1">else</span> <span class="k2">{</span> <span class="c">/* ignoring this line */</span> <span class="k2">}</span>
<span class="number"> 78</span>  <span class="k2">}</span>
<span class="number"> 79</span><span class="k2">}</span>
</div></div><p>
</p></div><p>

(I also have no idea how to get the texture applied/exported/imported.)</p><p>[edit:] After more poking, I think it has to do with the faces, I have an idea.</p><p>[edit 2:]<br />boohm! got it. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /><br /><span class="remote-thumbnail"><span class="json">{"name":"608544","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/c\/2c1537e594341a2fd814862e306a9752.png","w":629,"h":494,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/c\/2c1537e594341a2fd814862e306a9752"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/c/2c1537e594341a2fd814862e306a9752-240.jpg" alt="608544" width="240" height="188" /></span><br /><span class="remote-thumbnail"><span class="json">{"name":"608543","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/9\/e96cda0491c652395dc651c31aedaad1.png","w":629,"h":494,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/9\/e96cda0491c652395dc651c31aedaad1"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/9/e96cda0491c652395dc651c31aedaad1-240.jpg" alt="608543" width="240" height="188" /></span><br />(with random colors on the vertices.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Thu, 01 May 2014 07:24:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Damn Oates! Nice work!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 01 May 2014 10:36:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mark, is the code in your post the latest one that loads correctly? I can&#39;t see how you handle vertex ordering in the faces.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Thu, 01 May 2014 13:22:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Now my loader takes in uv textures! <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p><span class="remote-thumbnail"><span class="json">{"name":"608545","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/8\/b895d2e258bd8b16efc906985ddd3da6.png","w":852,"h":682,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/8\/b895d2e258bd8b16efc906985ddd3da6"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/8/b895d2e258bd8b16efc906985ddd3da6-240.jpg" alt="608545" width="240" height="192" /></span></p><p>It&#39;s all weird and half the coordinates are flipped and stuff, but who cares!! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> I can hack around that until I sort it out later!  Celebration!!! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614206/1000140#target">pkrcel</a> said:</div><div class="quote"><p>Mark, is the code in your post the latest one that loads correctly? I can&#39;t see how you handle vertex ordering in the faces. </p></div></div><p>

Here&#39;s the code, now.  It&#39;s nasty don&#39;t look at it <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" /> <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p><div class="spoiler"><p>
</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="number">   2</span><span class="k1">class</span> Model
<span class="number">   3</span><span class="k2">{</span>
<span class="number">   4</span>public:
<span class="number">   5</span>
<span class="number">   6</span>  std::vector<span class="k3">&lt;</span>std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt;&gt; face<span class="k2">;</span>
<span class="number">   7</span>
<span class="number">   8</span>  std::vector<span class="k3">&lt;</span>ALLEGRO_VERTEX&gt; vertexes<span class="k2">;</span>
<span class="number">   9</span>  std::vector<span class="k3">&lt;</span>vec2d&gt; uvs<span class="k2">;</span>
<span class="number">  10</span>  std::vector<span class="k3">&lt;</span>std::vector<span class="k3">&lt;</span>int&gt;&gt; face_index_lists<span class="k2">;</span>
<span class="number">  11</span>  std::vector<span class="k3">&lt;</span>std::vector<span class="k3">&lt;</span>int&gt;&gt; uv_index_lists<span class="k2">;</span>
<span class="number">  12</span>  <span class="c">//std::vector&lt;ModelFace&gt; face_definitions;</span>
<span class="number">  13</span>
<span class="number">  14</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_PRIM_TYPE"><span class="a">ALLEGRO_PRIM_TYPE</span></a> prim_type<span class="k2">;</span>
<span class="number">  15</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>texture<span class="k2">;</span>
<span class="number">  16</span>  <span class="c">//placement3d place;</span>
<span class="number">  17</span>
<span class="number">  18</span>  Model<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>
<span class="number">  20</span>  <span class="k1">void</span> clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>  <span class="k1">void</span> scale<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>  <span class="k1">void</span> move<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">void</span> move_to<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  
<span class="number">  25</span>  <span class="k1">void</span> set_texture<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span>  <span class="k1">void</span> load_obj<span class="k2">(</span>std::string filename, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span>  <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span>
<span class="number">  33</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="k1">void</span> Model::load_obj<span class="k2">(</span>std::string filename, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  36</span><span class="k2">{</span>
<span class="number">  37</span>  clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>  texture <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"data/bitmaps/pillar_texture-02.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span>
<span class="number">  42</span>  std::ifstream in<span class="k2">(</span>filename, std::ios::in<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>in<span class="k2">)</span>
<span class="number">  44</span>  <span class="k2">{</span>
<span class="number">  45</span>    std::cerr <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Cannot open "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> filename <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number">  46</span>    <span class="c">//exit(1);</span>
<span class="number">  47</span>  <span class="k2">}</span>
<span class="number">  48</span>
<span class="number">  49</span>  <span class="c">//prim_type = ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_LIST;</span>
<span class="number">  50</span>  <span class="c">//prim_type = ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_STRIP;</span>
<span class="number">  51</span>  prim_type <span class="k3">=</span> ALLEGRO_PRIM_TYPE::ALLEGRO_PRIM_TRIANGLE_FAN<span class="k2">;</span>
<span class="number">  52</span>  <span class="c">//ALLEGRO_PRIM_TRIANGLE_FAN;</span>
<span class="number">  53</span>
<span class="number">  54</span>  <span class="c">//vec3d vec;</span>
<span class="number">  55</span>  <span class="c">//Face *current_face = face;</span>
<span class="number">  56</span>
<span class="number">  57</span>  <span class="c">//std::vector&lt;ALLEGRO_VERTEX&gt; *current_face = NULL;</span>
<span class="number">  58</span>  <span class="c">//std::vector&lt;ALLEGRO_VERTEX&gt; dummy_face;</span>
<span class="number">  59</span>
<span class="number">  60</span>  std::string <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">;</span>
<span class="number">  61</span>  <span class="k1">float</span> x, y, z<span class="k2">;</span>
<span class="number">  62</span>  std::vector<span class="k3">&lt;</span>int&gt; dummy_face_index<span class="k2">;</span>
<span class="number">  63</span>  <span class="k1">while</span> <span class="k2">(</span>getline<span class="k2">(</span>in, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">)</span><span class="k2">)</span>
<span class="number">  64</span>  <span class="k2">{</span>
<span class="number">  65</span>    <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"o "</span><span class="k2">)</span>
<span class="number">  66</span>  <span class="k2">{</span>
<span class="number">  67</span>    <span class="c">//face.push_back(dummy_face);</span>
<span class="number">  68</span>    <span class="c">//current_face = &amp;face.back();</span>
<span class="number">  69</span>  <span class="k2">}</span>
<span class="number">  70</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"v "</span><span class="k2">)</span>
<span class="number">  71</span>  <span class="k2">{</span>
<span class="number">  72</span>      std::istringstream s<span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>    s <span class="k3">&gt;</span><span class="k3">&gt;</span> x<span class="k2">;</span> s <span class="k3">&gt;</span><span class="k3">&gt;</span> y<span class="k2">;</span> s <span class="k3">&gt;</span><span class="k3">&gt;</span> z<span class="k2">;</span>
<span class="number">  74</span>    vertexes.push_back<span class="k2">(</span>build_vertex<span class="k2">(</span>x, y, z, color::white, <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">  75</span>    <span class="k2">}</span>
<span class="number">  76</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">3</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"vt "</span><span class="k2">)</span>
<span class="number">  77</span>  <span class="k2">{</span>
<span class="number">  78</span>      std::istringstream s<span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>    s <span class="k3">&gt;</span><span class="k3">&gt;</span> x<span class="k2">;</span> s <span class="k3">&gt;</span><span class="k3">&gt;</span> y<span class="k2">;</span>
<span class="number">  80</span>    uvs.push_back<span class="k2">(</span>vec2d<span class="k2">(</span>x, y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    <span class="k2">}</span>
<span class="number">  82</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">0</span>,<span class="n">2</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"f "</span><span class="k2">)</span>
<span class="number">  83</span>  <span class="k2">{</span>
<span class="number">  84</span>      std::istringstream s<span class="k2">(</span>line.substr<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>    face_index_lists.push_back<span class="k2">(</span>dummy_face_index<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>    uv_index_lists.push_back<span class="k2">(</span>dummy_face_index<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>    std::vector<span class="k3">&lt;</span>std::string&gt; tokens <span class="k3">=</span> php::explode<span class="k2">(</span><span class="s">" "</span>, line.substr<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>tokens.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  90</span>    <span class="k2">{</span>
<span class="number">  91</span>      std::vector<span class="k3">&lt;</span>std::string&gt; face_parts <span class="k3">=</span> php::explode<span class="k2">(</span><span class="s">"/"</span>, tokens<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>      <span class="c">// get the face vertex</span>
<span class="number">  94</span>      <span class="k1">if</span> <span class="k2">(</span>face_parts.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number">  95</span>        face_index_lists.back<span class="k2">(</span><span class="k2">)</span>.push_back<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>face_parts<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>      <span class="c">// get the uv vertex</span>
<span class="number">  98</span>      <span class="k1">if</span> <span class="k2">(</span>face_parts.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number">  99</span>        uv_index_lists.back<span class="k2">(</span><span class="k2">)</span>.push_back<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_54.html" target="_blank">atoi</a><span class="k2">(</span>face_parts<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>    <span class="k2">}</span>
<span class="number"> 101</span>    <span class="k2">}</span>
<span class="number"> 102</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a><span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">'#'</span><span class="k2">)</span> <span class="k2">{</span> <span class="c">/* ignoring this line */</span> <span class="k2">}</span>
<span class="number"> 103</span>    <span class="k1">else</span> <span class="k2">{</span> <span class="c">/* ignoring this line */</span> <span class="k2">}</span>
<span class="number"> 104</span>  <span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Model Loaded"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 107</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"  uvs.size(): "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> uvs.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span><span class="k2">}</span>
<span class="number"> 109</span>
<span class="number"> 110</span>
<span class="number"> 111</span>
<span class="number"> 112</span>
<span class="number"> 113</span>
<span class="number"> 114</span><span class="k1">void</span> Model::draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 115</span><span class="k2">{</span>
<span class="number"> 116</span>  <span class="c">//ALLEGRO_TRANSFORM transform;</span>
<span class="number"> 117</span>  <span class="c">//al_identity_transform(&amp;transform);</span>
<span class="number"> 118</span>
<span class="number"> 119</span>  <span class="c">//place.start_transform();</span>
<span class="number"> 120</span>
<span class="number"> 121</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>face.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 122</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> f<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> f<span class="k3">&lt;</span>face.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> f<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 123</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>face<span class="k2">[</span>f<span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, NULL, texture, <span class="n">0</span>, face<span class="k2">[</span>f<span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span>, prim_type<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>face_index_lists.empty<span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>vertexes.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 125</span>  <span class="k2">{</span>
<span class="number"> 126</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>face_index_lists.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 127</span>    <span class="k2">{</span>
<span class="number"> 128</span>      <span class="c">// reset the uv coordinates</span>
<span class="number"> 129</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> j<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span>face_index_lists<span class="k2">[</span>i<span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 130</span>      <span class="k2">{</span>
<span class="number"> 131</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> <span class="k3">*</span>this_vertex <span class="k3">=</span> <span class="k3">&amp;</span>vertexes<span class="k2">[</span>face_index_lists<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 132</span>        <span class="c">//uv_index_lists[i][j];</span>
<span class="number"> 133</span>        this_vertex-&gt;u <span class="k3">=</span> uvs<span class="k2">[</span>uv_index_lists<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span><span class="k2">]</span>.x <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>texture<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>        this_vertex-&gt;v <span class="k3">=</span> <span class="k3">-</span>uvs<span class="k2">[</span>uv_index_lists<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span>j<span class="k2">]</span><span class="k2">]</span>.y <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>texture<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>        <span class="c">//this_vertex-&gt;u = random_float(0, 1) * al_get_bitmap_width(texture);</span>
<span class="number"> 136</span>        <span class="c">//this_vertex-&gt;v = random_float(0, 1) * al_get_bitmap_height(texture);</span>
<span class="number"> 137</span>      <span class="k2">}</span>
<span class="number"> 138</span>      <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span><span class="k3">&amp;</span>vertexes<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, NULL, texture, <span class="k3">&amp;</span>face_index_lists<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, face_index_lists<span class="k2">[</span>i<span class="k2">]</span>.size<span class="k2">(</span><span class="k2">)</span>, prim_type<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>    <span class="k2">}</span>
<span class="number"> 140</span>  <span class="k2">}</span>
<span class="number"> 141</span>
<span class="number"> 142</span>
<span class="number"> 143</span>
<span class="number"> 144</span>  <span class="c">//place.restore_transform();</span>
<span class="number"> 145</span><span class="k2">}</span>
</div></div><p>
</p></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Thu, 01 May 2014 21:37:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 01 May 2014 22:26:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool, I am not familiar with blender obj files.....has it any info about the texture embedded in it?</p><p>Nice job anyway Mark.....I <b>still</b> struggle a bit with how you handle vertex indexes but it is really really cool.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Thu, 01 May 2014 22:33:53 +0000</pubDate>
	</item>
</rss>
