<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GaanZa &#187; Opengl</title>
	<atom:link href="http://www.gaanza.com/blog/category/opengl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gaanza.com</link>
	<description></description>
	<lastBuildDate>Tue, 03 Jan 2012 10:09:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>2D Rain Effect</title>
		<link>http://www.gaanza.com/blog/2d-rain-effect/</link>
		<comments>http://www.gaanza.com/blog/2d-rain-effect/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 05:40:10 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Opengl]]></category>
		<category><![CDATA[Slick 2D]]></category>
		<category><![CDATA[lwjgl]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/?p=382</guid>
		<description><![CDATA[Hola Everyone. I am working on a level for 2d game where i needed to add a rain effects. I am using Slick 2D library for making my 2d game. Before i started working on making 2D rain effect , i discussed this topic on slick 2d forum for how to get started ? Here [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Hola Everyone.</strong><br />
I am working on a level for 2d game where i needed to add a rain effects. I am using Slick 2D library for making my 2d game. Before i started working on making  2D rain effect , i discussed this topic on slick 2d forum for how to get started ? Here is the <a href="http://slick.javaunlimited.net/viewtopic.php?p=13771#13771" target="_blank">forum thread</a>. You can check it out.<br />
So i wrote a simple code to create a rain effect:<br />
1)	Make a Rain Drop, i wrote a class for Rain Drop that extends Polygon class. Yes i m creating rain drops with polygons.<br />
2)	Create number of drops at random coordinates  and simulate it across the screen i.e make them fall. You can use wind factor also for providing bit more interesting.</p>
<p><a href="http://www.gaanza.com/wp-content/uploads/2010/03/rain1.png"><img class="alignnone size-full wp-image-388" title="rain" src="http://www.gaanza.com/wp-content/uploads/2010/03/rain1.png" alt="" width="599" height="768" /></a><br />
So this is the way i started.</p>
<p>Here is the Rain Drop class:</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">import org.newdawn.slick.geom.Polygon;</span></p>
<p><span class="kw2">public</span> <span class="kw2">class</span> RainDrop <span class="kw2">extends</span> <a href="http://www.google.com/search?q=allinurl%3APolygon+java.sun.com&#038;bntl=1"><span class="kw3">Polygon</span></a><span class="br0">&#123;</span><br />
<span class="kw2">public</span> RainDrop<span class="br0">&#40;</span><span class="kw4">int</span> size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
super<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="coMULTI">/** coordinates of vertices of polygon(rain drop) */</span><br />
<span class="kw2">this</span>.<span class="me1">addPoint</span><span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
<span class="kw2">this</span>.<span class="me1">addPoint</span><span class="br0">&#40;</span><span class="nu0">0</span>, size<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This is the main class where we are using rain drops and simulating it to create a simple rain effect, nothing fancy.</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">import java.util.logging.Level;</span><br />
<span class="co2">import java.util.logging.Logger;</span><br />
<span class="co2">import org.newdawn.slick.AppGameContainer;</span><br />
<span class="co2">import org.newdawn.slick.BasicGame;</span><br />
<span class="co2">import org.newdawn.slick.Color;</span><br />
<span class="co2">import org.newdawn.slick.GameContainer;</span><br />
<span class="co2">import org.newdawn.slick.Graphics;</span><br />
<span class="co2">import org.newdawn.slick.Image;</span><br />
<span class="co2">import org.newdawn.slick.SlickException;</span></p>
<p><span class="kw2">public</span> <span class="kw2">class</span> Rainy <span class="kw2">extends</span> BasicGame<span class="br0">&#123;</span></p>
<p><span class="kw2">private</span> RainDrop<span class="br0">&#91;</span><span class="br0">&#93;</span> drops;<br />
<span class="kw2">private</span> <a href="http://www.google.com/search?q=allinurl%3AImage+java.sun.com&#038;bntl=1"><span class="kw3">Image</span></a> background;</p>
<p><span class="kw2">public</span> Rainy<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;super<span class="br0">&#40;</span><span class="st0">&#8220;&#8221;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<span class="kw2">try</span> <span class="br0">&#123;</span><br />
AppGameContainer app = <span class="kw2">new</span> AppGameContainer<span class="br0">&#40;</span><span class="kw2">new</span> Rainy<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
app.<span class="me1">setDisplayMode</span><span class="br0">&#40;</span><span class="nu0">1024</span>, <span class="nu0">768</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;<br />
app.<span class="me1">setTargetFrameRate</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span>;<br />
app.<span class="me1">setShowFPS</span><span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span>;<br />
app.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span>SlickException ex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
Logger.<span class="me1">getLogger</span><span class="br0">&#40;</span>Rainy.<span class="kw2">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">log</span><span class="br0">&#40;</span>Level.<span class="me1">SEVERE</span>, <span class="kw2">null</span>, ex<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p>@Override<br />
<span class="kw2">public</span> <span class="kw4">void</span> init<span class="br0">&#40;</span>GameContainer gc<span class="br0">&#41;</span> <span class="kw2">throws</span> SlickException <span class="br0">&#123;</span><br />
background=<span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AImage+java.sun.com&#038;bntl=1"><span class="kw3">Image</span></a><span class="br0">&#40;</span><span class="st0">&#8220;data/jungle.jpg&#8221;</span><span class="br0">&#41;</span>;</p>
<p><span class="coMULTI">/** creating 700 rain drops and placing it on random location across the screen */</span><br />
initializeRain<span class="br0">&#40;</span><span class="nu0">900</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p>@Override<br />
<span class="kw2">public</span> <span class="kw4">void</span> update<span class="br0">&#40;</span>GameContainer gc, <span class="kw4">int</span> delta<span class="br0">&#41;</span> <span class="kw2">throws</span> SlickException <span class="br0">&#123;</span></p>
<p><span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">0</span>;i&lt;drops.<span class="me1">length</span>-<span class="nu0">1</span>;i++<span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setY</span><span class="br0">&#40;</span>drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getY</span><span class="br0">&#40;</span><span class="br0">&#41;</span>+<span class="nu0">4</span>.0f<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setX</span><span class="br0">&#40;</span>drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getX</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getY</span><span class="br0">&#40;</span><span class="br0">&#41;</span>&gt;<span class="nu0">768</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setX</span><span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMath+java.sun.com&#038;bntl=1"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">2000</span><span class="br0">&#41;</span>+<span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setY</span><span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMath+java.sun.com&#038;bntl=1"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw2">public</span> <span class="kw4">void</span> render<span class="br0">&#40;</span>GameContainer gc, <a href="http://www.google.com/search?q=allinurl%3AGraphics+java.sun.com&#038;bntl=1"><span class="kw3">Graphics</span></a> g<span class="br0">&#41;</span> <span class="kw2">throws</span> SlickException <span class="br0">&#123;</span><br />
g.<span class="me1">drawImage</span><span class="br0">&#40;</span>background, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
g.<span class="me1">setColor</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AColor+java.sun.com&#038;bntl=1"><span class="kw3">Color</span></a><span class="br0">&#40;</span><span class="nu0">188</span>.0f,<span class="nu0">227</span>.0f,<span class="nu0">229</span>.0f,<span class="nu0">0</span>.3f<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">0</span>;i&lt;drops.<span class="me1">length</span>-<span class="nu0">1</span>;i++<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;g.<span class="me1">draw</span><span class="br0">&#40;</span>drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="coMULTI">/** creating rain drops */</span><br />
<span class="kw4">void</span> initializeRain<span class="br0">&#40;</span><span class="kw4">int</span> num_of_drops<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
drops=<span class="kw2">new</span> RainDrop<span class="br0">&#91;</span>num_of_drops<span class="br0">&#93;</span>;<br />
<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">0</span>;i&lt;drops.<span class="me1">length</span>-<span class="nu0">1</span>;i++<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>=<span class="kw2">new</span> RainDrop<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMath+java.sun.com&#038;bntl=1"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">10</span> + <span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setX</span><span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMath+java.sun.com&#038;bntl=1"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">2000</span><span class="br0">&#41;</span>+<span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; drops<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">setY</span><span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMath+java.sun.com&#038;bntl=1"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * <span class="nu0">750</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></div>
</div>
<p>So what i am doing  :<br />
1)	initializeRain(int num_of_drops) takes an int parameter which denotes the number of rain drops. This function creates a number of rain drops(instance of raindrop class) and assigns the random x and y position to each rain drops.<br />
2)	Then we simply iterate the array of rain drops and translate them across the screen. When drops reaches the bottom of screen then we simply restore back to random initial starting postion. This keeps going on and gives the impression of rainy effect.</p>
<p>This is very simple 2d effect that i started with. You can write your own optimized version and can add more feature to give fancy impression like adding alpha values  for each rain drop etc.</p>
<p><strong>Gracias.</strong></p>
<p><a name="fb_share" type="box_count share_url="http://www.gaanza.com/blog/2d-rain-effect/"></a><br />
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" 
        type="text/javascript">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/2d-rain-effect/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Loading image/Texture Mapping in LWJGL</title>
		<link>http://www.gaanza.com/blog/loading-imagetexture-mapping-in-lwjgl/</link>
		<comments>http://www.gaanza.com/blog/loading-imagetexture-mapping-in-lwjgl/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 15:35:40 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Opengl]]></category>
		<category><![CDATA[loading image]]></category>
		<category><![CDATA[lwjgl]]></category>
		<category><![CDATA[texture mapping]]></category>
		<category><![CDATA[texture-lwjgl]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=318</guid>
		<description><![CDATA[Hola everyone. I am currently working on my own two game projects: one project is of mobile phone game and other is 2.5 or side-scrolling 3d game, not much sure. So for second project i am making an small engine that will be used to make 2.5D game or side scrolling 3d game, Just simple [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-323" title="box" src="http://www.gaanza.com/wp-content/uploads/2009/10/box.png" alt="box" width="550" height="400" /></p>
<p>Hola everyone.</p>
<p>I am currently working on my own two game projects: one project is of mobile phone game and other is 2.5 or side-scrolling 3d game, not much sure. So for second project i am making an small engine that will be used to make 2.5D game or side scrolling 3d game, Just simple and fun game. I have chosen LWJGL, which is a java binding for Opengl to make my game. So first thing i need to work on loading images.texture mapping in lwjgl. I found some pretty much useful tutorials and great help from lwjgl forums. But atlast i got something that i was looking for from the <a href="http://lwjgl.org/forum/index.php/topic,3073.0.html" target="_blank">forum</a>.</p>
<p>I came to know about slick-util which is free and open source lib to <strong>load images and play sounds</strong>. Its very easy to pick up and implement it. Its just worked flawlessly and smoothly for me. You can <a href="http://slick.cokeandcode.com/downloads/util/" target="_blank">download the slick-util from here</a>.<strong> PNG, GIF, JPG, TGA are supported and WAV, OGG, XM sounds are supported by slick-util.</strong></p>
<p>So here i&#8217;l show u how easily i loaded images and mapped to a 3D BOX. First u have to setup lwjgl and slick-util with netbeans. Yeah i am using netbeans to write my program. You <a href="http://www.gaanza.com/blog/setting-up-lwjgl-with-netbeans/" target="_blank">can see my post to setup lwjgl with netbeans</a>. Now we will set up slick-util, its a continuation to the steps that we did to setup lwjgl.</p>
<p><strong>Continued&#8230;</strong></p>
<p>Step 1: We just have to configure the project properties so that project can find the lib to compile and run.</p>
<p><img class="alignnone size-full wp-image-319" title="1" src="http://www.gaanza.com/wp-content/uploads/2009/10/1.png" alt="1" width="501" height="206" /></p>
<p><img class="alignnone size-full wp-image-320" title="2" src="http://www.gaanza.com/wp-content/uploads/2009/10/2.png" alt="2" width="462" height="254" /></p>
<p>Ok that was it. Now slick-util lib has been set up.Now first i&#8217;l show u how to load image and bind it , full source will be at the end.</p>
<p><strong>Texture texture;</strong></p>
<p>Texture is an interface having description of texture which will be loaded.</p>
<p><strong>texture = TextureLoader.getTexture(&#8220;PNG&#8221;, new FileInputStream(&#8220;Data/Crate.png&#8221;));</strong></p>
<p>now we are loading the texture using TextureLoader utility class. Just smooth and simple.</p>
<p><strong>texture.bind();</strong></p>
<p>Now we are binding the texture.</p>
<p>So thats what u need to load the image and map them to objects. Download this image to use it in this program.</p>
<p><img class="alignnone size-full wp-image-321" title="Crate" src="http://www.gaanza.com/wp-content/uploads/2009/10/Crate.png" alt="Crate" width="256" height="256" /></p>
<p><strong>Full Code:</strong></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="coMULTI">/*<br />
&nbsp;* To change this template, choose Tools | Templates<br />
&nbsp;* and open the template in the editor.<br />
&nbsp;*/</span></p>
<p>package com.<span class="me1">gaanza</span>.<span class="me1">engine</span>.<span class="me1">test2</span>;</p>
<p><span class="co2">import java.io.FileInputStream;</span><br />
<span class="co2">import java.io.IOException;</span><br />
<span class="co2">import java.util.logging.Level;</span><br />
<span class="co2">import java.util.logging.Logger;</span><br />
<span class="co2">import org.lwjgl.LWJGLException;</span><br />
<span class="co2">import org.lwjgl.Sys;</span><br />
<span class="co2">import org.lwjgl.opengl.Display;</span><br />
<span class="co2">import org.lwjgl.opengl.DisplayMode;</span><br />
<span class="co2">import org.lwjgl.opengl.GL11;</span><br />
<span class="co2">import org.lwjgl.util.glu.GLU;</span><br />
<span class="co2">import org.newdawn.slick.opengl.Texture;</span><br />
<span class="co2">import org.newdawn.slick.opengl.TextureLoader;</span></p>
<p><span class="coMULTI">/**<br />
&nbsp;*<br />
&nbsp;* @author Java Guy<br />
&nbsp;*/</span><br />
<span class="kw2">public</span> <span class="kw2">class</span> EngineTest <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">static</span> <span class="kw4">boolean</span> gameRunning=<span class="kw2">true</span>;<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">static</span> <span class="kw4">int</span> targetWidth = <span class="nu0">800</span>;<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">static</span> <span class="kw4">int</span> targetHeight = <span class="nu0">600</span>;</p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> float xrot=<span class="nu0">0</span>.1f;<br />
&nbsp; &nbsp; <span class="kw2">private</span> float yrot=<span class="nu0">0</span>.1f;<br />
&nbsp; &nbsp; <span class="kw2">private</span> float zrot=<span class="nu0">0</span>.1f;</p>
<p>&nbsp; &nbsp; <span class="coMULTI">/** The texture that&#8217;s been loaded */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Texture texture;</p>
<p>&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; EngineTest app=<span class="kw2">new</span> EngineTest<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; initDisplay<span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; initGL<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; app.<span class="me1">init</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; app.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">static</span> <span class="kw4">void</span> initDisplay<span class="br0">&#40;</span><span class="kw4">boolean</span> fullscreen<span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; DisplayMode chosenMode = <span class="kw2">null</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DisplayMode<span class="br0">&#91;</span><span class="br0">&#93;</span> modes = Display.<span class="me1">getAvailableDisplayModes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i=<span class="nu0">0</span>;i&lt;modes.<span class="me1">length</span>;i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>modes<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == targetWidth<span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>modes<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == targetHeight<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chosenMode = modes<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span>LWJGLException e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Sys.<span class="me1">alert</span><span class="br0">&#40;</span><span class="st0">&#8220;Error&#8221;</span>, <span class="st0">&#8220;Unable to determine display modes.&#8221;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// at this point if we have no mode there was no appropriate, let the user know</span><br />
&nbsp; &nbsp; <span class="co1">// and give up</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>chosenMode == <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sys.<span class="me1">alert</span><span class="br0">&#40;</span><span class="st0">&#8220;Error&#8221;</span>, <span class="st0">&#8220;Unable to find appropriate display mode.&#8221;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">setDisplayMode</span><span class="br0">&#40;</span>chosenMode<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">setFullscreen</span><span class="br0">&#40;</span>fullscreen<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">setTitle</span><span class="br0">&#40;</span><span class="st0">&#8220;LWJGL window&#8221;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">create</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">catch</span> <span class="br0">&#40;</span>LWJGLException e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sys.<span class="me1">alert</span><span class="br0">&#40;</span><span class="st0">&#8220;Error&#8221;</span>,<span class="st0">&#8220;Unable to create display.&#8221;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">static</span> <span class="kw4">boolean</span> initGL<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glMatrixMode</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_PROJECTION</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glLoadIdentity</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; Calculate the aspect ratio of the window</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GLU.<span class="me1">gluPerspective</span><span class="br0">&#40;</span><span class="nu0">45</span>.0f,<span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span>targetWidth<span class="br0">&#41;</span>/<span class="br0">&#40;</span><span class="br0">&#40;</span>float<span class="br0">&#41;</span>targetHeight<span class="br0">&#41;</span>,<span class="nu0">0</span>.1f,<span class="nu0">100</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glMatrixMode</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_MODELVIEW</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glLoadIdentity</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glEnable</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_TEXTURE_2D</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Enable Texture Mapping ( NEW )</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glShadeModel</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_SMOOTH</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glClearColor</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glClearDepth</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glEnable</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_DEPTH_TEST</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glDepthFunc</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_LEQUAL</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glHint</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_PERSPECTIVE_CORRECTION_HINT</span>, GL11.<span class="me1">GL_NICEST</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">true</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; texture = TextureLoader.<span class="me1">getTexture</span><span class="br0">&#40;</span><span class="st0">&#8220;PNG&#8221;</span>, <span class="kw2">new</span> <a href="http://www.google.com/search?q=allinurl%3AFileInputStream+java.sun.com&#038;bntl=1"><span class="kw3">FileInputStream</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Data/grass.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AIOException+java.sun.com&#038;bntl=1"><span class="kw3">IOException</span></a> ex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Logger.<span class="me1">getLogger</span><span class="br0">&#40;</span>EngineTest.<span class="kw2">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">log</span><span class="br0">&#40;</span>Level.<span class="me1">SEVERE</span>, <span class="kw2">null</span>, ex<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span>gameRunning<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; render<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">update</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// finally check if the user has requested that the display be</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// shutdown</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>Display.<span class="me1">isCloseRequested</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gameRunning = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Display.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&#038;bntl=1"><span class="kw3">System</span></a>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> update<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xrot+=<span class="nu0">0</span>.1f;<br />
&nbsp; &nbsp; &nbsp; &nbsp; yrot+=<span class="nu0">0</span>.1f;<br />
&nbsp; &nbsp; &nbsp; &nbsp; zrot+=<span class="nu0">0</span>.1f;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> render<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glClear</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_COLOR_BUFFER_BIT</span>|GL11.<span class="me1">GL_DEPTH_BUFFER_BIT</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glLoadIdentity</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTranslatef</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f,<span class="nu0">0</span>.0f,-<span class="nu0">5</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="co1">// Move Into The Screen 5 Units</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glRotatef</span><span class="br0">&#40;</span>xrot,<span class="nu0">1</span>.0f,<span class="nu0">0</span>.0f,<span class="nu0">0</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Rotate On The X Axis</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glRotatef</span><span class="br0">&#40;</span>yrot,<span class="nu0">0</span>.0f,<span class="nu0">1</span>.0f,<span class="nu0">0</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Rotate On The Y Axis</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glRotatef</span><span class="br0">&#40;</span>zrot,<span class="nu0">0</span>.0f,<span class="nu0">0</span>.0f,<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Rotate On The Z Axis</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; texture.<span class="me1">bind</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// or GL11.glBind(texture.getTextureID());</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glBegin</span><span class="br0">&#40;</span>GL11.<span class="me1">GL_QUADS</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Front Face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Back Face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Top Face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Bottom Face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Right face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span> <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Left Face</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">0</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Bottom Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">1</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Right Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glTexCoord2f</span><span class="br0">&#40;</span><span class="nu0">0</span>.0f, <span class="nu0">1</span>.0f<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glVertex3f</span><span class="br0">&#40;</span>-<span class="nu0">1</span>.0f,&nbsp; <span class="nu0">1</span>.0f, -<span class="nu0">1</span>.0f<span class="br0">&#41;</span>;&nbsp; &nbsp;<span class="co1">// Top Left Of The Texture and Quad</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GL11.<span class="me1">glEnd</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p><strong>Gracias.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/loading-imagetexture-mapping-in-lwjgl/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Setting Up LWJGL with Netbeans</title>
		<link>http://www.gaanza.com/blog/setting-up-lwjgl-with-netbeans/</link>
		<comments>http://www.gaanza.com/blog/setting-up-lwjgl-with-netbeans/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 04:41:05 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Opengl]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[lwjgl]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=285</guid>
		<description><![CDATA[On Forums, people keeps asking about setting up lwjgl library with netbeans. So here i am going to show the steps to do that. STEP 1: Go to Tools-&#62; Libariries.Now create new library. Give it a name say &#8220;lwjgl21&#8243;. STEP 2: Now we have to configure the library. Click the classpath tab, then click add [...]]]></description>
			<content:encoded><![CDATA[<p>On Forums, people keeps asking about setting up lwjgl library with netbeans. So here i am going to show the steps to do that.</p>
<p><strong>STEP 1: </strong>Go to Tools-&gt; Libariries.Now create new library. Give it a name say &#8220;lwjgl21&#8243;.</p>
<p><img class="alignnone size-full wp-image-286" title="step1" src="http://www.gaanza.com/wp-content/uploads/2009/09/step1.png" alt="step1" width="535" height="213" /></p>
<p><strong>STEP 2:</strong> Now we have to configure the library. Click the classpath tab, then click add jars, and add all the jars shown below:</p>
<p><img class="alignnone size-full wp-image-287" title="step2" src="http://www.gaanza.com/wp-content/uploads/2009/09/step2.png" alt="step2" width="534" height="406" /></p>
<p><strong>STEP 3:</strong> If u want to add java doc than click the javadoc tab, and then add the javadoc folder. Then finally click oK and lwjgl21 library that we have just created is done.</p>
<p><strong>STEP 4:</strong> Now create a empty java project.</p>
<p><img class="alignnone size-full wp-image-288" title="step3" src="http://www.gaanza.com/wp-content/uploads/2009/09/step3.png" alt="step3" width="305" height="144" /></p>
<p><strong>STEP 5:</strong> Now we have to set the properties so that our newly created project can find the lwjgl library and jar files. So Right-Click the project-&gt; Properties. Now check the image carefully and configure accordingly. So first select libraries on the categories section and then click compile tab, and then add jar file for compilation step. This step is very important so check image properly below.</p>
<p><img class="alignnone size-full wp-image-289" title="step4" src="http://www.gaanza.com/wp-content/uploads/2009/09/step4.png" alt="step4" width="578" height="189" /></p>
<p><strong>STEP 6:</strong> Okie now click run tab, and add the library that we had just created. Check the image very properly.</p>
<p><img class="alignnone size-full wp-image-294" title="step5" src="http://www.gaanza.com/wp-content/uploads/2009/09/step51.png" alt="step5" width="548" height="177" /></p>
<p><strong>STEP 7:</strong> Now the final step. We have to provide the argument so that project cud find the necessary dll files. So first select the Run at caregories section then go to vm-options. Check the image properly and follow.</p>
<p><img class="alignnone size-full wp-image-291" title="step6" src="http://www.gaanza.com/wp-content/uploads/2009/09/step6.png" alt="step6" width="565" height="207" /></p>
<p>Okie thats it. Now click ok. So you have just set up lwjgl with your netbeans ide. So now you can compile and run your lwjgl app. I am using netbeans ide 6.7.</p>
<p><strong>Gracias</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/setting-up-lwjgl-with-netbeans/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alpha Blending using OpenGL with SDL</title>
		<link>http://www.gaanza.com/blog/alpha-blending/</link>
		<comments>http://www.gaanza.com/blog/alpha-blending/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 14:53:11 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Opengl]]></category>
		<category><![CDATA[alpha blending]]></category>
		<category><![CDATA[sdl]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=88</guid>
		<description><![CDATA[Alpha Blending is a convex combination of two colors allowing for transparency effects in computer graphics. Blending is used to combine the color of a given pixel that is about to be drawn with the pixel that is already on the screen. How the colors are combined is based on the alpha value of the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-137" title="sdl_opengl" src="http://www.gaanza.com/wp-content/uploads/2009/06/sdl_opengl1.png" alt="sdl_opengl" width="480" height="150" /></p>
<p>Alpha Blending is a convex combination of two colors allowing for transparency effects in computer graphics. <span class="text">Blending is used to combine the color of a given pixel that is about to be drawn with the pixel that is already on the screen.  How the colors are combined is based on the alpha value of the colors, and/or the blending function that is being used.  Alpha is a 4th color component usually specified at the end.<br />
</span></p>
<p>Alpha Blending in SDL is slow because its not a hardware accelerated. To get a better performance there is OpenGL which is hardware accelerated. So here i&#8217;l show you how to use alpha blending using opengl with sdl.</p>
<div class="codesnip-container" >
<div class="codesnip">glColor4f<span class="br0">&#40;</span><span class="nu0">1</span>.0f,<span class="nu0">1</span>.0f,<span class="nu0">1</span>.0f,alpha<span class="br0">&#41;</span>; <span class="co1">// full Brightness, Alpha</span></p>
<p>glBlendFunc<span class="br0">&#40;</span>GL_SRC_ALPHA,GL_ONE<span class="br0">&#41;</span>; <span class="co1">// Blending Function for  translucency based on source alpha value&gt; </span><br />
&nbsp;</div>
</div>
<p>First line set the color to full brightness with alpha value. An alpha value of 0.0 would mean that the material is completely transparent . A value of 1.0 would be totally opaque. The primitive&#8217;s opacity is specified using glColor4*(). RGB specifies the color, and the alpha parameter specifies the opacity.</p>
<div class="codesnip-container" >
<div class="codesnip">glEnable<span class="br0">&#40;</span>GL_BLEND<span class="br0">&#41;</span>;                      <span class="co1">// Turn Blending on</span></p>
<p>glDisable<span class="br0">&#40;</span>GL_DEPTH_TEST<span class="br0">&#41;</span>;        <span class="co1">//Turn Depth Testing off </span><br />
&nbsp;</div>
</div>
<p>So this is it what you will required to achieve alpha blending.</p>
<p>Below code is a simple FADE IN/FADE OUT program. When UP arow key is pressed then 2d sprite will fade out and when DOWN key is pressed then 2d sprite will fade in.</p>
<p><img class="alignnone size-full wp-image-115" title="alpha" src="http://www.gaanza.com/wp-content/uploads/2009/06/alpha.png" alt="alpha" width="572" height="428" /></p>
<p>Here is the full Source Code:</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL.h&quot;</span><br />
<span class="co2">#include &quot;SDL_image.h&quot;</span><br />
<span class="co2">#include &quot;SDL_opengl.h&quot;</span></p>
<p><span class="co2">#include &amp;lt;stdio.h&amp;gt;</span></p>
<p>GLuint texture=<span class="kw2">NULL</span>;     <span class="co1">//this is a handle to our texture object</span><br />
GLenum texture_format=<span class="kw2">NULL</span>;<br />
GLint nofcolors;</p>
<p>SDL_Event event;</p>
<p><span class="kw4">float</span> alpha=<span class="nu0">1</span>.0f;<br />
bool UP=<span class="kw2">false</span>;         <span class="co1">//Up key is pressed/released</span><br />
bool DOWN=<span class="kw2">false</span>;       <span class="co1">//DOWN key is pressed/released&lt;/em&gt;</span></p>
<p>&lt;em&gt;int loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *surface; <span class="co1">// this surface will tell us the details of the image</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface = IMG_Load<span class="br0">&#40;</span><span class="st0">&#8220;flower.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="co1">// Check that the image&#8217;s width is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;w &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;w &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s width is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Also check if the height is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;h &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;h &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s height is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">//get number of channels in the SDL surface</span><br />
nofcolors=surface-&amp;gt;format-&amp;gt;BytesPerPixel;</p>
<p><span class="co1">//contains an alpha channel</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">4</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGBA;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGRA;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">//no alpha channel</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGB;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGR;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: the image is not truecolor&#8230;this will break &#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Have OpenGL generate a texture object handle for us</span><br />
glGenTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture object</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Set the texture&#8217;s stretching properties</span><br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR <span class="br0">&#41;</span>;<br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexImage2D<span class="br0">&#40;</span> GL_TEXTURE_2D, <span class="nu0">0</span>, nofcolors, surface-&amp;gt;w, surface-&amp;gt;h, <span class="nu0">0</span>,<br />
texture_format, GL_UNSIGNED_BYTE, surface-&amp;gt;pixels <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;SDL could not load image.bmp: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Free the SDL_Surface only if it was successfully created</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> surface <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
SDL_FreeSurface<span class="br0">&#40;</span> surface <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;   <span class="co1">// Clear the screen before drawing</span></p>
<p>glTranslatef<span class="br0">&#40;</span><span class="nu0">300</span>.<span class="nu0">0</span>,<span class="nu0">200</span>.<span class="nu0">0</span>,<span class="nu0">0</span>.<span class="nu0">0</span><span class="br0">&#41;</span>;</p>
<p>glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;   <span class="co1">// Bind the texture to which subsequent calls refer to</span></p>
<p>glColor4f<span class="br0">&#40;</span><span class="nu0">1</span>.0f,<span class="nu0">1</span>.0f,<span class="nu0">1</span>.0f,alpha<span class="br0">&#41;</span>;            <span class="co1">// Full Brightness, Alpha</span><br />
glBlendFunc<span class="br0">&#40;</span>GL_SRC_ALPHA,GL_ONE<span class="br0">&#41;</span>;           <span class="co1">// // Blending Function For Translucency Based On Source Alpha Value</span></p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;<br />
<span class="co1">// Top-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> -<span class="nu0">64</span>, -<span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">64</span>, -<span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">64</span>, <span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> -<span class="nu0">64</span>, <span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *screen;</p>
<p><span class="co1">// Slightly different SDL initialization</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> SDL_Init<span class="br0">&#40;</span>SDL_INIT_VIDEO<span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to initialize SDL: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p>SDL_GL_SetAttribute<span class="br0">&#40;</span> SDL_GL_DOUBLEBUFFER, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>screen = SDL_SetVideoMode<span class="br0">&#40;</span> <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">16</span>, SDL_OPENGL<span class="br0">&#41;</span>;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span> !screen <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to set video mode: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Set the OpenGL state after creating the context with SDL_SetVideoMode</span></p>
<p>glClearColor<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnable<span class="br0">&#40;</span> GL_TEXTURE_2D <span class="br0">&#41;</span>;        <span class="co1">// Need this to display a texture</span><br />
glEnable<span class="br0">&#40;</span>GL_BLEND<span class="br0">&#41;</span>;                  <span class="co1">// Turn Blending On</span><br />
glDisable<span class="br0">&#40;</span>GL_DEPTH_TEST<span class="br0">&#41;</span>;         <span class="co1">//Turn Depth Testing Off&lt;/em&gt;</span></p>
<p>glViewport<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_PROJECTION <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glOrtho<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">0</span>, -<span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_MODELVIEW <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
glDeleteTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;&lt;/em&gt;</p>
<p>SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Make sure the program waits for a quit</span><br />
bool quit = <span class="kw2">false</span>;</p>
<p>init<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//If a key was pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_UP:<br />
UP=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_DOWN:<br />
DOWN=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_ESCAPE:<br />
quit=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="co1">//If a key was released</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYUP <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_UP:<br />
UP=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_DOWN:<br />
DOWN=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// If UP key is pressed</span></p>
<p>
<span class="kw1">if</span><span class="br0">&#40;</span>UP==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>alpha&amp;lt;<span class="nu0">1</span>.0f<span class="br0">&#41;</span>         <span class="co1">// make sure alpha value is not greater than maximum value 1.0</span><br />
alpha+=<span class="nu0">0</span>.01f;       <span class="co1">//increase the alpha value, fade out</span><br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>DOWN==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span>    <span class="co1">//If DOWN key is pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>alpha&amp;gt;<span class="nu0">0</span>.0f<span class="br0">&#41;</span>       <span class="co1">// make sure value of alpha is not less than 0.0f</span><br />
alpha-=<span class="nu0">0</span>.01f;      <span class="co1">// decrease the alpha value, fade in</span><br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p>clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>So thats it. Now you are off to fly.</p>
<p><strong>Gracias.</strong></p>
<p><a name="fb_share" type="box_count share_url="http://www.gaanza.com/blog/alpha-blending/"></a><br />
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" 
        type="text/javascript">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/alpha-blending/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2D Sprite Rotation using Opengl with SDL</title>
		<link>http://www.gaanza.com/blog/sprite-rotation/</link>
		<comments>http://www.gaanza.com/blog/sprite-rotation/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 12:59:51 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Opengl]]></category>
		<category><![CDATA[2d graphics]]></category>
		<category><![CDATA[2d rotation]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[texture mapping]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=25</guid>
		<description><![CDATA[Rotating 2D Sprite: In my previous post i showed how to move a 2D sprite in two dimensional screen using Opengl with SDL. Now in this post i&#8217;l show how to rotate a 2D sprite using Opengl with SDL. In Opengl, rotation can be made about x axis, y axis and z axis. In different [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-60" title="sdl_opengl" src="http://www.gaanza.com/wp-content/uploads/2009/06/sdl_opengl.png" alt="" width="480" height="150" /></p>
<p><strong>Rotating 2D Sprite:</strong> In my previous post i showed how to move a 2D sprite in two dimensional screen using Opengl with SDL. Now in this post i&#8217;l show how to rotate a 2D sprite using Opengl with SDL.</p>
<p>In Opengl, rotation can be made about x axis, y axis and z axis. In different axis rotation occurs differently like:</p>
<p><strong>about X axis: like closing your laptop</strong></p>
<p><strong>about Y axis: like turning a page in a book</strong></p>
<p><strong>about Z axis: like the hands of a clock</strong></p>
<p>So to rotate our 2D sprite we use <strong><span style="color: red;">glRotatef(angle,x,y,z)</span></strong>. If you want to rotate about x axis the the value of x will be 1.0, y and z will be 0.0. How much angle do you want to rotate your sprite is determined by the value of angle to glRotatef() parameter.</p>
<p>So here is the drawImage() function to draw and rotate the 2D sprite:</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Clear the screen before drawing</span><br />
glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">glTranslatef<span class="br0">&#40;</span><span class="nu0">300</span>.<span class="nu0">0</span>,<span class="nu0">200</span>.<span class="nu0">0</span>,<span class="nu0">0</span>.<span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Bind the texture to which subsequent calls refer to</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;<br />
<span class="co1">// Top-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Bottom-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>In opengl, rotation happens about origin of the screen i.e(0,0). But we want rotation to happen about the centre of the 2D sprite. So instead of drawing the top left vertex at 0,0 you draw it at -imgWidth / 2, -imgHeight / 2, you draw the bottom right vertex at imgWidth / 2, imgHeight / 2, etc, etc. Our size of the quad is 128*128 as we are mapping the texture of size 128*128 to quad. So we&#8217;ll draw our quad as (-64,-64) to (64,64) so that (0,0) is directly at the center of the 2D sprite and when we rotate our sprite then rotation will happen about the center of the 2D sprite.</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//If a key was pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_LEFT:<br />
LEFT=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_RIGHT:<br />
RIGHT=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_ESCAPE:<br />
quit=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="co1">//If a key was released</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYUP <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_LEFT:<br />
LEFT=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_RIGHT:<br />
RIGHT=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw1">if</span><span class="br0">&#40;</span>LEFT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
spin=spin+<span class="nu0">2</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>spin&amp;gt;<span class="nu0">360</span>.<span class="nu0">0</span><span class="br0">&#41;</span><br />
spin=spin-<span class="nu0">360</span>.<span class="nu0">0</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>RIGHT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
spin=spin-<span class="nu0">2</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>spin&amp;gt;<span class="nu0">360</span>.<span class="nu0">0</span><span class="br0">&#41;</span><br />
spin=spin-<span class="nu0">360</span>.<span class="nu0">0</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>In while loop inside main function we are handling key event. As user presses left arrow key then we increment the angle and redraw the 2D sprite. I have used the same style as in previous posts i.e i have used two bool state variables(LEFT and RIGHT), when user presses left arrow key then LEFT becomes TRUE then angle is updated and 2D sprite is redrawn with rotation.</p>
<p>In this program, when left arrow key is pressed then sprite rotates towards east and when right arrow key is pressed then sprite rotates towards west.</p>
<p><div id="attachment_29" class="wp-caption alignnone" style="width: 527px"><img class="size-full wp-image-29 " title="rotate" src="http://www.gaanza.com/wp-content/uploads/2009/06/rotate.png" alt=" 2D Sprite after rotation" width="517" height="409" /><p class="wp-caption-text"> 2D Sprite after rotation</p></div></p>
<p>Here is the full source code</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL.h&quot;</span><br />
<span class="co2">#include &quot;SDL_image.h&quot;</span><br />
<span class="co2">#include &quot;SDL_opengl.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &amp;lt;stdio.h&amp;gt; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">GLuint texture=<span class="kw2">NULL</span>; <span class="co1">//this is a handle to our texture object</span><br />
GLenum texture_format=<span class="kw2">NULL</span>;<br />
GLint nofcolors;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">SDL_Event event;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">static</span> GLfloat spin=<span class="nu0">0</span>.<span class="nu0">0</span>;<br />
<span class="kw4">float</span> x=<span class="nu0">100</span>,y=<span class="nu0">100</span>;<br />
bool LEFT=<span class="kw2">false</span>;<br />
bool RIGHT=<span class="kw2">false</span>;</p>
<p><span class="kw4">int</span> loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *surface; <span class="co1">// this surface will tell us the details of the image</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface = IMG_Load<span class="br0">&#40;</span><span class="st0">&#8220;flower.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="co1">// Check that the image&#8217;s width is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;w &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;w &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s width is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Also check if the height is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;h &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;h &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s height is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">//get number of channels in the SDL surface</span><br />
nofcolors=surface-&amp;gt;format-&amp;gt;BytesPerPixel;</p>
<p><span class="co1">//contains an alpha channel</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">4</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGBA;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGRA;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">//no alpha channel</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGB;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGR;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: the image is not truecolor&#8230;this will break &#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Have OpenGL generate a texture object handle for us</span><br />
glGenTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture object</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Set the texture&#8217;s stretching properties</span><br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR <span class="br0">&#41;</span>;<br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexImage2D<span class="br0">&#40;</span> GL_TEXTURE_2D, <span class="nu0">0</span>, nofcolors, surface-&amp;gt;w, surface-&amp;gt;h, <span class="nu0">0</span>,<br />
texture_format, GL_UNSIGNED_BYTE, surface-&amp;gt;pixels <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;SDL could not load image.bmp: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Free the SDL_Surface only if it was successfully created</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> surface <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
SDL_FreeSurface<span class="br0">&#40;</span> surface <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Clear the screen before drawing</span><br />
glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</p>
<p>glTranslatef<span class="br0">&#40;</span><span class="nu0">300</span>.<span class="nu0">0</span>,<span class="nu0">200</span>.<span class="nu0">0</span>,<span class="nu0">0</span>.<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
glRotatef<span class="br0">&#40;</span> spin, <span class="nu0">0</span>.<span class="nu0">0</span>, <span class="nu0">0</span>.<span class="nu0">0</span>, <span class="nu0">1</span>.<span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture to which subsequent calls refer to</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;<br />
<span class="co1">// Top-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> -<span class="nu0">64</span>, -<span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">64</span>, -<span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">64</span>, <span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> -<span class="nu0">64</span>, <span class="nu0">64</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *screen;</p>
<p><span class="co1">// Slightly different SDL initialization</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> SDL_Init<span class="br0">&#40;</span>SDL_INIT_VIDEO<span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to initialize SDL: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p>SDL_GL_SetAttribute<span class="br0">&#40;</span> SDL_GL_DOUBLEBUFFER, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>screen = SDL_SetVideoMode<span class="br0">&#40;</span> <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">16</span>, SDL_OPENGL|SDL_FULLSCREEN<span class="br0">&#41;</span>;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span> !screen <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to set video mode: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Set the OpenGL state after creating the context with SDL_SetVideoMode</span></p>
<p>glClearColor<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnable<span class="br0">&#40;</span> GL_TEXTURE_2D <span class="br0">&#41;</span>; <span class="co1">// Need this to display a texture</span></p>
<p>glViewport<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_PROJECTION <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glOrtho<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">0</span>, -<span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_MODELVIEW <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
glDeleteTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p>SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Make sure the program waits for a quit</span><br />
bool quit = <span class="kw2">false</span>;</p>
<p>init<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//If a key was pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_LEFT:<br />
LEFT=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_RIGHT:<br />
RIGHT=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_ESCAPE:<br />
quit=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="co1">//If a key was released</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYUP <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_LEFT:<br />
LEFT=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="kw1">case</span> SDLK_RIGHT:<br />
RIGHT=<span class="kw2">false</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>LEFT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
spin=spin+<span class="nu0">2</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>spin&amp;gt;<span class="nu0">360</span>.<span class="nu0">0</span><span class="br0">&#41;</span><br />
spin=spin-<span class="nu0">360</span>.<span class="nu0">0</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>RIGHT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
spin=spin-<span class="nu0">2</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>spin&amp;gt;<span class="nu0">360</span>.<span class="nu0">0</span><span class="br0">&#41;</span><br />
spin=spin-<span class="nu0">360</span>.<span class="nu0">0</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>So Thats it. I hope this of any help to you and gives u some idea on rotation of 2D sprite using opengl and sdl.</p>
<p><strong>Gracias.</strong></p>
<p><a name="fb_share" type="box_count share_url="http://www.gaanza.com/blog/sprite-rotation/"></a><br />
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" 
        type="text/javascript">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/sprite-rotation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Moving 2D Sprite using Opengl with SDL</title>
		<link>http://www.gaanza.com/blog/moving-2d-sprite/</link>
		<comments>http://www.gaanza.com/blog/moving-2d-sprite/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 05:04:19 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Opengl]]></category>
		<category><![CDATA[2d graphics]]></category>
		<category><![CDATA[2d sprite]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[texture mapping]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=13</guid>
		<description><![CDATA[Moving 2D Sprite: SO on my previous post i showed you the code to display a 2D sprite using OpenGl with SDL. Now i&#8217;ll show how to move a 2D Sprite using opengl with sdl. There will be some minor changes in the code and rest will be the same. I&#8217;ll write the new changes [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-60" title="sdl_opengl" src="http://www.gaanza.com/wp-content/uploads/2009/06/sdl_opengl.png" alt="" width="480" height="150" /><br />
<strong>Moving 2D Sprite:</strong> SO on my previous <a href="http://www.gaanza.com/blog/?p=4" target="_blank">post</a> i showed you the code to display a 2D sprite using OpenGl with SDL. Now i&#8217;ll show how to move a 2D Sprite using opengl with sdl. There will be some minor changes in the code and rest will be the same.</p>
<p>I&#8217;ll write the new changes in black and bold and rest are the same as in previous code on my previous post.</p>
<p>Here is the full code:</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL_image.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL_opengl.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &amp;lt;stdio.h&amp;gt;</span></p>
<p>GLuint texture=<span class="kw2">NULL</span>; <span class="co1">//this is a handle to our texture object</span></p>
<p>GLenum texture_format=<span class="kw2">NULL</span>;</p>
<p>GLint nofcolors;</p>
<p>SDL_Event event;</p>
<p>bool LEFT=<span class="kw2">false</span>;</p>
<p>bool RIGHT=<span class="kw2">false</span>;</p>
<p><span class="kw4">float</span> x=<span class="nu0">100</span>.<span class="nu0">0</span>,y=<span class="nu0">100</span>.<span class="nu0">0</span>;</p>
<p><span class="kw4">int</span> loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p>SDL_Surface *surface; <span class="co1">// this surface will tell us the details of the image</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface = IMG_Load<span class="br0">&#40;</span><span class="st0">&#8220;flower.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="co1">// Check that the image&#8217;s width is a power of 2</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;w &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;w &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s width is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="co1">// Also check if the height is a power of 2</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;h &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;h &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s height is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="co1">//get number of channels in the SDL surface</span></p>
<p>nofcolors=surface-&amp;gt;format-&amp;gt;BytesPerPixel;</p>
<p><span class="co1">//contains an alpha channel</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">4</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span></p>
<p>texture_format=GL_RGBA;</p>
<p><span class="kw1">else</span></p>
<p>texture_format=GL_BGRA;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">//no alpha channel</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span></p>
<p>texture_format=GL_RGB;</p>
<p><span class="kw1">else</span></p>
<p>texture_format=GL_BGR;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">else</span></p>
<p><span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: the image is not truecolor&#8230;this will break &#8220;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="co1">// Have OpenGL generate a texture object handle for us</span></p>
<p>glGenTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture object</span></p>
<p>glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Set the texture&#8217;s stretching properties</span></p>
<p>glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexImage2D<span class="br0">&#40;</span> GL_TEXTURE_2D, <span class="nu0">0</span>, nofcolors, surface-&amp;gt;w, surface-&amp;gt;h, <span class="nu0">0</span>,</p>
<p>texture_format, GL_UNSIGNED_BYTE, surface-&amp;gt;pixels <span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">else</span> <span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;SDL could not load image.bmp: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">return</span> <span class="nu0">1</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="co1">// Free the SDL_Surface only if it was successfully created</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> surface <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>SDL_FreeSurface<span class="br0">&#40;</span> surface <span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="co1">// Clear the screen before drawing</span></p>
<p>glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</p>
<p>glTranslatef<span class="br0">&#40;</span> x, y, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture to which subsequent calls refer to</span></p>
<p>glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-left vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p>SDL_Surface *screen;</p>
<p><span class="co1">// Slightly different SDL initialization</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> SDL_Init<span class="br0">&#40;</span>SDL_INIT_VIDEO<span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to initialize SDL: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">return</span> <span class="nu0">1</span>;</p>
<p><span class="br0">&#125;</span></p>
<p>SDL_GL_SetAttribute<span class="br0">&#40;</span> SDL_GL_DOUBLEBUFFER, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>screen = SDL_SetVideoMode<span class="br0">&#40;</span> <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">16</span>, SDL_OPENGL|SDL_FULLSCREEN<span class="br0">&#41;</span>;</p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> !screen <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to set video mode: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">return</span> <span class="nu0">1</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="co1">// Set the OpenGL state after creating the context with SDL_SetVideoMode</span></p>
<p>glClearColor<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnable<span class="br0">&#40;</span> GL_TEXTURE_2D <span class="br0">&#41;</span>; <span class="co1">// Need this to display a texture</span></p>
<p>glViewport<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_PROJECTION <span class="br0">&#41;</span>;</p>
<p>glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glOrtho<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">0</span>, -<span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_MODELVIEW <span class="br0">&#41;</span>;</p>
<p>glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p>glDeleteTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p>SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="co1">//Make sure the program waits for a quit</span></p>
<p>bool quit = <span class="kw2">false</span>;</p>
<p>init<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="co1">//If a key was pressed</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">case</span> SDLK_LEFT:</p>
<p>LEFT=<span class="kw2">true</span>;</p>
<p><span class="kw2">break</span>;</p>
<p><span class="kw1">case</span> SDLK_RIGHT:</p>
<p>RIGHT=<span class="kw2">true</span>;</p>
<p><span class="kw2">break</span>;</p>
<p><span class="kw1">case</span> SDLK_ESCAPE:</p>
<p>quit=<span class="kw2">true</span>;</p>
<p><span class="kw2">break</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="co1">//If a key was released</span></p>
<p><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYUP <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span></p>
<p><span class="br0">&#123;</span></p>
<p><span class="kw1">case</span> SDLK_LEFT:</p>
<p>LEFT=<span class="kw2">false</span>;</p>
<p><span class="kw2">break</span>;</p>
<p><span class="kw1">case</span> SDLK_RIGHT:</p>
<p>RIGHT=<span class="kw2">false</span>;</p>
<p><span class="kw2">break</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">if</span><span class="br0">&#40;</span>LEFT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>x-=<span class="nu0">2</span>;</p>
<p>drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>RIGHT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>x+=<span class="nu0">2</span>;</p>
<p>drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p>clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">return</span> <span class="nu0">0</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="br0">&#125;</span></div>
</div>
<p><strong>In above code i have used two bool variable(LEFT and RIGHT) and two float variables(x and y) to store the position of  sprite. In the main function inside the loop we are taking the key input from the user. So when the user press left arrow key &#8220;LEFT bool variable is assigned TRUE&#8221; and when user releases the left arrow key &#8221; LEFT bool variable is assigned FALSE&#8221;. Same applies for pressing right arrow key. So in this code :</strong></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw1">if</span><span class="br0">&#40;</span>LEFT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">x-=<span class="nu0">2</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>RIGHT==<span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>x+=<span class="nu0">2</span>;</p>
<p>drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="br0">&#125;</span></div>
</div>
<p><strong>when left arrow key is pressed &#8220;LEFT bool variable becomes TRUE&#8221; and x position of sprite is incremented by 2. Then we draw the sprite again. And when left arrow key is released &#8220;LEFT bool variable becomes FALSE&#8221; which means x position of sprite should not be updated. Same concept applies for moving right.</strong></p>
<p><strong>Now we have code to update the x and y position of  sprite. But how to render the sprite with updated x and y coordinates. This is done by gTranslatef(x,y,z) function. It translates the position of sprite. So we&#8217;ll be updating x and y to move the sprite, and z will be zero. So in this code:</strong></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="br0">&#123;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Clear the screen before drawing</span></p>
<p>glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</p>
<p>glTranslatef<span class="br0">&#40;</span> x, y, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture to which subsequent calls refer to</span></p>
<p>glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-left vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span></p>
<p>glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="br0">&#125;</span></div>
</div>
<p>when we update the position of x and y then we call the above function where we have included new code glTranslatef(x,y,z) which will make the sprite to be drawn in given x.y and z location.</p>
<p>So thats it. I hope this will give u some pretty basic idea. Now you can write your own code for moving 2d Sprite.</p>
<p><strong>Gracias.</strong></p>
<p><a name="fb_share" type="box_count share_url="http://www.gaanza.com/blog/moving-2d-sprite/"></a><br />
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" 
        type="text/javascript">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/moving-2d-sprite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drawing 2D Sprite Using OpenGl with SDL</title>
		<link>http://www.gaanza.com/blog/display-2d-sprite/</link>
		<comments>http://www.gaanza.com/blog/display-2d-sprite/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 03:33:48 +0000</pubDate>
		<dc:creator>padam</dc:creator>
				<category><![CDATA[Opengl]]></category>
		<category><![CDATA[2d graphics]]></category>
		<category><![CDATA[2d sprite]]></category>
		<category><![CDATA[2d texture]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[texture mapping]]></category>

		<guid isPermaLink="false">http://www.gaanza.com/blog/?p=4</guid>
		<description><![CDATA[In many forums, i have seen people asking about making 2D games using OpenGl and there weren&#8217;t any satisfactory answers. So i searched the google on doing 2D graphics using Opengl. Surprisingly there were not many results on that, there were very very few info on doing 2D graphics using OpenGl. So i did some [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-60" title="sdl_opengl" src="http://www.gaanza.com/wp-content/uploads/2009/06/sdl_opengl.png" alt="" width="480" height="150" /></p>
<p>In many forums, i have seen people asking about making 2D games using OpenGl and there weren&#8217;t any satisfactory answers. So i searched the google on doing 2D graphics using Opengl. Surprisingly there were not many results on that, there were very very few info on doing 2D graphics using OpenGl.</p>
<p>So i did some research on this and came up with this code. I hope this will be of some use to those who wants to get started making 2D games using OpenGl. I don&#8217;t claim that this code is efficient way to do it. I am still learning OpenGl. But this code will give you a base to start off.</p>
<p>Here i&#8217;ll be using SDL with OpenGL. I&#8217;l be using SDL for creating the window, taking input, and loading texture data. And I&#8217;ll be using SDL_image extension library to load images(BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA and PNG files.). Lastly, Opengl wiil be used for rendering the graphics.</p>
<p>If you don&#8217;t know how to set up libraries then here is the <a href="http://lazyfoo.net/SDL_tutorials/lesson01/index.php" target="_blank">guide to set up SDL</a>, <a href="http://lazyfoo.net/SDL_tutorials/lesson03/windows/msvsnet0508e/index.php" target="_blank">guide to setup SDL_image extension library</a> and <a href="http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/GettingStarted/msvcnetglut.html" target="_blank">guide to set up OpenGl</a><strong>.</strong></p>
<p>This code has been tested on windows using visual studio 2005.</p>
<p>So lets start:</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL.h&quot;</span><br />
<span class="co2">#include &quot;SDL_image.h&quot;</span><br />
<span class="co2">#include &quot;SDL_opengl.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &amp;lt;stdio.h&amp;gt; </span><br />
&nbsp;</div>
</div>
<p>First we will include the necessary header files.</p>
<div class="codesnip-container" >
<div class="codesnip">GLuint texture=<span class="kw2">NULL</span>; <span class="co1">//this is a handle to our texture object</span><br />
GLenum texture_format=<span class="kw2">NULL</span>;<br />
GLint nofcolors;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">SDL_Event event;</div>
</div>
<p>texture is the handle to our texture object. texture_format will store the information about the image loaded. A SDL_Event structure stores event data for us to handle.</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">int</span> loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *surface; <span class="co1">// this surface will tell us the details of the image </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface = IMG_Load<span class="br0">&#40;</span><span class="st0">&#8220;flower.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="co1">// Check that the image&#8217;s width is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;w &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;w &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s width is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Also check if the height is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;h &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;h &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s height is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">//get number of channels in the SDL surface</span><br />
nofcolors=surface-&amp;gt;format-&amp;gt;BytesPerPixel;</p>
<p><span class="co1">//contains an alpha channel</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">4</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGBA;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGRA;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">//no alpha channel</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGB;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGR;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: the image is not truecolor&#8230;this will break &#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Have OpenGL generate a texture object handle for us</span><br />
glGenTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture object</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Set the texture&#8217;s stretching properties</span><br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR <span class="br0">&#41;</span>;<br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexImage2D<span class="br0">&#40;</span> GL_TEXTURE_2D, <span class="nu0">0</span>, nofcolors, surface-&amp;gt;w, surface-&amp;gt;h, <span class="nu0">0</span>,<br />
texture_format, GL_UNSIGNED_BYTE, surface-&amp;gt;pixels <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;SDL could not load image.bmp: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Free the SDL_Surface only if it was successfully created</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> surface <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
SDL_FreeSurface<span class="br0">&#40;</span> surface <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This is the loadImage() function to load the image. First we&#8217;ll use Img_Load() function to load an image. Then we&#8217;ll check whether the height and width of an image is power of 2. If its not a power of 2 then program will terminate. Then we&#8217;ll check the information of image i.e if image contains alpha channel or not. So according to that we&#8217;ll use our texture_format. Lastly we&#8217;l map the image to the texture object. <span class="text">glBindTexture(GL_TEXTURE_2D, &amp;texture) tells OpenGL to bind the named texture texture to a texture target. </span><span class="text">The main function of glBindTexture is to assign a texture name to texture data.  In this case we&#8217;re telling OpenGL there is memory available at &amp;texture.  When we create the texture, it will be stored in the memory that &amp;texture references.</span></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Clear the screen before drawing</span><br />
glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture to which subsequent calls refer to</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;<br />
<span class="co1">// Top-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Top-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>This is the drawImage() function. As name suggest this will render our 2D sprite. There is nothing to explain here. We are creating a quad and mapping our texture to the quad and rendering that quad.</p>
<p><span class="text">To properly map a texture onto a quad, you have to make sure the top right of the texture is mapped to the top right of the quad.  The top left of the texture is mapped to the top left of the quad, the bottom right of the texture is mapped to the bottom right of the quad, and finally, the bottom left of the texture is mapped to the bottom left of the quad.  If the corners of the texture do not match the same corners of the quad, the image may appear upside down, sideways, or not at all. </span></p>
<p><span class="text">The first value of glTexCoord2i is the X coordinate.  0 is the left side of the texture  and 1 is the right side of the texture.  The second value of glTexCoord2f is the Y coordinate  0 is the bottom of the texture and 1 is the top of the texture.<br />
</span></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">int</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *screen;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co1">// Slightly different SDL initialization</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> SDL_Init<span class="br0">&#40;</span>SDL_INIT_VIDEO<span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to initialize SDL: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p>SDL_GL_SetAttribute<span class="br0">&#40;</span> SDL_GL_DOUBLEBUFFER, <span class="nu0">1</span> <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">screen = SDL_SetVideoMode<span class="br0">&#40;</span> <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">16</span>, SDL_OPENGL<span class="br0">&#41;</span>;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span> !screen <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to set video mode: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This is a  init() function to set up the window.We create our OpenGL window. When we want to use OpenGL we pass the SDL_OPENGL flag to SDL_SetVideoMode() instead of SDL_SWSURFACE. Now the window will use OpenGL&#8217;s hardware accelerated rendering instead of SDL&#8217;s software rendering.</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">void</span> init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Set the OpenGL state after creating the context with SDL_SetVideoMode </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">glClearColor<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnable<span class="br0">&#40;</span> GL_TEXTURE_2D <span class="br0">&#41;</span>; <span class="co1">// Need this to display a texture</span></p>
<p>glViewport<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_PROJECTION <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glOrtho<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">0</span>, -<span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">glMatrixMode<span class="br0">&#40;</span> GL_MODELVIEW <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>This function will set up out Opengl world. The first thing we do is set the clear color.When we clear the screen, we want it to be black. So we set the clear color to be black (R, G, B, A) with glClearColor(). Then we set the matrix mode to projection using glMatrixMode(). Then we intialize the projection matrix by calling glLoadIdentity(). glLoadIdentity() essentially resets the matrix by setting it to be the identity matrix.We are using Orthographic projection for projecting two-dimensional image onto a two-dimensional screen. Above code<em> glOrtho( 0, 640, 480, 0, -1, 1 );</em> will create two-dimensional screen with top left(0,0) and bottom right(640,480).</p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">void</span> clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
glDeleteTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p><strong>The above function will clean up the resource and then terminate the window.</strong></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Make sure the program waits for a quit</span><br />
bool quit = <span class="kw2">false</span>;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip">init<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//If a key was pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_ESCAPE:<br />
quit=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>This is the main function. We&#8217;ll be calling all the function i.e setting up window and OpenGl; loading Sprite and rendering it.</p>
<p>So thats it. Now your are off.</p>
<p><div id="attachment_5" class="wp-caption alignnone" style="width: 528px"><img class="size-full wp-image-5 " title="program" src="http://www.gaanza.com/wp-content/uploads/2009/06/program.png" alt="program" width="518" height="410" /><p class="wp-caption-text">displaying 2D sprite(PNG) using OpenGl with SDL</p></div></p>
<p>You can save this image(flower.png) for testing.</p>
<p><img class="alignnone size-full wp-image-6" title="flower" src="http://www.gaanza.com/wp-content/uploads/2009/06/flower.png" alt="flower" width="128" height="128" /></p>
<p><strong>So here is the full code:</strong></p>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &quot;SDL.h&quot;</span><br />
<span class="co2">#include &quot;SDL_image.h&quot;</span><br />
<span class="co2">#include &quot;SDL_opengl.h&quot; </span><br />
&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="codesnip"><span class="co2">#include &amp;lt;stdio.h&amp;gt;</span></p>
<p>GLuint texture=<span class="kw2">NULL</span>; <span class="co1">//this is a handle to our texture object</span><br />
GLenum texture_format=<span class="kw2">NULL</span>;<br />
GLint nofcolors;</p>
<p>SDL_Event event;</p>
<p><span class="kw4">int</span> loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *surface; <span class="co1">// this surface will tell us the details of the image</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface = IMG_Load<span class="br0">&#40;</span><span class="st0">&#8220;flower.png&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="co1">// Check that the image&#8217;s width is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;w &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;w &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s width is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Also check if the height is a power of 2</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>surface-&amp;gt;h &amp;amp; <span class="br0">&#40;</span>surface-&amp;gt;h &#8211; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: image.bmp&#8217;s height is not a power of 2<span class="es0">\n</span>&#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">//get number of channels in the SDL surface</span><br />
nofcolors=surface-&amp;gt;format-&amp;gt;BytesPerPixel;</p>
<p><span class="co1">//contains an alpha channel</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">4</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGBA;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGRA;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>nofcolors==<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">//no alpha channel</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>surface-&amp;gt;format-&amp;gt;Rmask==0x000000ff<span class="br0">&#41;</span><br />
texture_format=GL_RGB;<br />
<span class="kw1">else</span><br />
texture_format=GL_BGR;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;warning: the image is not truecolor&#8230;this will break &#8220;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Have OpenGL generate a texture object handle for us</span><br />
glGenTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture object</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Set the texture&#8217;s stretching properties</span><br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR <span class="br0">&#41;</span>;<br />
glTexParameteri<span class="br0">&#40;</span> GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR <span class="br0">&#41;</span>;</p>
<p>glTexImage2D<span class="br0">&#40;</span> GL_TEXTURE_2D, <span class="nu0">0</span>, nofcolors, surface-&amp;gt;w, surface-&amp;gt;h, <span class="nu0">0</span>,<br />
texture_format, GL_UNSIGNED_BYTE, surface-&amp;gt;pixels <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;SDL could not load image.bmp: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">// Free the SDL_Surface only if it was successfully created</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> surface <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
SDL_FreeSurface<span class="br0">&#40;</span> surface <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span></p>
<p><span class="co1">// Clear the screen before drawing</span><br />
glClear<span class="br0">&#40;</span> GL_COLOR_BUFFER_BIT <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bind the texture to which subsequent calls refer to</span><br />
glBindTexture<span class="br0">&#40;</span> GL_TEXTURE_2D, texture <span class="br0">&#41;</span>;</p>
<p>glBegin<span class="br0">&#40;</span> GL_QUADS <span class="br0">&#41;</span>;<br />
<span class="co1">// Top-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-left vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">100</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Bottom-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">228</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Top-right vertex (corner)</span><br />
glTexCoord2i<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;<br />
glVertex3f<span class="br0">&#40;</span> <span class="nu0">100</span>, <span class="nu0">228</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;<br />
glEnd<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
SDL_GL_SwapBuffers<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
SDL_Surface *screen;</p>
<p><span class="co1">// Slightly different SDL initialization</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span> SDL_Init<span class="br0">&#40;</span>SDL_INIT_VIDEO<span class="br0">&#41;</span> != <span class="nu0">0</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to initialize SDL: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span></p>
<p>SDL_GL_SetAttribute<span class="br0">&#40;</span> SDL_GL_DOUBLEBUFFER, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>screen = SDL_SetVideoMode<span class="br0">&#40;</span> <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">16</span>, SDL_OPENGL<span class="br0">&#41;</span>;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span> !screen <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&#8220;Unable to set video mode: %s<span class="es0">\n</span>&#8220;</span>, SDL_GetError<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">1</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Set the OpenGL state after creating the context with SDL_SetVideoMode</span></p>
<p>glClearColor<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span> <span class="br0">&#41;</span>;</p>
<p>glEnable<span class="br0">&#40;</span> GL_TEXTURE_2D <span class="br0">&#41;</span>; <span class="co1">// Need this to display a texture</span></p>
<p>glViewport<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_PROJECTION <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>glOrtho<span class="br0">&#40;</span> <span class="nu0">0</span>, <span class="nu0">640</span>, <span class="nu0">480</span>, <span class="nu0">0</span>, -<span class="nu0">1</span>, <span class="nu0">1</span> <span class="br0">&#41;</span>;</p>
<p>glMatrixMode<span class="br0">&#40;</span> GL_MODELVIEW <span class="br0">&#41;</span>;<br />
glLoadIdentity<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
glDeleteTextures<span class="br0">&#40;</span> <span class="nu0">1</span>, &amp;amp;texture <span class="br0">&#41;</span>;</p>
<p>SDL_Quit<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Make sure the program waits for a quit</span><br />
bool quit = <span class="kw2">false</span>;</p>
<p>init<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
init_GL<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
loadImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
drawImage<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">while</span><span class="br0">&#40;</span> quit == <span class="kw2">false</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> SDL_PollEvent<span class="br0">&#40;</span> &amp;amp;event <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//If a key was pressed</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> event.<span class="me1">type</span> == SDL_KEYDOWN <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//Adjust the velocity</span><br />
<span class="kw1">switch</span><span class="br0">&#40;</span> event.<span class="me1">key</span>.<span class="me1">keysym</span>.<span class="me1">sym</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="kw1">case</span> SDLK_ESCAPE:<br />
quit=<span class="kw2">true</span>;<br />
<span class="kw2">break</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="codesnip">clean_up<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>So i hope this will give u a base to start off. On the next post i&#8217;l tell you how to move the 2d Sprite in the screen. I&#8217;ll show u how to handle the key events in my next post.</p>
<p><strong>Gracias.</strong></p>
<p><a name="fb_share" type="box_count share_url="http://www.gaanza.com/blog/display-2d-sprite/"></a><br />
<script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" 
        type="text/javascript">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gaanza.com/blog/display-2d-sprite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

