<?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; 2d rotation</title>
	<atom:link href="http://www.gaanza.com/blog/tag/2d-rotation/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 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>
	</channel>
</rss>

