<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>espressoSoft</title>
	<atom:link href="http://espressosoft.com/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://espressosoft.com/wordpress</link>
	<description>John Bowers on Coffee &#38; Source Code</description>
	<pubDate>Thu, 21 May 2009 20:03:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Hmmm</title>
		<link>http://espressosoft.com/wordpress/?p=28</link>
		<comments>http://espressosoft.com/wordpress/?p=28#comments</comments>
		<pubDate>Fri, 27 Mar 2009 23:51:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=28</guid>
		<description><![CDATA[Not sure anyone cares, but just in case: the reason I&#8217;ve been un-contactable for 6 months (and slow to approve comments) is b/c I&#8217;ve been volunteering in Africa at a rural Hospital (see katherineandjohn.org). I helped to get an OpenMRS (openmrs.org) system up and running at the hospital. I think we need more computer science [...]]]></description>
			<content:encoded><![CDATA[<p>Not sure anyone cares, but just in case: the reason I&#8217;ve been un-contactable for 6 months (and slow to approve comments) is b/c I&#8217;ve been volunteering in Africa at a rural Hospital (see katherineandjohn.org). I helped to get an OpenMRS (openmrs.org) system up and running at the hospital. I think we need more computer science students to do volunteer work overseas and put their skills to good use. Anyway, I&#8217;m back in the West and Katherine (my wife) and I are starting to settle in. As soon as I&#8217;m programming again (hopefully with an update or two to StarSmasher if time allows) I&#8217;ll start blogging again.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=28</wfw:commentRss>
		</item>
		<item>
		<title>Displaying Models from Obj-C Exporter</title>
		<link>http://espressosoft.com/wordpress/?p=27</link>
		<comments>http://espressosoft.com/wordpress/?p=27#comments</comments>
		<pubDate>Fri, 17 Oct 2008 09:48:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[code::]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[opengl es]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=27</guid>
		<description><![CDATA[Okay, I will write a more in depth tutorial later (probably with the GameModel class that I wrote) but I&#8217;m currently in Uganda, Africa (for about 6 mos) and net access is a bit spotty so here are a few hints to maybe get those of you who are having trouble started:
Again, my usual disclaimer: [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, I will write a more in depth tutorial later (probably with the GameModel class that I wrote) but I&#8217;m currently in Uganda, Africa (for about 6 mos) and net access is a bit spotty so here are a few hints to maybe get those of you who are having trouble started:</p>
<p>Again, my usual disclaimer: I am not an expert, I learned this as I wrote StarSmasher so I can&#8217;t promise anything I do is the best way to do it, and as always if you know a better way please let me/everyone know.</p>
<p>My draw script does the following (keep in mind this is part of a class so it refers to self and member data of the class but I think it should be fairly self explanatory):</p>
<pre>	//Check that this model isn't already loaded, we don't need to unnecessarily load it.
	if (lastModel != self) {
		//Loads the vertex array into OpenGL ES:
		glVertexPointer(3, GL_FLOAT, 0, facesArray);
		if (hasTexCoords) {
			glBindTexture(GL_TEXTURE_2D, texture[0]); //texture[0] is an OpenGL texture id, loaded by my class during its init method.
			glTexCoordPointer(2, GL_FLOAT, 0, textureCoordsArray);
		}
		lastModel = self;
	}
	//Draw the model:
	glDrawArrays(GL_TRIANGLES, 0, facesCount*3);</pre>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>StarSmasher and TouchFighter 2</title>
		<link>http://espressosoft.com/wordpress/?p=26</link>
		<comments>http://espressosoft.com/wordpress/?p=26#comments</comments>
		<pubDate>Sat, 06 Sep 2008 12:09:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog::]]></category>

		<category><![CDATA[rant]]></category>

		<category><![CDATA[starsmasher]]></category>

		<category><![CDATA[touchfighter]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=26</guid>
		<description><![CDATA[[rant]
I am so tired of people saying that StarSmasher is just a version of TouchFighter. For the record: I had already written about 80% of the first iteration of StarSmasher&#8217;s game engine before I had even heard of TouchFighter. I have since downloaded TouchFighter (why wouldn&#8217;t you want to learn from well written sample coe) [...]]]></description>
			<content:encoded><![CDATA[<p>[rant]<br />
I am so tired of people saying that StarSmasher is just a version of TouchFighter. For the record: I had already written about 80% of the first iteration of StarSmasher&#8217;s game engine before I had even heard of TouchFighter. I have since downloaded TouchFighter (why wouldn&#8217;t you want to learn from well written sample coe) but the only thing I used it for was to learn how to produce sound effects. I wrote SS because I love on-rails games and I thought the accelerometer would be a perfect control interface for one (oh, and because the Wii continues to disappoint me in its on-rails and flight-sim offerings). </p>
<p>For those of you who haven&#8217;t played TouchFighter, it&#8217;s pretty pointless as a game. It is a turret based game, which essentially means your ship never moves. You change your ships rotation by tilting the device but the only moving parts are the enemy ships that come screaming at you. In other words there is less gameplay value there than the Free Flight version of StarSmasher.</p>
<p>The StarSmasher game engine is 100% my coding, with thanks to the guys in the #iphonedev freenode rooms for helping me solve some particular OpenGL problems, and isn&#8217;t even the same style of game as TF. Yeah TF is a space shooter, but the similarities end there for the most part. SS is about dodging asteroids and flying with style while TF, which really has no &#8220;flying,&#8221; is about accurately aiming your iPhone at targets moving towards you on the screen. </p>
<p>I just can&#8217;t understand why people who have never played StarSmasher or TF would rate SS poorly on iTunes. I think people saw the TF video and thought it was amazing because it was really the first video demonstrating the iPhone&#8217;s accelerometer controls, but that is it, a demo.</p>
<p>Oh well, there is nothing I can do about it, people will continue to think that SS is TF.<br />
[/rant]</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=26</wfw:commentRss>
		</item>
		<item>
		<title>Export MySQL Database into SQLite</title>
		<link>http://espressosoft.com/wordpress/?p=25</link>
		<comments>http://espressosoft.com/wordpress/?p=25#comments</comments>
		<pubDate>Sun, 31 Aug 2008 16:45:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=25</guid>
		<description><![CDATA[It took me awhile to figure this out, and I thought maybe some other people would like to know as well. I found a MySQL export of the King James Version of the Bible that I need for a project I&#8217;m working on. It is a huge file and for some reason this was causing [...]]]></description>
			<content:encoded><![CDATA[<p>It took me awhile to figure this out, and I thought maybe some other people would like to know as well. I found a MySQL export of the King James Version of the Bible that I need for a project I&#8217;m working on. It is a huge file and for some reason this was causing <tt>sqlite3</tt> some consternation when I attempted the following:</p>
<p><tt><br />
more kjv.sql | sqlite3 kjv.db<br />
</tt></p>
<p>For some reason this was giving me errors at lines that when entered by hand weren&#8217;t having problems. Since this is, obviously, a huge database I can&#8217;t go and fix all these manually. The kjv.sql file was written for MySQL so what I ended up doing was this:</p>
<p>First, I downloaded MAMP (a Mac OS X/Apache/MySQL/PHP one-click installation) because I knew I&#8217;d probably want it later and it doesn&#8217;t require any type of installation and/or configuration to get MySQL running. I then started the MAMP servers (via <tt>MAMP.app</tt>). Then I used MAMP&#8217;s phpMyAdmin installation to import my <tt>kjv.sql</tt> file. Then I exported the entire database to a CSV file which was delimited by &#8216;@&#8217; signs and didn&#8217;t put any quotes around the data. The only problem with doing it this way is that carriage returns in the database are treated by <tt>sqlite3</tt> as new entries. Fortunately for me this only occurred once. I went into the file with <tt>vi</tt>, jumped directly to the problem line, got rid of the rogue newlines, and then everything was ready for import. </p>
<p>To import you need to first create your table in your database using sqlite3. After that you run a command similar to:</p>
<p><tt><br />
sqlite3 -separator @ kjv.db &#8220;.import kjv_db2-1.csv BibleTable&#8221;<br />
</tt></p>
<p>If there is an easier way to do this, I&#8217;m all ears.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>OpenGL Texture Loader</title>
		<link>http://espressosoft.com/wordpress/?p=24</link>
		<comments>http://espressosoft.com/wordpress/?p=24#comments</comments>
		<pubDate>Sat, 30 Aug 2008 17:42:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[code::]]></category>

		<category><![CDATA[iPhone dev]]></category>

		<category><![CDATA[Memory Management]]></category>

		<category><![CDATA[opengl]]></category>

		<category><![CDATA[opengl es]]></category>

		<category><![CDATA[Snippet]]></category>

		<category><![CDATA[starsmasher]]></category>

		<category><![CDATA[texture]]></category>

		<category><![CDATA[texture loader]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=24</guid>
		<description><![CDATA[The iPhone has an extremely limited amount of RAM (especially for doing 3D work). During development of the latest 1.1.0 release of StarSmasher I ran up against the glass ceiling on the RAM quite a lot. StarSmasher was only using about 20 MB of RAM at peak levels but this was enough for the app [...]]]></description>
			<content:encoded><![CDATA[<p>The iPhone has an extremely limited amount of RAM (especially for doing 3D work). During development of the latest 1.1.0 release of StarSmasher I ran up against the glass ceiling on the RAM quite a lot. StarSmasher was only using about 20 MB of RAM at peak levels but this was enough for the app to receive low memory warnings from the OS. I don&#8217;t load that many textures, but the menu screen textures where full resolution 512&#215;512 jpegs and I wasn&#8217;t doing any kind of unloading when they weren&#8217;t being used. Ultimately, this caused the app to crash after a couple of levels. I had written it this way initially to make the app feel snappier (because I figured 20 megs wasn&#8217;t that bad) and because I&#8217;m learning OpenGL as I go and didn&#8217;t fully understand the texture management. </p>
<p>Now I&#8217;ve implemented just in time texture loading for the menu screens that checks if the texture is loaded on draw and loads it if necessary. When a menu screen is exited (for instance by tapping the &#8220;done&#8221; button) I unload the texture (with glDeleteTextures). Below is the TextureLoader class I wrote to manage my textures. </p>
<p><span id="more-24"></span></p>
<p>I&#8217;m not sure if this is or isn&#8217;t a good way to do this, but you are welcome to use it and/or make suggestions. Also, because of the NDA, there is one line that is SDK specific that I have removed. It is:</p>
<pre>
        textureImage = getCGImageForImageNamed(name);
</pre>
<p>in TextureLoader.m. You will need to replace this line with the way to get a CGImage for whichever platform you are using. For Mac OS X look at <a href="http://developer.apple.com/documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/chapter_6_section_3.html">this page</a>. For the iPhone SDK refer to Apple&#8217;s documentation and example code. Also you will need to #import the appropriate libraries in TextureImage.h to load textureImage. </p>
<p>Enjoy&#8230; and again, I welcome suggestions, I&#8217;ve still got loads to learn about graphics development.</p>
<p>This stuff is licensed by:<br />
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/"><img style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png" alt="Creative Commons License" /></a><br />
<span>TextureLoader.m</span> by <a rel="cc:attributionURL" href="http://www.espressosoft.com">John Bowers, espressoSoft.com</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons Attribution-Share Alike 3.0 United States License</a>.</p>
<p>TextureLoader.h</p>
<pre>
//
//  TextureLoader.h
//  Starfield
//
//  Created by John Bowers on 8/3/08.
//  Copyright 2008 John Bowers. Some rights reserved.
//

@interface TextureLoader : NSObject {

}
+ (void) initialize;
+ (GLuint) textureWithName:(NSString*)name;
+ (BOOL) textureIsLoaded:(NSString*)name;
+ (void) unloadTexture:(NSString*)name;
@end
</pre>
<p>TextureLoader.m</p>
<pre>
//
//  TextureLoader.m
//  Starfield
//
//  Created by John Bowers on 8/3/08.
//  Copyright 2008 John Bowers. All rights reserved.
//

#import "TextureLoader.h"

static NSMutableDictionary* gameTextures;

@implementation TextureLoader

+ (void) initialize {
    gameTextures = [NSMutableDictionary new];
}

+ (BOOL) textureIsLoaded:(NSString*)name {
    return [gameTextures objectForKey:name] != nil;
}

+ (GLuint) textureWithName:(NSString*)name {
    NSNumber *textureNumber = [gameTextures objectForKey:name];
    if (textureNumber) {
        return [textureNumber unsignedIntValue];
    } else {
        //Load the texture:
        GLuint texture[1];
        CGImageRef textureImage;
        CGContextRef textureContext;
        GLubyte *textureData;
        size_t textureWidth, textureHeight;

        textureImage = getCGImageForImageNamed(name);
        textureWidth = CGImageGetWidth(textureImage);
        textureHeight = CGImageGetHeight(textureImage);

        if (textureImage) {
            textureData = (GLubyte*) malloc(textureWidth*textureHeight*4);
            textureContext = CGBitmapContextCreate(textureData, textureWidth, textureHeight, 8, textureWidth*4, CGImageGetColorSpace(textureImage), kCGImageAlphaPremultipliedLast);

            CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (CGFloat)textureWidth, (CGFloat)textureHeight), textureImage);
            CGContextRelease(textureContext);

            glGenTextures(1, texture);
            glBindTexture(GL_TEXTURE_2D, texture[0]);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

            free(textureData);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        }

        [gameTextures setObject:[NSNumber numberWithUnsignedInt:texture[0]] forKey:name];
        return texture[0];
    }
}

+ (void) unloadTexture:(NSString*)name {
    NSNumber *textureNumber = [gameTextures objectForKey:name];
    if (textureNumber) {
        [gameTextures removeObjectForKey:name];
        GLuint texture[1];
        texture[0] = [textureNumber unsignedIntValue];
        glDeleteTextures(1, texture);
    }
}

@end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=24</wfw:commentRss>
		</item>
		<item>
		<title>StarSmasher Website Up</title>
		<link>http://espressosoft.com/wordpress/?p=23</link>
		<comments>http://espressosoft.com/wordpress/?p=23#comments</comments>
		<pubDate>Sat, 19 Jul 2008 04:17:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blog::]]></category>

		<category><![CDATA[link]]></category>

		<category><![CDATA[starsmasher]]></category>

		<category><![CDATA[website]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=23</guid>
		<description><![CDATA[I added another wordpress blog as a place for people to give me feedback on StarSmasher. Find it here.
]]></description>
			<content:encoded><![CDATA[<p>I added another wordpress blog as a place for people to give me feedback on StarSmasher. Find it <a href="http://www.espressosoft.com/starsmasher/?page_id=2">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>StarSmasher out for Review!</title>
		<link>http://espressosoft.com/wordpress/?p=22</link>
		<comments>http://espressosoft.com/wordpress/?p=22#comments</comments>
		<pubDate>Fri, 18 Jul 2008 16:01:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blender]]></category>

		<category><![CDATA[blog::]]></category>

		<category><![CDATA[iPhone dev]]></category>

		<category><![CDATA[starsmasher]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=22</guid>
		<description><![CDATA[
The game is out for review, link coming soon. Above is the screenshot I chose for the App Store.
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://www.espressosoft.com/images/blog/Screenshot1.jpg" alt="App Store Screenshot" /></p>
<p>The game is out for review, link coming soon. Above is the screenshot I chose for the App Store.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>Blender Objective-C Model Exporter</title>
		<link>http://espressosoft.com/wordpress/?p=21</link>
		<comments>http://espressosoft.com/wordpress/?p=21#comments</comments>
		<pubDate>Tue, 15 Jul 2008 00:28:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blender]]></category>

		<category><![CDATA[code::]]></category>

		<category><![CDATA[3d model exporter]]></category>

		<category><![CDATA[blender export]]></category>

		<category><![CDATA[blender export script]]></category>

		<category><![CDATA[blender script]]></category>

		<category><![CDATA[export]]></category>

		<category><![CDATA[model export]]></category>

		<category><![CDATA[model exporter]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=21</guid>
		<description><![CDATA[Below is a script I wrote to export models from blender into a *.h file that contains two static GLfloat arrays. It requires that the model be already triangulated in Blender (maybe later I&#8217;ll add code to go ahead and triangulate the mesh if it needs it&#8230; oh yeah, and to manually triangulate a mesh [...]]]></description>
			<content:encoded><![CDATA[<p>Below is a script I wrote to export models from blender into a *.h file that contains two static GLfloat arrays. It requires that the model be already triangulated in Blender (maybe later I&#8217;ll add code to go ahead and triangulate the mesh if it needs it&#8230; oh yeah, and to manually triangulate a mesh in Blender&#8217;s edit mode hit &#8216;Ctrl+T&#8217;) and that the mesh already have UV texture coordinates. Also, it only uses GL_TRIANGLES mode right now. Later I am going to update it to use GL_TRIANGLE_STRIPS instead of GL_TRIANGLES. Finally it doesn&#8217;t apply Object rotations and scale. You should apply them in Object Mode Transform-&gt;Clear/Apply-&gt;Apply Scale/Rotation (or Ctrl+A).</p>
<p><span id="more-21"></span></p>
<p>Note: Just in case you didn&#8217;t catch it above the mesh you are exporting needs to be triangulated (via &#8216;Ctrl+T&#8217;) and have UV texture coordinates (in UV Face Select mode hit &#8216;U&#8217; and choose some sort of UV unwrapping, if it doesn&#8217;t the script will crash instead of exiting gracefully).</p>
<p>To install this python script save it to the /.blender/scripts/ directory (on Mac OS X this is Blender.app/Contents/MacOS/.blender/scripts/). I called it export_objc.py. Also, if you make any modifications to the script, (say add some logic to only add UV texturing if it has been set, or to automatically triangulate the mesh please let me know, I&#8217;d love to update this code).</p>
<pre style="font-size: 8pt;">#!BPY

"""
Name: 'OpenGL ES/ObjC export (.h)...'
Blender: 245
Group: 'Export'
Tooltip: 'Export selected mesh to an OpenGL|ES ObjC static array (*.h)'
"""

__author__ = "John Bowers (quadelirus)"
__url__ = ("blender", "Author's homepage, http://www.espressosoft.com")
__version__ = "1.0"

__bpydoc__ = """\
This script exports meshes into two static GLfloat arrays
that can be used to render the model in an OpenGL|ES application.

I designed it as a helper script for some code I am writing for the
iPhone.
"""

# $Id:
#
# Copyright (c) 2008 John Bowers
# http://www.espressosoft.com
# July 13, 2008

# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****

import Blender
import BPyMessages

def write_header(filename):
     file = open(filename, 'wb')
     scn = Blender.Scene.GetCurrent()
     object = scn.objects.active
     if not object or object.type != 'Mesh':
          BPyMessages.Error_NoMeshActive()
          return
     mesh = object.getData(mesh=1)
     file.write("/*********************************************************\n")
     file.write(" * Exported using the ObjC exporter from espressoSoft.com\n")
     file.write(" * Written by: John Bowers\n")
     file.write(" * \n")
     file.write(" * Model: " + object.name)
     file.write("********************************************************/\n")
     #write the faces:
     file.write("static GLfloat " + object.name + "_vertData[] = {\n&#8221;)
     for face in mesh.faces:
          file.write(&#8221;\t&#8221; + str(face.verts[0].co.x) + &#8220;, &#8221; + str(face.verts[0].co.y) + &#8220;, &#8221; + str(face.verts[0].co.z) + &#8220;, &#8220;)
          file.write(str(face.verts[1].co.x) + &#8220;, &#8221; + str(face.verts[1].co.y) + &#8220;, &#8221; + str(face.verts[1].co.z) + &#8220;, &#8220;)
          file.write(str(face.verts[2].co.x) + &#8220;, &#8221; + str(face.verts[2].co.y) + &#8220;, &#8221; + str(face.verts[2].co.z) + &#8220;,\n&#8221;)
     file.write(&#8221;};\n&#8221;)
     file.write(&#8221;static GLfloat &#8221; + object.name + &#8220;_texData[] = {\n&#8221;)
     for face in mesh.faces:
          file.write(&#8221;\t&#8221; + str(face.uv[0][0]) + &#8220;, &#8221; + str(face.uv[0][1]) + &#8220;, &#8220;)
          file.write(str(face.uv[1][0]) + &#8220;, &#8221; + str(face.uv[1][1]) + &#8220;, &#8220;)
          file.write(str(face.uv[2][0]) + &#8220;, &#8221; + str(face.uv[2][1]) + &#8220;,\n&#8221;)
     file.write(&#8221;};\n&#8221;)
     file.write(&#8221;int &#8221; + object.name + &#8220;_facesCount = &#8221; + str(len(mesh.faces)) + &#8220;;\n&#8221;)
     file.close()

def fs_callback(filename):
     if not filename.lower().endswith(&#8217;.h&#8217;): filename += &#8216;.h&#8217;
     write_header(filename)

Blender.Window.FileSelector(fs_callback, &#8220;Export ObjC *.h File&#8221;, Blender.sys.makename(ext=&#8217;.h&#8217;))</pre>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=21</wfw:commentRss>
		</item>
		<item>
		<title>Developer Program Open!</title>
		<link>http://espressosoft.com/wordpress/?p=20</link>
		<comments>http://espressosoft.com/wordpress/?p=20#comments</comments>
		<pubDate>Sat, 12 Jul 2008 23:25:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blender]]></category>

		<category><![CDATA[blog::]]></category>

		<category><![CDATA[developer program]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[iPhone dev]]></category>

		<category><![CDATA[iphone development]]></category>

		<category><![CDATA[iphone game]]></category>

		<category><![CDATA[itouch]]></category>

		<category><![CDATA[starsmasher]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=20</guid>
		<description><![CDATA[Alright! Those of us who were still waiting for acceptance into the iPhone developer inner sanctum have at long last been allowed in! StarSmasher is now running on my development device but its running between 15 to 20 frames per second and it takes a solid 15 seconds to load. Now its time to optimize.
UPDATE: [...]]]></description>
			<content:encoded><![CDATA[<p>Alright! Those of us who were still waiting for acceptance into the iPhone developer inner sanctum have at long last been allowed in! StarSmasher is now running on my development device but its running between 15 to 20 frames per second and it takes a solid 15 seconds to load. Now its time to optimize.</p>
<p>UPDATE: after rewriting a major portion of the game controller and the object models the game is now running at a smooth 28 fps. Looks and feels great.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=20</wfw:commentRss>
		</item>
		<item>
		<title>Three More Screenshots</title>
		<link>http://espressosoft.com/wordpress/?p=19</link>
		<comments>http://espressosoft.com/wordpress/?p=19#comments</comments>
		<pubDate>Fri, 11 Jul 2008 17:25:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[blender]]></category>

		<category><![CDATA[blog::]]></category>

		<category><![CDATA[3d]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[game]]></category>

		<category><![CDATA[game dev]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[iPhone dev]]></category>

		<category><![CDATA[iphone development]]></category>

		<category><![CDATA[iphone game]]></category>

		<category><![CDATA[itouch]]></category>

		<category><![CDATA[opengl]]></category>

		<category><![CDATA[opengl dev]]></category>

		<category><![CDATA[opengl es]]></category>

		<category><![CDATA[screenshots]]></category>

		<category><![CDATA[starsmasher]]></category>

		<guid isPermaLink="false">http://espressosoft.com/wordpress/?p=19</guid>
		<description><![CDATA[
Enemy ships attacking from the space station.
 

New Laser Model
 

One More for an Even 3.
]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://www.espressosoft.com/images/blog/gamepic10.png" alt="Enemy ships attacking from the space station." /></p>
<p>Enemy ships attacking from the space station.</p>
<p> </p>
<p><img class="alignnone" src="http://www.espressosoft.com/images/blog/gamepic11.png" alt="New Laser Model" /></p>
<p>New Laser Model</p>
<p> </p>
<p><img class="alignnone" src="http://www.espressosoft.com/images/blog/gamepic12.png" alt="One More for an Even 3." /></p>
<p>One More for an Even 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://espressosoft.com/wordpress/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
	</channel>
</rss>
