<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12836797</id><updated>2011-11-13T01:36:00.376-08:00</updated><category term='Software (General)'/><title type='text'>GameDev1001</title><subtitle type='html'>A blog for all Game Development enthusiasts.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gamedev1001.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12836797.post-2212304719974335023</id><published>2011-07-05T19:16:00.000-07:00</published><updated>2011-07-05T19:16:13.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software (General)'/><title type='text'>Certification - I have started seeing some Value In It.</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;As most professionals reach mid life career crisis , they resort to a new hobby. They collect certifications like ITIL,PMP,TOGAF,CISA etc. to name a few.&lt;br /&gt;&lt;br /&gt;Most people use it to get their way into higher position.&lt;br /&gt;&lt;br /&gt;These certifications are catalog of best practices in a domain. They cannot be understood fully , unless you have become a practitioner in all aspects of a domain. In the era of specialization , It hard for a single professional to master the nuances of best practices in a objective manner.&lt;br /&gt;&lt;br /&gt;People go for certification to motivate themselves to study these "dogmas" and examination fee acts as a deterrent from choking away from the pursuit.&lt;br /&gt;&lt;br /&gt;At the end of the day , the Individual will emerge home with some Ideas for sure. For me , that is the key take away.&lt;br /&gt;&lt;br /&gt;To learn procedural skills , one needs to be lucky or go for certification. ( This is akin to teaching management at a B-school.)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-2212304719974335023?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2212304719974335023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2212304719974335023'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2011/07/certification-i-have-started-seeing.html' title='Certification - I have started seeing some Value In It.'/><author><name>Praseed Pai</name><uri>http://www.blogger.com/profile/18029747458215123744</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-638129674985448173</id><published>2011-07-05T10:57:00.000-07:00</published><updated>2011-07-05T11:25:18.080-07:00</updated><title type='text'>GPU Programming</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-fZtKZCU9gWs/ThNVVONKjDI/AAAAAAAAAMQ/lUO5I4GmOZ0/s1600/rbkshader.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 179px;" src="http://4.bp.blogspot.com/-fZtKZCU9gWs/ThNVVONKjDI/AAAAAAAAAMQ/lUO5I4GmOZ0/s200/rbkshader.jpg" alt="" id="BLOGGER_PHOTO_ID_5625934182594808882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The importance of writing small gpu programs has its highest need these days.&lt;br /&gt;The following is the result of my battle with  shader designer for my pet project Rubiks cube with minimum data in to the gpu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//vertex program&lt;br /&gt;//mapping of colors on to object based on the vertex normals&lt;br /&gt;&lt;br /&gt;varying vec3 color;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;    if( abs(gl_Normal.x) &amp;gt; 0.5 )&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        if(sign(gl_Normal.x) == 1)&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(1.0, 0.55, 0.0); //orange;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(0.0,0.9, 0.0); //green&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else if( abs(gl_Normal.y) &amp;gt; 0.5 )&lt;br /&gt;    {&lt;br /&gt;        if(sign(gl_Normal.y) == 1)&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(1, 0, 0); //red&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(0, 0, 0.8);//blue;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else if( abs(gl_Normal.z) &amp;gt; 0.5 )&lt;br /&gt;    {&lt;br /&gt;        if(sign(gl_Normal.z) == 1)&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(1, 1, 1);//white&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            color.rgb = vec3(1, 1, 0);//yellow&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    gl_Position = ftransform();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Fragment program&lt;br /&gt;varying vec3 vcolor;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;    gl_FragColor = vec4( vcolor, 1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//[todo:more text in this post]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-638129674985448173?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/638129674985448173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/638129674985448173'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2011/07/gpu-programming.html' title='GPU Programming'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-fZtKZCU9gWs/ThNVVONKjDI/AAAAAAAAAMQ/lUO5I4GmOZ0/s72-c/rbkshader.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-2100000705493540359</id><published>2011-06-23T13:40:00.000-07:00</published><updated>2011-06-23T02:12:02.162-07:00</updated><title type='text'>Meshes</title><content type='html'>3D Models are made up of vertices that can form drawing primitives.&lt;br /&gt;Thus conceptually a mesh can be defined by a set of vertices and a set of indices.&lt;br /&gt;Vertices have information for position, color, lighting etc.&lt;br /&gt;And indices group those vertices into drawing primitives.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//A simple vertex&lt;br /&gt;Vertex&lt;br /&gt;{&lt;br /&gt;position,&lt;br /&gt;normal,&lt;br /&gt;texture&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;VertexArray[] = {...} //What are the vertices that form the model&lt;br /&gt;IndexArray[] = {...} //What is the order of the vertices that form the drawing primitive&lt;br /&gt;&lt;br /&gt;Where&lt;br /&gt;drawing primitive = {point, line, triangle, ... }&lt;br /&gt;&lt;br /&gt;Now we can.&lt;br /&gt;&lt;br /&gt;Strem the mesh data between graphics card memory and system memory.&lt;br /&gt;Define local axes,angles, axial and object bounding volumes.&lt;br /&gt;Connect the mesh with a scene graph system.&lt;br /&gt;Connect the mesh with a phsics system.&lt;br /&gt;Apply transforms on meshes to make simple animations;&lt;br /&gt;Register a bone hierarchy suitable to the mesh with transforms and weights.&lt;br /&gt;Chain a list of morph targets.&lt;br /&gt;Chain a list of meshes with decreasing level of detail.&lt;br /&gt;Add a list of vertex/fragment shaders.&lt;br /&gt;Change the state of rendering/animation with game/graphics events.&lt;br /&gt;&lt;br /&gt;and so on.&lt;br /&gt;&lt;br /&gt;All of this start from how to render the vertices with less space and in minimum time.&lt;br /&gt;&lt;br /&gt;Ref:&lt;br /&gt;OpenGL : begin .. end paradigm, vertex arrays, VBO&lt;br /&gt;&lt;br /&gt;For commercial file formats refer&lt;br /&gt;3D File formats: Obj, 3DS, PVR, X&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-2100000705493540359?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2100000705493540359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2100000705493540359'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/10/advanced-meshes.html' title='Meshes'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-1822131567453355987</id><published>2009-05-24T00:40:00.000-07:00</published><updated>2011-06-23T02:24:58.312-07:00</updated><title type='text'>Camera</title><content type='html'>The following is a common camera definition in games which helps to make view transform and projection transform.&lt;br /&gt;&lt;br /&gt;Camera&lt;br /&gt;{&lt;br /&gt;  //tripod and aim&lt;br /&gt;   ViewerPosition,&lt;br /&gt;   ViewerTarget,&lt;br /&gt;   ViewerTilt,&lt;br /&gt;   LocalAxesIJK,&lt;br /&gt;   RotationAnglesAroundLocalAxesPitchYawRoll,&lt;br /&gt;&lt;br /&gt;   //lens&lt;br /&gt;   aspectRatio,&lt;br /&gt;   nearPlane,&lt;br /&gt;   farPlane;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-1822131567453355987?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1822131567453355987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1822131567453355987'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/realistic-camera-models.html' title='Camera'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-8769957835679814057</id><published>2009-05-24T00:38:00.000-07:00</published><updated>2009-06-23T08:39:47.240-07:00</updated><title type='text'>Animation</title><content type='html'>&lt;span style="font-size:130%;"&gt;Definition&lt;/span&gt;&lt;br /&gt;Animation is realistically affecting any visual change in a scene with respect to time. The variables may include position, size, orientation, color, transparency or surface texture of the graphics object.  "It is all about timing and positioning"&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Frame Animation&lt;/span&gt;&lt;br /&gt;Normally 30 to 60 frames of a 3D scene is to be rendered per second for a convincing animation. Although game engines usually expose a setFrameRate()  interface for controlling frame rate, the efffective framerate depends on the scene complexity.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Character Animation&lt;/span&gt;&lt;br /&gt;It deals with creating the moving pictures of the actors in the scene. In game development, it is done using two techniques: - Morph animation and Skelton animation.&lt;br /&gt;In skeletal animation, a character is represented in two parts: a surface representation (skin) used to draw the character and a hierarchical set of bones used for animation only. By using skeletal animation one can control of every joint, bone, and muscle of the character's body to alter the shape of its skin.&lt;br /&gt;Morphing is the transformation of one shape to another using some kind of interpolation. It is the kind of animation used for modeling character's expressions and lip synchronization.&lt;br /&gt;Every type of animation requires key frames. Pre calculated key frames add the realism of character animation. 3D artists work with models using packages such as Maya or use motion capture for this purpose. Simulation of rigid body is not enough for certain situations. Descriptions of object behavior under the influence of force are generally referred to as physics based modeling. Some examples for these objects are cloths, ropes, soft bodies etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-8769957835679814057?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8769957835679814057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8769957835679814057'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/animation.html' title='Animation'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-7476708772959382322</id><published>2009-05-24T00:23:00.000-07:00</published><updated>2010-04-17T07:35:29.906-07:00</updated><title type='text'>Collision Handling</title><content type='html'>Collision handling is the next important thing after rendering.&lt;br /&gt;Steps:&lt;br /&gt;1. Detect whether two objects collide&lt;br /&gt;This is achieved through standard and AABB or OBB intersection test using  computational geometry algorithms.&lt;br /&gt;Space subdivision methods coupled with occlusion culling reduce the amount of checking.&lt;br /&gt;&lt;br /&gt;2.Determine where the collision point.&lt;br /&gt;Once the the collision is detected, the relative location of the collision point with respect the center of mass from each objects need to be taken into account.&lt;br /&gt;&lt;br /&gt;3.Implementing the expected the result of the collision&lt;br /&gt;Rigid bodies collide and respond to collisions obeying the laws of Newton.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-7476708772959382322?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/7476708772959382322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/7476708772959382322'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/collision-handling.html' title='Collision Handling'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-1802686493890672952</id><published>2009-05-24T00:20:00.001-07:00</published><updated>2009-05-24T00:20:31.029-07:00</updated><title type='text'>Curves and Surfaces</title><content type='html'>Curves and curved surfaces describe most commonly the non-planar geometry with mathematical expressions rather than a mesh. These expressions can be converted to mesh representation on the fly. Thus, it saves some amount vertex memory. In addition, curved geometry provides scalable, smoother and continuous primitives than straight lines and planar polygons.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-1802686493890672952?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1802686493890672952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1802686493890672952'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/curves-and-surfaces.html' title='Curves and Surfaces'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-7964259527801271883</id><published>2009-05-24T00:19:00.001-07:00</published><updated>2010-04-17T07:37:40.649-07:00</updated><title type='text'>Reflection</title><content type='html'>Planar reflection follows the law of reflection and works reasonably fast.&lt;br /&gt;Ray tracing is the solution for high quality reflection mapping but it may not work at real time. Environment mapping is a fast technique that simulates highly reflective surfaces.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-7964259527801271883?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/7964259527801271883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/7964259527801271883'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/reflection.html' title='Reflection'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-2245386281091087028</id><published>2009-05-24T00:17:00.000-07:00</published><updated>2009-05-24T00:19:12.874-07:00</updated><title type='text'>Transparency</title><content type='html'>A transparent surfaces in general produce both reflected and refracted light.&lt;br /&gt;It is assumed that for simple transmittance, the incoming light comes from directly beyond the transmitter. This is a reasonable assumption when the front and back surfaces of the transmitter are parallel and the thickness is not great, e.g., for a pane of glass. A transparent surface can be treated as a blend color. When blending, the transmitter's color is mixed with the incoming color from the objects seen through the transmitter. For other transparent media, the refractive index by Snell's law plays a role.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-2245386281091087028?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2245386281091087028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2245386281091087028'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/transparency.html' title='Transparency'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-2387307399386606101</id><published>2009-05-24T00:14:00.000-07:00</published><updated>2009-05-24T00:17:40.744-07:00</updated><title type='text'>Shadows</title><content type='html'>The keywords in shadowing process are light sources, shadow casters and shadow receivers. The light source can be a point source or area source. Calculating the shadow for point sources is easier compared that for area sources.&lt;br /&gt;Point light sources generate only fully shadowed regions, while area light sources produce a fully shadowed region (umbra), and a partially shadowed region (penumbra).&lt;br /&gt;Fully shadowed regions are called hard shadows and partially shadowed region are called soft shadows.&lt;br /&gt;A basic technique for shadowing is projected planar shadows.&lt;br /&gt;&lt;p&gt;It is a simple technique. First, a three points are chosen so that the triangle formed by them defines the projection plane. The four plane coefficients are calculated from the three points that define the projection plane. Light position vector and these coefficients are used to pack a matrix called shadow matrix. This matrix squishes the 3D object on to the plane. To render the shadow, this matrix is applied to the objects that should cast shadow and the objects are rendered in dark color with no lighting. In this scheme, the three-dimensional object is rendered in two passes to create a shadow. In the first pass, the scene is rendered normally with lighting and depth test switched on. Then in the second pass, the depth test is disabled to deal with the z fighting between the shadow and the projection plane. While depth testing is disabled, the things that render last lie on top. The shadow receiver is already drawn in the pass. To cast the shadow, the shadow matrix is applied as described early. &lt;/p&gt;&lt;p&gt;Some other techniques are:&lt;br /&gt;Projected Shadows&lt;br /&gt;Shadow Mapping&lt;br /&gt;Vertex Projection&lt;br /&gt;Shadow Volumes&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-2387307399386606101?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2387307399386606101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/2387307399386606101'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/shadows.html' title='Shadows'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-1994329058595091560</id><published>2009-05-24T00:13:00.001-07:00</published><updated>2009-05-24T00:13:31.294-07:00</updated><title type='text'>Textures</title><content type='html'>Generally, textures are 1D, 2D or 3D arrays of pixels applied to a 3D object’s surface.&lt;br /&gt;Texture coordinates are in texture space. When a texture is applied to a polygon, its texel addresses must be mapped into object space. They must then be translated into the screen space. 3D Renderer performs this as an inverse mapping. That is, for each pixel in screen space, the corresponding texel position in texture space is calculated. The texture color at or around that point is sampled. The applications should specify texture coordinates for each vertex. These values are called (u,v) and must be in the range of 0.0 to 1.0.&lt;br /&gt;For every pixel in the primitive's on-screen image, it must obtain a color value from the texture. This is called texture filtering. When a texture filter operation is performed, the texture being used is typically also being magnified or minified. In other words, the texture is being mapped into a primitive image that is larger or smaller than it is. Think of filtering as a type of interpolation. Five schemes are listed below.&lt;br /&gt;Nearest-Point Sampling&lt;br /&gt;Linear Filtering&lt;br /&gt;Bilinear Filtering&lt;br /&gt;Anisotropic Filtering&lt;br /&gt;MipMapping&lt;br /&gt;Textures are used mainly for mapping patterns, for adding roughness to a surface and for simulating shadows and lighting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-1994329058595091560?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1994329058595091560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/1994329058595091560'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/textures.html' title='Textures'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-8426488618813568778</id><published>2009-05-24T00:10:00.000-07:00</published><updated>2009-05-24T00:12:39.783-07:00</updated><title type='text'>Colors</title><content type='html'>A large percentage of the visible spectrum can be represented by mixing red, green, and blue colored light in various proportions and intensities. RGB Color model is used in OpenGL and DirectX. A color value is an (Red, Green, Blue) triplet. The values can range from 0.0 (none) to 1.0 (full intensity). An intuitive color model is HSB. Hue is the color reflected from or transmitted through an object. Saturation is the strength or purity of the color. Saturation represents the amount of gray in proportion to the hue, measured as a percentage from 0% (gray) to 100% (fully saturated). Brightness is the relative lightness or darkness of the color, usually measured as a percentage from 0% (black) to 100% (white).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-8426488618813568778?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8426488618813568778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8426488618813568778'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/colors.html' title='Colors'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-4243568462893908745</id><published>2009-05-24T00:08:00.000-07:00</published><updated>2009-10-11T05:58:00.835-07:00</updated><title type='text'>Shading</title><content type='html'>Shading is the process of applying a shading model to obtain pixel intensities or colors that we see for all rendered vertices and surfaces in a scene. It takes input from lights, materials and vertex positions.&lt;br /&gt;&lt;br /&gt;A shading model describes how to calculate the intensity of light that we should see at a given point on the surface of an object.&lt;br /&gt;&lt;br /&gt;Shading models are of two types: - Accurate models such as radiosity methods and empirical models based on simple photometric calculations.&lt;br /&gt;&lt;br /&gt;A basic shading model&lt;br /&gt;&lt;br /&gt;The illumination is calculated as a sum of the ambient, diffuse, specular and emissive light per vertex.&lt;br /&gt;&lt;br /&gt;Illumination = Ambient Light + Diffuse Light + Specular Light + Emissive Light&lt;br /&gt;&lt;br /&gt;Major shading models :&lt;br /&gt;Flat shading&lt;br /&gt;Goraud shading&lt;br /&gt;FastPhong shading&lt;br /&gt;&lt;br /&gt;GPUs allow the programmers to customize the rendering portion of the pipeline using shader programmers or scripts.&lt;br /&gt;&lt;br /&gt;More on shaders from knol:&lt;br /&gt;&lt;br /&gt;http://knol.google.com/k/koen-samyn/hlsl-shaders/2lijysgth48w1/2#&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-4243568462893908745?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/4243568462893908745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/4243568462893908745'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/shading.html' title='Shading'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-6267100195117600805</id><published>2009-05-24T00:05:00.000-07:00</published><updated>2009-05-24T00:06:34.160-07:00</updated><title type='text'>Materials</title><content type='html'>A surface can interact with light in many ways; it absorbs, reflects, transmits, refracts or emits light. Dull objects absorb more of the incident light and shiny objects reflect more of the incident light. The scattering of the reflected light by rough surfaces is called diffuse reflection. In addition to diffuse reflection, shiny objects create bright spots when illuminated. This type of reflection is called specular reflection. The polygon surfaces in a 3D model should be associated with materials for calculating how the surfaces and lights interact. The ratio between incoming light intensity and outgoing light intensity is measured as surface reflectance; it is different for different colors, so it is represented as an RGB vector or color, commonly called the surface color. A material (In DirectX or OpenGL) is surface’s reflectance properties for ambient, diffuse and specular lights. In addition, material contains the emissive lighting information of the surface and power of the specular highlight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-6267100195117600805?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/6267100195117600805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/6267100195117600805'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/materials.html' title='Materials'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-3707237942899166248</id><published>2009-05-24T00:01:00.000-07:00</published><updated>2009-05-24T00:05:20.177-07:00</updated><title type='text'>Lights</title><content type='html'>The beauty of the game is greatly influenced by how the lights are used.&lt;br /&gt;&lt;br /&gt;Basic Light Properties&lt;br /&gt;Position, Range, Attenuation, Direction&lt;br /&gt;Position of the light is represented as a position vector in the world space. Range is the maximum distance from the position at which the light’s intensity is non-zero. Attenuation controls how a light's intensity decreases toward the range. It is given as a set of three constants. The direction  property represents the direction in which light rays travel. It is represented using a vector.&lt;br /&gt;&lt;br /&gt;Light Color Components&lt;br /&gt;The light emitted by a light source consists of Ambient, Diffuse and Specular components.&lt;br /&gt;1. Ambient light&lt;br /&gt;It provides constant lighting for a scene. It lights all object vertices the same because it is not dependent on any other lighting factors such as vertex normals, light direction, light position, range, or attenuation.&lt;br /&gt;2. Diffuse Light&lt;br /&gt;Diffuse light comes from one direction, so it is brighter if it comes squarely down on a surface than if it barely glances off the surface. Once it hits a surface, however, it is scattered equally in all directions, so it appears equally bright, no matter where the eye is located.&lt;br /&gt;3. Specular Light&lt;br /&gt;Specular light tends to reflect off the surface in a preferred direction causing a bright shine that can only be seen from some angles. A shiny metal or plastic has a high specular component, and chalk or carpet has almost none.&lt;br /&gt;Emissive Light&lt;br /&gt;Emissive Lighting is light that is emitted by an object, not by the light source. Emissive light lights all object vertices with the color defined in the material emissive property. It is not dependent on the vertex normal or the light direction.&lt;br /&gt;&lt;br /&gt;Types of Sources&lt;br /&gt;A light source may be of type point, directional or a spotlight.&lt;br /&gt;1. Point Source&lt;br /&gt;Point lights have color and position within a scene. They emit light equally in all directions. A light bulb is a good example of a point light. Point lights are affected by attenuation and range. Since point sources have no single direction, for calculating lighting at vertex, the light vector is calculated by subtracting the position vector of the vertex from the point source’s position vector.&lt;br /&gt;2. Directional Source&lt;br /&gt;Directional lights have only color and direction, not position. They emit parallel light. This means that all light generated by directional lights travels through a scene in the same direction. Imagine a directional light as a light source at near infinite distance, such as the sun. Directional lights are not affected by attenuation or range, so the direction and color are the only factors considered when the lighting calculation is done. Because of the small number of illumination factors, these are the least computationally intensive lights to use.&lt;br /&gt;3. Spotlight&lt;br /&gt;Spotlights emit a cone of light, which has two parts; a bright inner cone and an outer cone. Light is brightest in the inner cone and is not present outside the outer cone, with light intensity attenuating between the two areas. This type of attenuation is known as fall off. Spotlights are affected by falloff, attenuation, and range. These factors, as well as the distance light travels to each vertex, are figured in when computing lighting effects for objects in a scene.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-3707237942899166248?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/3707237942899166248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/3707237942899166248'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/lights.html' title='Lights'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-8762814565593316033</id><published>2009-05-23T23:58:00.000-07:00</published><updated>2009-05-23T23:59:25.601-07:00</updated><title type='text'>Hidden Surface Removal /Occlusion Culling</title><content type='html'>By displaying only visible surfaces or lines, geometry and fragments flow to video card can be reduced. Algorithms for HSR work in either image space or object space. Object space methods deal with comparing objects and parts of objects each other within the scene. Image space methods deal with deciding the visibility point by point, at each pixel position on the projection plane.  Most HSR methods use coherence and depth sorting. Coherence methods are used to take advantage of the regularities in the scene. Z-Buffering method is built into the GPU or the software renderer. Some people refer to both object space HSR methods and occlusion culling as the same. The difference is that the former eliminate only a single polygon at a time where as the latter eliminate a bunch of objects hidden by groups of other objects. View frustum culling eliminates groups of polygons outside the view frustum. Back-Face culling eliminates polygons facing away from the camera. Depth buffering (e.g. Z-buffer) schemes store the depth value for each location in the frame buffer. When a new frame is rendered the old depth values are compared against the new one. This comparison succeeds if the new depth is lesser than the previous depth. Only those pixels that pass the depth test are copied to the frame buffer, the depth values are also updated.&lt;br /&gt;Some object space HSR methods are:&lt;br /&gt;Back-Face Culling&lt;br /&gt;View-Frustum Culling&lt;br /&gt;Occlusion Culling&lt;br /&gt;Octree Method&lt;br /&gt;BSP tree Method&lt;br /&gt;Portals&lt;br /&gt;Some image space HSR methods are:&lt;br /&gt;Z-Buffer&lt;br /&gt;A-Buffer&lt;br /&gt;Scan line method&lt;br /&gt;Area Subdivision Method&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-8762814565593316033?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8762814565593316033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/8762814565593316033'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/hidden-surface-removal-occlusion.html' title='Hidden Surface Removal /Occlusion Culling'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-6094070809498559277</id><published>2009-05-23T23:48:00.000-07:00</published><updated>2011-04-03T07:11:44.182-07:00</updated><title type='text'>Transformations</title><content type='html'>Modeling Transforms&lt;br /&gt;Transformations are ways of moving points or vectors mathematically in space. The five types of modeling transformations in common use are translation, rotation, scaling, shearing and reflection.&lt;br /&gt;Note: In Opengl when a series of transformation matrices are specified they are multiplied using the post matrix multiplication convention.  ie. the transforms are concatenated in the order they are specified.&lt;br /&gt;&lt;br /&gt;Viewing Transforms&lt;br /&gt;Viewing transform is a translation and rotation matrix which helps in building views from cameras.&lt;br /&gt;&lt;br /&gt;Projection Transforms&lt;br /&gt;For games and related tools, our interest is limited to perspective projections and orthographic projections only. Perspective projection gives the illusion that objects and lengths appear smaller as their distance from the center of projection increases.  Orthographic projection does not alter the shape or size of the objects. An artist uses multiple orthographic views to study his model. Orthographic projection matrix is an affine transformation matrix while that of Perspective projection is not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-6094070809498559277?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/6094070809498559277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/6094070809498559277'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/05/transformations.html' title='Transformations'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-405853424560061742</id><published>2009-02-23T07:19:00.000-08:00</published><updated>2009-10-11T05:03:56.343-07:00</updated><title type='text'>Visual Realism in 3D Games</title><content type='html'>Developers have been relying heavily on the following techniques for creating  realistic static and moving images.&lt;br /&gt;&lt;br /&gt;Transformations&lt;br /&gt;Hidden Surface Removal&lt;br /&gt;Lights&lt;br /&gt;Materials&lt;br /&gt;Shading&lt;br /&gt;Colors&lt;br /&gt;Textures&lt;br /&gt;Shadows&lt;br /&gt;Transparency&lt;br /&gt;Reflection&lt;br /&gt;Curves and Surfaces&lt;br /&gt;Collision Detection&lt;br /&gt;Animation&lt;br /&gt;Realistic camera models&lt;br /&gt;Advanced meshes&lt;br /&gt;Image based rendering&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-405853424560061742?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/405853424560061742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/405853424560061742'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/02/visual-realism-in-3d-games.html' title='Visual Realism in 3D Games'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-120686277621223543</id><published>2009-02-17T09:25:00.000-08:00</published><updated>2011-11-09T04:42:32.701-08:00</updated><title type='text'>A Typical Rendering Pipeline</title><content type='html'>&lt;p&gt;Three conceptual stages of the rendering pipeline are application, geometry and rasterization.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Qx-2O1IKfIo/SZr3iDdufrI/AAAAAAAAADE/_ujnueb2vzI/s1600-h/PipelineStages.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5303823675599781554" style="margin: 0px auto 10px; display: block; width: 200px; height: 43px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_Qx-2O1IKfIo/SZr3iDdufrI/AAAAAAAAADE/_ujnueb2vzI/s200/PipelineStages.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;The Application Stage&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Qx-2O1IKfIo/SZrzjfAalAI/AAAAAAAAACs/fwirdDZ-etU/s1600-h/Application.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5303819302126392322" style="margin: 0px auto 10px; display: block; width: 200px; height: 124px; text-align: center;" alt="" src="http://4.bp.blogspot.com/_Qx-2O1IKfIo/SZrzjfAalAI/AAAAAAAAACs/fwirdDZ-etU/s200/Application.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The input at this stage is a scene description which is a set of meshes, materials, textures, lights etc.  The  lesser the number of polygons the lesser the burden on geometry stage.  Occlusion culling, View Frustum Culling, Hidden Surface Removal, and LOD selection are the main techniques that helps the geometry stage from overloading. Culling means to select a portion of the geometry from the current scene for rendering. If an object is outside the viewing volume, the object is culled.  Occlusion culling methods eliminate a bunch of objects hidden by groups of other objects. Tessellation, game objects movement, camera movement, AI and physics calculations are some other tasks done at this stage.&lt;/p&gt;&lt;p&gt;Geometry stage and rasterization stage is hardwired in modern GPUs; &lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;The Geometry Stage&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_Qx-2O1IKfIo/SZr1F49TpqI/AAAAAAAAAC0/Ql5mItEE6pA/s1600-h/GeometryPipeline.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5303820992719857314" style="margin: 0px auto 10px; display: block; width: 182px; height: 185px; text-align: center;" alt="" src="http://3.bp.blogspot.com/_Qx-2O1IKfIo/SZr1F49TpqI/AAAAAAAAAC0/Ql5mItEE6pA/s200/GeometryPipeline.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The triangles will contain vertices with information such as position, color, normals and texture coordinates. In addition to this a 3D scene may contain other information such as light sources and materials. The Geometry stage takes this input. At first note that in our game there will be a coordinate system. It is called world coordinate system. The 3D models that are to be used inside the game use another coordinate system chosen by the modeler or level designer. It is called modeling coordinate system or local coordinate system. Transformations like scaling, rotation, translation and skewing of the objects are easy to do at the model space. This is the first step at the geometry stage. The next task is to convert modeling coordinates into world coordinates. This is called the world transformation. Next the world space coordinates are to be translated and rotated around the camera's view. This is called the view transformation. The viewing coordinate axes can be calculated easily from three vectors: -eye, center and up.  Orthographic or perspective transformation is applied next. For orthographic projections the viewing volume is a parallelepiped and for perspective projections the viewing volume is a frustum of a pyramid. The perspective projection gives the illusion of distant objects to look small and near objects to look big. Now a test is done on each triangle to determine if their vertices are completely outside the view volume. This test is trivial for most of the triangles in the scene but can result in re-tessellation of some of the triangles. Lighting calculation is to be done next. For that first step is back face culling for reducing the load. After that per vertex lighting calculation is done using the current shading model. Perspective division and clipping is performed next. This clipping can also result in re-tessellation of some of the triangles. The result is a 2D image residing on the projection window. Now it is to be mapped to the pc monitor as per the users’ requirements. This is the final transform called viewport transform. This result contains more than (x, y) values and send to the rasterization stage.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Rasterization Stage&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Qx-2O1IKfIo/SZr21FksLlI/AAAAAAAAAC8/Vb9NrHePLkA/s1600-h/Rasterization.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5303822903071747666" style="margin: 0px auto 10px; display: block; width: 162px; height: 200px; text-align: center;" alt="" src="http://1.bp.blogspot.com/_Qx-2O1IKfIo/SZr21FksLlI/AAAAAAAAAC8/Vb9NrHePLkA/s200/Rasterization.PNG" border="0" /&gt;&lt;/a&gt; Once a model's vertices have been clipped and transformed into window space, the renderer must determine what pixels in the view-port are covered by each graphics primitive. The process of filling in the horizontal spans of pixels belonging to a primitive is called scan-conversion. The renderer calculates the depth, interpolated vertex colors and interpolated texture coordinates for each pixel. This information combined with the location of the pixel itself is called a fragment. A graphics application specifies how the fragment data is used to determine the final color and depth of each pixel during rasterization. This process is called pixel shading. After this the renderer performs a set of operations per fragment. This is called fragment operations. The main fragment operations are: - Pixel ownership test, Scissor test, Alpha test, Stencil test, Depth test Fog calculation, Antialiasing and Blending. The final output is a sent to the frame buffer for display.&lt;br /&gt;&lt;strong&gt;Final Note: -&lt;/strong&gt; We can replace some parts of the fixed pipeline discussed so far with custom programs. These programs execute on the GPU are called shaders. We can achieve huge amount of flexibility in the graphical effects by writing shaders.&lt;br /&gt;Vertex shader and Geometry shader can replace the T&amp;amp;L portion, Pixel shader (fragment shader) can replace shading portion in the rasterization part of the pipeline. The geometry shader allows the GPU to create and destroy geometric primitives on the fly.&lt;br /&gt;&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/in/"&gt;&lt;img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/2.5/in/88x31.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span dc="http://purl.org/dc/elements/1.1/" property="dc:title"&gt;A Typical Rendering Pipeline&lt;/span&gt; by &lt;a cc="http://creativecommons.org/ns#" href="http://gamedev1001.blogspot.com/" property="cc:attributionName" rel="cc:attributionURL"&gt;Manoj MJ&lt;/a&gt; is licensed under a &lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/in/"&gt;Creative Commons Attribution-Share Alike 2.5 India License&lt;/a&gt;.&lt;br /&gt;Based on a work at &lt;a dc="http://purl.org/dc/elements/1.1/" href="http://gamedev1001.blogspot.com/2009/02/three-conceptual-stages-of-rendering.html" rel="dc:source"&gt;gamedev1001.blogspot.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-120686277621223543?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/120686277621223543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/120686277621223543'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/02/three-conceptual-stages-of-rendering.html' title='A Typical Rendering Pipeline'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Qx-2O1IKfIo/SZr3iDdufrI/AAAAAAAAADE/_ujnueb2vzI/s72-c/PipelineStages.PNG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-5421402250620335202</id><published>2009-02-17T09:02:00.003-08:00</published><updated>2009-02-17T09:11:11.291-08:00</updated><title type='text'>CG and AG for undergraduate level (in India)</title><content type='html'>Computer Graphics&lt;br /&gt;-----------------------&lt;br /&gt;Computer Graphics concerns the pictorial synthesis of real or imaginary objects from their computer based models. A typical course syllabus for an introductory level course in computer graphics is shown below. Needless to say for a game programmer this course is a must.&lt;br /&gt;&lt;br /&gt;Introductory Computer Graphics Course&lt;br /&gt;Graphics hardware:- Organization of a interactive graphics system, Random scan and Raster scan systems, Display processors, Display files, Graphical input and output devices.&lt;br /&gt;2D Graphics: - Line drawing algorithms, Circle drawing algorithms, Bresenham's algorithms, 2D transformations, Line clipping, Polygon clipping, Window, View port.&lt;br /&gt;3D Graphics: - 3D Transformations, Viewing and projection, Hidden surface removal, Realism in 3D graphics, Illumination and Shading, Shadows, Ray tracing, Rasterization, Clipping, Visibility, Curves and surfaces, Fractals, Animation techniques&lt;br /&gt;Colors and Textures: - Color theory, Ant aliasing, Texture mapping and Procedural textures.&lt;br /&gt;Graphics software: - Elements of graphics design - Picture representation and data structures, GUI, Graphics Packages- GKS, PHIGS, OpenGL&lt;br /&gt;Books:-&lt;br /&gt;Computer Graphics – Hearn and Baker&lt;br /&gt;Computer Graphics – Harrington&lt;br /&gt;Principles of Interactive Computer Graphics- Newman and Sproull&lt;br /&gt;Procedural Elements of Computer Graphics - David Rogers&lt;br /&gt;Computer Graphics, Principles and Practice - Foley, Van Dam, Feiner, Hughes&lt;br /&gt;Computer Graphics Using Open GL - FS Hill&lt;br /&gt;&lt;br /&gt;Computational Geometry&lt;br /&gt;--------------------------------&lt;br /&gt;Computational geometry a.k.a Algorithmic Geometry is the study of algorithms for geometrical problems. Many of these problems can be solved instantly by a person looking at a picture. (Example: is a point inside a polygon?) However, the computational solution of such problems is often non-trivial: it relies on the choice of appropriate data structures and on skillful implementation of linear algebra concepts. Acquiring good skills in algorithmic geometry will be a huge advantage to graphics and physics engine developers. A typical course syllabus for an introductory level course in computer graphics is shown below.&lt;br /&gt;Computational Geometry&lt;br /&gt;---------------------&lt;br /&gt;Geometrical Preliminaries:- Double connected edge list, geometric duality, geometric searching, planar straight line graph(PSLG), point location problem, location of a point in a planar subdivision, plane sweep algorithm, slab method, chain method, regularization of PSLG, range searching problems.&lt;br /&gt;Convex hulls: - convex hull algorithms in the plane, Graham's scan algorithm, Jarvi's march, divide and conquer algorithm, dynamic convex hull algorithm.&lt;br /&gt;&lt;br /&gt;Triangularization: - Triangularization of a point set, triangularization algorithms, polygon Triangularization, Convexity Heyll's theorem, Delauny triangularization.&lt;br /&gt;Voronoi Diagrams: - applications in the plane, post office problem.&lt;br /&gt;Arrangement of Lines: - zone theorem, many faces in arrangements, construction of arrangements, forbidden graph theorem, bipartie graph for many face problems&lt;br /&gt;Linear programming:- linear programming in two dimensions, Prune- eliminate redundant half planes, introduction to visibility problems, definition of direct visibility, point visibility and edge visibility, algorithm for computing point in side a polygon, visible region inside a polygon.&lt;br /&gt;Books:-&lt;br /&gt;Computational Geometry- An Introduction - Franco P. Preparata, Michael Lan Shamos&lt;br /&gt;Algorithms in Combinatorial Geometry - Herbert Edelsbrunner&lt;br /&gt;Art Gallery Theorem - Joseph O' Rourke&lt;br /&gt;Computational Geometry in C - Rourke&lt;br /&gt;Computational Geometry and Computer Graphics in C++ - Michael J. Lazio&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-5421402250620335202?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/5421402250620335202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/5421402250620335202'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2009/02/cg-and-ag-for-undergraduate-level-in.html' title='CG and AG for undergraduate level (in India)'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-3049582034032453383</id><published>2008-06-05T04:33:00.000-07:00</published><updated>2011-04-03T07:07:30.313-07:00</updated><title type='text'>Geometry Transforms in OpenGL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Qx-2O1IKfIo/SEfPkVaSNBI/AAAAAAAAACM/ifTb1iefbWQ/s1600-h/glpipe.JPG"&gt;&lt;img style="cursor: pointer;" id="BLOGGER_PHOTO_ID_5208359717206897682" alt="" src="http://bp0.blogger.com/_Qx-2O1IKfIo/SEfPkVaSNBI/AAAAAAAAACM/ifTb1iefbWQ/s400/glpipe.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;//Geometry pipeline Pseudo code&lt;br /&gt;Mat4x4 ModelViewXForm, ProjectionXForm;&lt;br /&gt;Plane ViewVolume[6];&lt;br /&gt;Vector4 vertex,projectedVertex,clipVertex ;&lt;br /&gt;&lt;br /&gt;for_each vertex&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; screenSpaceVertex =&lt;br /&gt; viewportXForm *&lt;br /&gt; perpectiveDivide(&lt;br /&gt;  clip(&lt;br /&gt;   (ModelViewXForm * ProjectionXForm * vertex),&lt;br /&gt;    ViewVolume)&lt;br /&gt;      )&lt;br /&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Note: For more information look at gluProject(...) and Vertex Shader programs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-3049582034032453383?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/3049582034032453383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/3049582034032453383'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2008/06/coordinate-spaces-and-transforms-in.html' title='Geometry Transforms in OpenGL'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Qx-2O1IKfIo/SEfPkVaSNBI/AAAAAAAAACM/ifTb1iefbWQ/s72-c/glpipe.JPG' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-117601417797689695</id><published>2007-04-07T23:34:00.000-07:00</published><updated>2007-04-07T23:38:37.780-07:00</updated><title type='text'>Reflection math</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/7013/1105/1600/689191/reflection.png"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/7013/1105/200/333548/reflection.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reflection&lt;br /&gt;If we are given the direction vector of the incident ray and normal vector of the surface wherethe ray hits, how can we obtain the direction of the reflected ray.In this system the angle of incidence is equal to the angle of reflection.Let the incident ray vector be 'a' and reflected ray vector be 'r'.a is resolved into m and e horizontally and vertically. because of symmetry r is also resolved intothe same components.&lt;br /&gt;From the figure e=a-m ; r = e- m; or r = a-2m&lt;br /&gt;but m is the projection of a on n; ie, m = (a.n / n)*(unit vector n)&lt;br /&gt;or m = [a.(unit vector n)]*unit vector n&lt;br /&gt;putting this value of m in equation r = a-2m we will get the result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-117601417797689695?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601417797689695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601417797689695'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2007/04/reflection-math.html' title='Reflection math'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-117601394269640371</id><published>2007-04-07T23:30:00.000-07:00</published><updated>2007-04-07T23:33:52.173-07:00</updated><title type='text'>Finding normal</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/7013/1105/1600/268464/Normal.png"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/7013/1105/200/30511/Normal.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finding the normal vector of a plane&lt;br /&gt;A plane is defined by three points. Let P0, P1, and P2 be that three points.Calculate vectors, A = P1-P0 and B = P2-P0. Then A and B defines the plane.The cross product of A and B will be the normal vector of the plane.Thus N = A X B.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-117601394269640371?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601394269640371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601394269640371'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2007/04/finding-normal.html' title='Finding normal'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-117601377862648179</id><published>2007-04-07T23:26:00.000-07:00</published><updated>2007-04-07T23:29:38.626-07:00</updated><title type='text'>Projecting a vector</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/7013/1105/1600/192015/projection.png"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/7013/1105/200/87790/projection.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Projection of a vector on to another vector&lt;br /&gt;Suppose we want to project b on a. This is an another vector with the same direction as a. So we will just calculate the component of b along a and multiply it with unit vector of a to get the projection of b on a. The component of b along a is b cos(theta) where theta is the angle between a and b. we know that a.b = a.b.cos(theta).Then proj of b on a = (a.b/a)*(unit vector a)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-117601377862648179?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601377862648179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601377862648179'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2007/04/projecting-vector.html' title='Projecting a vector'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-117601359023311036</id><published>2007-04-07T23:12:00.000-07:00</published><updated>2007-04-07T23:26:30.246-07:00</updated><title type='text'>Back face culling</title><content type='html'>Back face culling&lt;br /&gt;We know that dot product between two vertices is : zero when they are perpendicular to each other, greater than zero when angle between them is acute, and less than zero when angle between them is obtuse. This property is used for making a decision to whether render a triangle in a scene with respect to a camera. Only the triangles which are  facing  the camera needs to be drawn. Camera has a camera direction unit vector(look at vector ) and each triangle has a normal vector. If the dot product of these two vectors is less than zero, it means the camera is facing the triangle and the triangle passes the test.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-117601359023311036?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601359023311036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/117601359023311036'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2007/04/back-face-culling.html' title='Back face culling'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-116887966745431231</id><published>2007-01-15T08:40:00.000-08:00</published><updated>2007-01-15T08:58:34.540-08:00</updated><title type='text'>The Inevitable Pipeline</title><content type='html'>&lt;a href="http://photos1.blogger.com/x/blogger/7013/1105/1600/141824/pip.gif"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/x/blogger/7013/1105/320/132588/pip.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here you will see the geometry pipeline of a game engine. With the help of data structures like BSP tree a part of the game geometry is selected to render and the selected part is passed to the geometry pipeline. The pipeline takes vertices as input. At first note that in our game there will be a coordinate system. It is called world coordinate system. The 3D models that are to be used inside the game use another coordinate system chosen by the modeler or level designer. It is called modeling coordinate system. The first task of the geometry pipeline is to convert modeling coordinates into world coordinates. This is the world transformation.&lt;br /&gt;In this world coordinate system there is an additional coordinate system (sometimes more than one). This additional coordinate system belongs to the camera. The world space coordinates are relocated and rotated around the camera's view. This is the view transformation.&lt;br /&gt;Now the next transformation gives us the illusion of distant objects appearing small and near objects look big. It is called projection transformation.&lt;br /&gt;Now we need to remove any vertices that will not be visible. This process is called clipping. After clipping, the remaining vertices are scaled according to the viewport parameters and converted into screen coordinates. The screen coordinates are sent to the next stage of the pipeline for tasks such as shading and scan convertion.&lt;br /&gt;Similar pipeline is implemented in graphics APIs such as OpenGL and Direct3D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-116887966745431231?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/116887966745431231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/116887966745431231'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2007/01/inevitable-pipeline.html' title='The Inevitable Pipeline'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-115996864015410962</id><published>2006-10-04T06:01:00.000-07:00</published><updated>2006-10-04T06:30:40.220-07:00</updated><title type='text'>ICAT syllabus for PG Programme in game dev</title><content type='html'>I got some really good stuff about game programmers should learn from &lt;a href="http://www.icat.ac.in"&gt;www.icat.ac.in&lt;/a&gt;&lt;br /&gt;HERE IS IT&lt;br /&gt;=====================================================================&lt;br /&gt;DIGITAL MEDIA TECHNOLOGIES&lt;br /&gt;Introduction&lt;br /&gt;=============  &lt;br /&gt;* Elements of Digital Media  &lt;br /&gt;* Principles of Digital Media  &lt;br /&gt;* Introduction to software used in the Digital Media industry&lt;br /&gt;Design Concept&lt;br /&gt;==========&lt;br /&gt; * Principles of Design  &lt;br /&gt;* Introduction to colour theory&lt;br /&gt;Digital Design&lt;br /&gt;==============  &lt;br /&gt;* Introduction to Graphic Designing  &lt;br /&gt;* Colour systems (RGB, grey scale, CMYK) and file formats  &lt;br /&gt;* Creating and manipulating bitmap and vector images  &lt;br /&gt;* Creating Backgrounds/ Matte painting  &lt;br /&gt;* Scanning, storing and transporting images  &lt;br /&gt;* Enlargement and reduction, resolution, colour depth, image size and file size  &lt;br /&gt;* Palette, mode and image attributes  &lt;br /&gt;* Transformation of objects, reshaping and applying effects and filters  &lt;br /&gt;* Paths &amp; Type  &lt;br /&gt;* Masking  &lt;br /&gt;* Layer Concept  &lt;br /&gt;* Understanding Colour &amp; Colour Correction  &lt;br /&gt;* Filters &amp; Texture&lt;br /&gt;UI Design&lt;br /&gt;=========  &lt;br /&gt;* Menu Design  &lt;br /&gt;* Colour Psychology  &lt;br /&gt;* Ergonomics&lt;br /&gt;SCIENCE FOR GAMING&lt;br /&gt;==================&lt;br /&gt;Operating Systems&lt;br /&gt;=================  &lt;br /&gt;* Introduction to O/S  &lt;br /&gt;* O/S Concepts and Structure  &lt;br /&gt;* Processes  &lt;br /&gt;* Memory Management  &lt;br /&gt;* File System  &lt;br /&gt;* Input/Output System  &lt;br /&gt;* Deadlocks&lt;br /&gt;Data Structures&lt;br /&gt;=================  &lt;br /&gt;* Abstract Data Types, Classes and Objects  &lt;br /&gt;* Analysis of Algorithm  &lt;br /&gt;* Foundational Data Structures  &lt;br /&gt;* Lists  &lt;br /&gt;* Stack  &lt;br /&gt;* Queues  &lt;br /&gt;* Tables  &lt;br /&gt;* Trees  &lt;br /&gt;* Graphs&lt;br /&gt;Object Oriented Analysis &amp; Design&lt;br /&gt;==================================  &lt;br /&gt;* Introduction to OOAD  &lt;br /&gt;* Introduction to UML  &lt;br /&gt;* Case modelling and Case study  &lt;br /&gt;* OO Analysis  &lt;br /&gt;* Class design  &lt;br /&gt;* Behavioural modelling  &lt;br /&gt;* Software architecture design and modelling  &lt;br /&gt;* OO Design patterns&lt;br /&gt;Software Engineering&lt;br /&gt;====================  &lt;br /&gt;* Introduction to Software Engineering  &lt;br /&gt;* Variables  &lt;br /&gt;* Statements  &lt;br /&gt;* Code Improvements  &lt;br /&gt;* System Considerations  &lt;br /&gt;* Software Craftsmanship  &lt;br /&gt;* CVS&lt;br /&gt;Mathematics&lt;br /&gt;===========  &lt;br /&gt;* Set Theory and Functions, Polynomials  &lt;br /&gt;* Trigonometry, Vector Math  &lt;br /&gt;* Quaternion Algebra, Linear Transformation  &lt;br /&gt;* Analytical Geometry,&lt;br /&gt;Physics&lt;br /&gt;=======  &lt;br /&gt;* Newtonian Physics, Gravity and Friction , Acceleration and Velocity, Trajectories  &lt;br /&gt;* Kinematics and Motion control  &lt;br /&gt;* Collision Detection and Response&lt;br /&gt;&lt;br /&gt;Programming&lt;br /&gt;===========  &lt;br /&gt;* Pointers and Pointer Arithmetic  &lt;br /&gt;* Data Types and OOPS Principles  &lt;br /&gt;* Dynamic Memory &lt;br /&gt;*STL and Name Spaces  &lt;br /&gt;* Classes and Class Design  &lt;br /&gt;* Templates  &lt;br /&gt;* WIN32 API&lt;br /&gt;Graphics Fundamentals&lt;br /&gt;===================== &lt;br /&gt; * Concepts of Dimension  &lt;br /&gt;* 3D Pipeline  &lt;br /&gt;* Audio, Video and Picture Formats  &lt;br /&gt;* 3D File Formats  &lt;br /&gt;* Lighting and Materials  &lt;br /&gt;* Transformation and Lighting Pipeline &lt;br /&gt;* Rendering Pipeline  &lt;br /&gt;* Hidden Surface removal, BSP trees, culling.  &lt;br /&gt;* Camera Management Systems  &lt;br /&gt;* Terrain And Height Maps  &lt;br /&gt;* Sorting Algorithms&lt;br /&gt;Graphics API (Direct X)&lt;br /&gt;======================== &lt;br /&gt;* Introduction and Pre-requisites for DirectX  &lt;br /&gt;* Vertex and Indexed Buffers  &lt;br /&gt;* Single and Multitexture Effects  &lt;br /&gt;* Compressed Textures  &lt;br /&gt;* Colour Blending  &lt;br /&gt;* Effect Framework  &lt;br /&gt;* Alpha Blending  &lt;br /&gt;* Billboards and particle Systems  &lt;br /&gt;* Decals  &lt;br /&gt;* Skeletal Animation  &lt;br /&gt;* Keyframe Animation  &lt;br /&gt;* Indexed / Non Indexed vertex Blending  &lt;br /&gt;* Shaders and HLSL  &lt;br /&gt;* Light Maps  &lt;br /&gt;* Bump, Environment Mapping  &lt;br /&gt;* Stencil Buffers  &lt;br /&gt;* Level of Detail (LOD)&lt;br /&gt;Effects&lt;br /&gt;=======  &lt;br /&gt;* Weapon Effects  &lt;br /&gt;* Dynamic Lighting,  &lt;br /&gt;* Shadow and Lens flare &lt;br /&gt;* Rain, Snow, Fog, Smoke, Fire, Particles and Plasma  &lt;br /&gt;* Lighting and Thunder,  &lt;br /&gt;* 3D Sound&lt;br /&gt;GAME DEVELOPMENT WITH ENGINE&lt;br /&gt;===============================&lt;br /&gt;Introduction&lt;br /&gt;============  &lt;br /&gt;* Intro to Game Engines and Game Engine Architecture  &lt;br /&gt;* Game Engine Level Editor  &lt;br /&gt;* Scripting in the Engine&lt;br /&gt;Level Designing&lt;br /&gt;===============  &lt;br /&gt;* Tools and concepts used to create levels for games  &lt;br /&gt;* Level design and architecture theory  &lt;br /&gt;* Concepts of the “critical path” and “flow”  &lt;br /&gt;* Game balancing  &lt;br /&gt;* Play testing&lt;br /&gt;&lt;br /&gt;GAME PROGRAMMING&lt;br /&gt;=================&lt;br /&gt;Artificial Intelligence&lt;br /&gt;===============&lt;br /&gt; * Basic Deterministic Rule&lt;br /&gt;*Random Motion  &lt;br /&gt;* Tracking and Evasion Algorithm&lt;br /&gt;*behavioural State Systems &lt;br /&gt;*Basic Search Tree Systems  &lt;br /&gt;* Shortest Path Algorithm  &lt;br /&gt;* Basic Path Finding&lt;br /&gt;Network Programming&lt;br /&gt;===================  &lt;br /&gt;* Winsock  &lt;br /&gt;* TCP/IP, UDP  &lt;br /&gt;* Direct Play  &lt;br /&gt;* CRC, Dead Reckoning  &lt;br /&gt;* Multiplayer and Distributed Gaming&lt;br /&gt;I/O Programming&lt;br /&gt;===============  &lt;br /&gt;* Keyboard, Mouse, Joystick Interfacing  &lt;br /&gt;* Force Feedback  &lt;br /&gt;* Hardware Abstraction&lt;br /&gt;Mobile Game Development&lt;br /&gt;=======================  &lt;br /&gt;* Introduction to Mobile Gaming  &lt;br /&gt;J2ME Overview  &lt;br /&gt;* Creating MIDlet &lt;br /&gt;*Configuring J2ME&lt;br /&gt;* Limitations &amp; Optimisation  &lt;br /&gt;* Intergraded Developer Environment  &lt;br /&gt;* High Level User Interface  &lt;br /&gt;* Low Level User Interface  &lt;br /&gt;* Audio &lt;br /&gt;* Record Store  &lt;br /&gt;* 3D API  &lt;br /&gt;* Emulators  &lt;br /&gt;* Porting &amp;amp; Deployment&lt;br /&gt;====================================================================&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-115996864015410962?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115996864015410962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115996864015410962'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2006/10/icat-syllabus-for-pg-programme-in-game.html' title='ICAT syllabus for PG Programme in game dev'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-115980246180191708</id><published>2005-11-14T07:17:00.000-08:00</published><updated>2007-05-25T07:50:23.743-07:00</updated><title type='text'>3D Maths Part III:Vector Algebra</title><content type='html'>&lt;p class="MsoNormal"&gt;Vectors are of fundamental importance in any 3D game engine. They are used to represent points and directions in space. They are used to represent spatial directions such as direction of light, orientation of camera, normal of a triangular mesh. Understanding how to manipulate vectors is an essential skill for a successful 3D programmer.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Affine Space&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=========&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Imagine our universe. Has it got any origin or axes? NO. But we can define Origin as the sun and define axes. Or we can take the Origin as center of the earth.&lt;span style=""&gt; &lt;span lang="EN"&gt;In mathematics, an &lt;span style=""&gt;affine space&lt;/span&gt; is an abstract structure that generalises the affine-geometric properties of Euclidean space. In an affine space, one can subtract points to get vectors, or add a vector to a point to get another point, but one cannot add points, since there is no origin.Math gurus please visit wikipedia for more info.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Vector Algebra&lt;/p&gt;  &lt;p class="MsoNormal"&gt;===========&lt;/p&gt;  &lt;p class="MsoNormal"&gt;A vector is represented as a list of its components (V1, V2, V3,…, Vn)&lt;span style=""&gt;  &lt;/span&gt;where n is the dimension of the vector. You can get more information about vectors from wikipedia.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Types of Vectors&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;Zero (Null) Vector: A vector whose magnitude is zero; magnitude is calculated as&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;root of(V1&lt;sup&gt;2&lt;/sup&gt; + V2&lt;sup&gt;2&lt;/sup&gt; V3&lt;sup&gt;2&lt;/sup&gt; +…+V1&lt;sup&gt;2&lt;/sup&gt;)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Unit Vector: A vector whose magnitude is unity.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Like Vectors: Vectors whose directions are the same&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Unlike Vectors: Vectors whose directions are opposite&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Negative of a vector: Vector which is opposite in direction but same in magnitude&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Collinear Vectors: Vectors which are parallel and in the same line of action&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Co-Initial Vector: A vector which is not altered by shifting it about parallel in space&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Free Vector: If it is our liberty to choose origin for a vector then it is a free vector&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Localized Vector: If we cannot choose the vector’s origin then it is a localized vector&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Addition of two vectors&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=================&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b) + (c,d) = (a+c,b+d)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Properties&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=======&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Commutative,&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Associative,&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Existence of additive identity&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Existence of additive inverse&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Substraction of two vectors&lt;/p&gt;  &lt;p class="MsoNormal"&gt;====================&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b) – (c,d) &lt;/p&gt;  &lt;p class="MsoNormal"&gt;take negative of (c,d) then add&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b)+(-(c,d))&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b)+(-c,-d) = (a-c, b-d)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Properties same as additive properties&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Multiplication by scalar&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=================&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;5*(a,b) =&lt;span style=""&gt;  &lt;/span&gt;(5a,5b)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Properties&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=======&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Associative&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Distributive&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Existence of Identity&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Dot Product&lt;/p&gt;  &lt;p class="MsoNormal"&gt;=========&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b) . (c,d) = (ac,bd)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;AB.CD = mag(AB)*mag(CD)*cos(theta)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Where AB,CD are two vectors and theta the angle between them&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Cross Product&lt;/p&gt;  &lt;p class="MsoNormal"&gt;==========&lt;/p&gt;  &lt;p class="MsoNormal"&gt;(a,b,c) X (d,e,f) = &lt;span style=""&gt; &lt;/span&gt;determinant( i,j,k,a,b,c,d,e,f)&lt;/p&gt;&lt;p class="MsoNormal"&gt;where i,j,k are the unit vectors&lt;br /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;AB.CD = mag(AB)*mag(CD)*sin(theta)*n&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Where AB,CD are two vectors and theta the angle between them and n the normal vector perpendicular to both AB and CD&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-115980246180191708?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115980246180191708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115980246180191708'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/11/3d-maths-part-iiivector-algebra.html' title='3D Maths Part III:Vector Algebra'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-115151613806309271</id><published>2005-10-16T10:24:00.002-07:00</published><updated>2006-10-02T03:46:12.113-07:00</updated><title type='text'>3D Maths Part II:Geometry: Some Basic Definitions</title><content type='html'>&lt;em&gt;Quote: "A journey of 1000 miles begins with a single step"&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Point&lt;br /&gt;====&lt;br /&gt;A location in a plane or in space, having zero dimensions.&lt;br /&gt;&lt;br /&gt;Lines&lt;br /&gt;====&lt;br /&gt;A line is made up of an infinite number of points. Points in the same line are called colinear. Between each point is another point. This continues on forever. Thus a line is a one-dimensional figure. That is, a line has length, but no width or height.&lt;br /&gt;A line can be defined by two points A and B. its in infinite length, passing through the points and extending forever in both directions. A line segment between two points A and B, the line that contains them is the set of points consisting of the distinct points A and B, all of the points between them.But the line segment AB extends from to A to B only. A ray is semi infinite. It is specified by a point and direction through its end points. A ray that contains two points A and B is the set of points consisting of the distinct points A and B,all of the points between them, and all points for which B is between them and A.&lt;br /&gt;&lt;br /&gt;Every line is either horizontal, vertical or oblique. Horizontal lines have a slope of zero. Vertical lines are said to have infinite slope. In space, vertical lines never meet, but it is possible for horizontal lines to meet. There are four different relationships that two lines can have.&lt;br /&gt;Lines can be identical, intersecting, parallel, perpendicular, or skew. Identical lines are lines that coincide. Therefore, they are the same line. The second one is the most obvious. Intersecting lines are lines that share a point. Parallel lines are coplanar lines that never intersect. They always have a certain distance between them and always have the same direction. Perpendicular lines are lines that intersect in one point and form a 90 degree angle. Skew lines only happen in space. They are noncoplanar lines that never intersect. Unlike parallel lines, however, they don't always have a set distance between them, nor do they always have the same direction.&lt;br /&gt;&lt;br /&gt;Planes&lt;br /&gt;=====&lt;br /&gt;Planes are two-dimensional. A plane has length and width, but no height, and extends infinitely on all sides.Planes are thought of as flat surfaces. A plane is made up of an infinite amount of lines. Some properties of planes:-&lt;br /&gt;1)Any line joining two points on a plane lies wholly in that plane.&lt;br /&gt;2)One and only one plane can be drawn through three non-collinear points&lt;br /&gt;3)One and only one plane can be drawn to contain two concurrent lines.&lt;br /&gt;4)One and only one plane can be drawn perpendicular to a given direction and at a given distance from the origin&lt;br /&gt;5)One and only one plane can be drawn through a given point and perpendicular to a given direction.&lt;br /&gt;&lt;br /&gt;Two-dimensional figures are called plane figures. e.g. rectangle, circle, pentagons etc.A closed plane figure made up of several line segments that are joined together is called a polygon.&lt;br /&gt;&lt;br /&gt;Space&lt;br /&gt;====&lt;br /&gt;Space is the set of all points. It is made up of an infinite number of planes.&lt;br /&gt;Figures in space are called solids or surfaces. eg. cube, sphere etc.&lt;br /&gt;A three-dimensional solid that is bounded by plane polygons is called a polyhedron.&lt;br /&gt;&lt;br /&gt;Locus&lt;br /&gt;======&lt;br /&gt;Locus of a moving point is the path traced by the point satisfying some geometrical&lt;br /&gt;conditions.&lt;br /&gt;&lt;br /&gt;Change of axes&lt;br /&gt;=============&lt;br /&gt;Translation: To alter the origin of coordinates without altering the direction of axes.&lt;br /&gt;Rotation      : To change the direction of axes of coordinates without changing the origin.&lt;br /&gt;&lt;br /&gt;Conic Sections&lt;br /&gt;=============&lt;br /&gt;The curves obtained by slicing a cone with a plane that does not pass through the vertex are called conic sections&lt;br /&gt;&lt;br /&gt;Parametric Representation&lt;br /&gt;=======================&lt;br /&gt;Suppose we have a point moving around in the (x, y) plane. At each time t the particle will be at some point whose coordinates we can write as (x(t), y(t)). i.e. the x and y coordinates of the point are given as functions of the parameter t. Many curves can be most conveniently expressed in the form x = x(t)        y = y(t) where t is some parameter.  t need not be time, though it often helps to think about it in that way. This is called a parametric representation of the curve. e.g. Parametric eqn of a circle   x&lt;sup&gt;2&lt;/sup&gt; +y&lt;sup&gt;2&lt;/sup&gt; = r&lt;sup&gt;2&lt;/sup&gt; is   x  =  r cos(t),  y = r sin( t)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-115151613806309271?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115151613806309271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115151613806309271'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/10/3d-maths-part-iigeometry-s_115151613806309271.html' title='3D Maths Part II:Geometry: Some Basic Definitions'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-115109378783529170</id><published>2005-09-25T00:38:00.000-07:00</published><updated>2006-07-06T10:17:35.993-07:00</updated><title type='text'>3D Maths Part I: Vectors and Points</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;"Real game programmers are not afraid of maths"&lt;/em&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Introduction&lt;/p&gt;&lt;p&gt;All physical quantities are classified into two types viz,scalars and vectors. Scalars are the quantities having magnitude only and not related to any fixed direction. Vectors are the quanties having magnitude and direction.e.g. mass, volume, distance, temperature,time speed and density are scalarswhere as displacement,velocity, force, acceleration and momentum are vectors.In a graphics system vectors and points are used to express geometrical ideas&lt;br /&gt;algebraically. Vector algebra is the main tool for problem solving in CG.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3D Cartesian coordinate system&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/7013/1105/1600/Cartesian.1.gif"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7013/1105/200/Cartesian.0.gif" border="0" /&gt;&lt;/a&gt; &lt;p&gt;All points and vectors work relative to some coordinate system. 3D cartesian coordinate system is the most used one. Let O(Origin) be any point in space and X'OX , Y'OY and Z'OZ be any three mutually perpendicular lines.These lines are called axes. Distances are marked along each axes. Let OX,OY and OZ be marked from zero to (+)ve infinity, and OX',OY' and OZ' be marked from zero to (-)ve infinity.This system can take the form a right handed or left handed system.To form a right handed system take the plane formed by axes X'OX and Y'OY.Then grasp your right hand around the Z-axis(Z'OZ )by sweeping from positive X-axis(OX) around to the positive y-axis(OY). Note the direction to which your thumb points. This is the direction of your positive Z-axis(OZ). To form a left handed system do the same thing with your left hand and your direction of your thumb will give you the direction of your positive Z-axis.Note that OpenGL uses right handed system, where as DirectX uses left handed system.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Points Vs Vectors&lt;/p&gt;&lt;p&gt;Points specify a location in space (or in the plane). A point is a position specified with coordinate values in some reference frame, so thatdistance from the origin depends on the choice of the reference frame.In the 3D cartesian coordinate system a point is represented in the form (x,y,z); where x is the distance of the point along X axis from origin, y is the distance of the point along Y axis from origin,z is the distance of the point along Z axis from origin. &lt;/p&gt;&lt;p&gt;With respect to CG think of a vector as a displacement from one point to another.A vector is often geometrically represented as a directed line segment. Because vector is a displacement it has a size and direction but no inherent location.If v is the vector from point A to point B then we can say that point B is formed by displacing point A to B. ie, A+&lt;strong&gt;v&lt;/strong&gt;=B or &lt;strong&gt;v&lt;/strong&gt;=B-A. Thus the difference between two points is a vector.&lt;/p&gt;&lt;p&gt;The following are the operations with points and vectors&lt;/p&gt;&lt;p&gt;point - point = vector&lt;/p&gt;&lt;p&gt;point + vector = point&lt;/p&gt;&lt;p&gt;point - vector = point&lt;/p&gt;&lt;p&gt;vector +vector = vector &lt;/p&gt;&lt;p&gt;vector - vector = vector &lt;/p&gt;&lt;p&gt;point + point: NOT DEFINED!&lt;/p&gt;&lt;p&gt;NB:The fundamental difference between a point and a vector is that points have location but no direction whereas vectors have direction but no location.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-115109378783529170?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115109378783529170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/115109378783529170'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/09/3d-maths-part-i-vectors-and-points.html' title='3D Maths Part I: Vectors and Points'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-112386261908297569</id><published>2005-08-12T08:56:00.000-07:00</published><updated>2005-08-12T09:03:39.093-07:00</updated><title type='text'>Advice to young programmers</title><content type='html'>This is the summary of speech Given by Alex Stepenov (The man behind STL ; Principal Scientist, Adobe Systems) at Adobe India on 30 Nov 2004. It's really a great speech. I think every programmer should read it.&lt;br /&gt;&lt;br /&gt;1. Study , Study and Study&lt;br /&gt;&lt;br /&gt;- Never ever think that you have acquired all or most of the knowledge which exists in the world. Almost everybody in US at age of 14 and everybody in India at age of 24 starts thinking that he has acquired all the wisdom and knowledge that he needs. This should be strictly avoided.&lt;br /&gt;- You should be habituated to studies...exactly in the same way as you are habituated to brushing teeth and taking bath every morning. The habit of study must become a ‘part of your blood’. And the study should be from both the areas: CS, since it is your profession, and something from non-CS...Something which doesnot relate to your work. This would expand your knowledge in other field too. A regular study, everyday, is extremely essential. It doesnot matter whether you study of 20 minutes of 2 hours, but consistency is a must.&lt;br /&gt;- You should always study basics and fundamentals. There is no point in going for advanced topics. When I was at the age of 24, I wanted to do PhD in program verification, though I was not able to understand anything from that. The basic reason was that my fundamental concepts were not clear. Studying ‘Algebraic Geometry’ is useless if you donot understand basics in Algebra and Geometry. Also, you should always go back and re-read and re-iterate over the fundamental concepts. What is the exact definition of ‘fundamental’? The stuff which is around for a while and which forms basic part of the concepts can be regarded as more fundamental. Of course, everybody understands what a fundamental means.&lt;br /&gt;- Here are few books which I would strongly recommend that every CS professional should read and understand.&lt;br /&gt;i. “Structure and Interpretation of Computer Programs” by Albenson and Sussman I personally donot like the material present in this book and I do have some objections about it but this is the best book I have ever seen which explains all the concepts in programming in a clear and excellent way. This book is available online at &lt;a href="http://mitpress.mit.edu/sicp/"&gt;http://mitpress.mit.edu/sicp/&lt;/a&gt;&lt;br /&gt;ii. Introduction to Computer Architecture: by Hennessy and Patterson. How many of you have shipped the programs by writing them in assembly? A very good understanding of basics of how a computer operates is what every CS professional must have. H&amp;P Wrote two books on CA. I am talking about their first book, the introductory text for understanding basic aspects of how a computer works. Even if you feel that you know whatever is written in that book, donot stop reading. It’s good to revise basics again and again. iii. “Fundamentals of Programming” by Donald Knuth. The core of CS is algorithms and Data structures. Every CS professional must have the 3 volumes of Knuth’s Book on programming. It really doesnot matter if you take 30 years of your life to understand what Knuth has written, what is more important is that you read atleast some part of that book everyday without fail. iv. Introduction to Algorithms by Cormen, Leiserson and Rivest This book should be read daily to keep your concepts fresh. This is the best book for fundamental concepts in algorithms.&lt;br /&gt;&lt;br /&gt;2. Learn Professional Ethics&lt;br /&gt;&lt;br /&gt;- As a CS Professional, you are morally obliged to do a good job. What this means is that you are supposed to do your job not for your manager but for yourself. This is already told in Bhagwatgeeta : Doing duties of your life.&lt;br /&gt;- The direct implication of this is: never ever write a bad code. You don’t need to be fastest and run after shipping dates; rather you need to write quality code. Never write junk code. Rewrite it till it is good. Thoroughly test every piece of code that you write. Donot write codes which are “sort of allright”. You might not achieve perfection, but atleast your code should be of good quality.&lt;br /&gt;- Let me quote my own example in this context. You might have heard about STL, The Standard Template Library that ships in with C++ compilers. I wrote it 10 years ago, in 1994. While implementing one of the routines in the STL, namely the “search routine”, I was a bit lazy and instead of writing a good linear order implementation of KMP which was&lt;br /&gt;difficult to code, I wrote a best quadratic implementation. I knew that I could make the search faster by writing a linear-order implementation, but I was lazy and I did not do that. And, after 10 years of my writing STL, exactly the same implementation is still used inside STL and STL ships with an inefficient quadratic implementation of search routine even today!! You might ask me: why can’t you rewrite that? Well...I cannot, because that code is no more my property!! Further, nobody today will be interested in a standalone efficient STL ...people would prefer one which automatically ships out with the compiler itself.&lt;br /&gt;- Moral is, you should have aesthetic beauty built inside you. You should “feel” uneasy on writing bad code and should be eager to rewrite the code till it becomes upto the quality. And to the judge the quality, you need to develop sense regarding which algorithms to use under what circumstances.&lt;br /&gt;&lt;br /&gt;3. Figure out your Goals&lt;br /&gt;&lt;br /&gt;- Always aspire doing bigger things in life&lt;br /&gt;- “Viewing promotion path as your career” is a completely wrong goal. If you are really interested in studying and learning new things, never ever aspire for being a manager. Managers cannot learn and study...they have no time. “Company ladder aspiration” is not what should be important for you.&lt;br /&gt;- You might feel that you want to do certain things which you cannot do till you become a manager. When you become a manager, you will soon realize that now you just cannot do anything!&lt;br /&gt;- You will have a great experience as programmers. But if you care for people and love people, you will never enjoy being a manager...most good managers are reluctant managers. If you see people as people, you cannot survive at management level.&lt;br /&gt;- Always aspire for professional greatness. Our profession is very beautiful because we create abstract models and implement them in reality. There is a big fun in doing that. We have a profession which allows us to do creative things and even gives nice salary for that.&lt;br /&gt;- The three biggest mistakes that people usually make are aiming for money, aiming for promotion and aiming for fame. The moment you get some of these, you aspire for some more...and then there is no end. I donot mean that you shouldnot earn money, but you should understand how much&lt;br /&gt;money would satisfy your needs. Bill Clinton might be the richest person in the world; he is certainly not the happiest. Our lives are far better than his.&lt;br /&gt;- Find your goal, and do best in the job that you have. Understand that what is in your pocket doesnot matter...what is in your brain finally matters. Money and fame donot matter. Knowledge matters.&lt;br /&gt;&lt;br /&gt;4. Follow your culture &lt;br /&gt;&lt;br /&gt;I have seen the tradition that whatever junk is created in &lt;br /&gt;US, it rapidly spreads up in the rest of the world, and India is not an exception for this. This cultural change creates a very strong impact on everybody’s life. Habits of watching spicy Bollywood or Hollywood movies and listening to pop songs and all such stupid stuff gets very easily cultivated in people of your age...but believe me, there is nothing great in that. This all just makes you run away from your culture. And there is no wisdom in running away from your culture. Indian culture, which has great Vedas and stories like Mahabharata and Bhagwatgeeta is really great and even Donald Knuth enjoys reading that. You should understand that fundamental things in Indian culture teach you a lot and you should never forget them. Finally, I would like to conclude by saying that it’s your life...donot waste it on stupid things...develop your tests, and start the fight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-112386261908297569?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112386261908297569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112386261908297569'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/08/advice-to-young-programmers.html' title='Advice to young programmers'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-112284613660829369</id><published>2005-07-31T08:29:00.000-07:00</published><updated>2006-07-06T10:05:29.153-07:00</updated><title type='text'>To: My dear noobie game programmer Part II</title><content type='html'>Getting your hands dirty with 2D&lt;br /&gt;In the near future, I will be writing on how to make PC games that work on windows platforms. I use VC++ and windows programming for this purpose.&lt;br /&gt;The following was the roadmap for my journey to 2D game development.&lt;br /&gt;Hope it would suit you too.&lt;br /&gt;&lt;br /&gt;Study VC++, Platform SDK (Windows Programming)&lt;br /&gt;Make games using GDI(Graphics library with in the Platform SDK)&lt;br /&gt;Study DirectX( 2D,input and audio portion)&lt;br /&gt;Make games using DirectX&lt;br /&gt;&lt;br /&gt;If you are an avid fan of 3D games and want to go for 3D first, take care that you don’t get messed up with 3D fundas. I had to sit three weeks in front of my PC to get my first frame of my 3D app! By doing different types of 2D games you can master the concepts of manipulating and displaying animated and non-animated sprites, implementing game logic, physics, player input, music sound etc. That will definitely help you when you do 3D games. Therefore I suggest you to go for 2D first. The three 2D APIs that have high demand are DirectX, Flash and J2ME (for mobile platforms).&lt;br /&gt;&lt;br /&gt;I would recommend to any budding game programmer to do the clones of following games before entering the world of 3D game programming or starting commercial development of 2D games. The list may be incomplete.&lt;br /&gt;1. Space Invaders&lt;br /&gt;2. Pong&lt;br /&gt;3. Pac-Man&lt;br /&gt;4. Battle City / Tank&lt;br /&gt;5. Snake&lt;br /&gt;6. Jigsaw puzzle&lt;br /&gt;7. Tic-Tac-Toe&lt;br /&gt;8. Reversi&lt;br /&gt;9. Car Race&lt;br /&gt;10. Super Mario&lt;br /&gt;Before start making these games organise all reusable functions in a class library as your engine wrapper. Also get a level editing tool like Mappy or Tile Studio.&lt;br /&gt;&lt;br /&gt;BOOKS&lt;br /&gt;PLs:-&lt;br /&gt;The C Programming Language - B.Kernighan &amp; D.Ritchie&lt;br /&gt;The C++ Programming Language - Bjarne Stroustrup&lt;br /&gt;Java, The Complete Reference - Herbert SchildtJ2ME,&lt;br /&gt;Visual C++, The complete Reference – Pappas and Murray&lt;br /&gt;Programming Windows – Charles Petzold&lt;br /&gt;Programming Windows with MFC - Jeff Prosise&lt;br /&gt;&lt;br /&gt;Essential Theory, Graphics and Maths:-&lt;br /&gt;Computer Graphics, Principles and Practice - Foley, vanDam, Feiner, Hughes&lt;br /&gt;A Trip Down the Graphics Pipeline- Jim Blinn&lt;br /&gt;Principles of Interactive Computer Graphics- Newman &amp;amp; Sproull&lt;br /&gt;Computer Graphics – Hearn and Baker&lt;br /&gt;3D Computer Graphics - Alan Watt&lt;br /&gt;Computer Graphics Using Open GL - Francis S. Hill, Jr.&lt;br /&gt;Geometric Tools for Computer Graphics - Philip J.Schneider &amp; David H.Eberly&lt;br /&gt;Mathematics for 3D Game Programming and Computer Graphics -Eric Lengyel&lt;br /&gt;&lt;br /&gt;More Essential Theory:-&lt;br /&gt;Mechanics-&lt;br /&gt;Programming Languages Design and Implementaion- Pratt &amp; Zelkowitz&lt;br /&gt;Modern Operating Systems - A.S.Tanenbaum&lt;br /&gt;Datastructures-&lt;br /&gt;Algorithms Analysis and Design-&lt;br /&gt;Compilers Theory,Practice and Tools - Aho, Ulman, Sethi&lt;br /&gt;Computer Organization and Architecture-&lt;br /&gt;Artificial Intelligence -&lt;br /&gt;Computer Networks – A.S.Tanenbaum&lt;br /&gt;&lt;br /&gt;Rendering APIs:-&lt;br /&gt;OpenGL Superbible - Richard S Wright &amp; Michael Sweet&lt;br /&gt;OpenGL  Red Book  - OpenGL ARB&lt;br /&gt;DirectX7 in 24 hours -Robert Dunlop, et alBeginning DirectX9 - Wendy Jones&lt;br /&gt;&lt;br /&gt;Engine Design and Programming:&lt;br /&gt;3D Game Engine Programming- Stefan Zerbst &amp; Oliver Duvel&lt;br /&gt;&lt;br /&gt;Game Programming:&lt;br /&gt;J2ME Game Programming - Martin J Wells&lt;br /&gt;Teach yourself game programming in 24 hours – Michael Morrison&lt;br /&gt;Windows Game Programming for Dummies – Andre Lamothe&lt;br /&gt;Game Progamming All in One -Bruno Miguel Teixeira de Sousa&lt;br /&gt;Game Coding Complete - Mike McShaffry&lt;br /&gt;&lt;br /&gt;Beyond Graphics:&lt;br /&gt;Physics for Game Developers - David M.Bourg&lt;br /&gt;AI for Game Developers -  David M. Bourg, Glenn Seeman&lt;br /&gt;Programming Multiplayer Games - Andrew Mulholland &amp;amp; Teijo Hakala&lt;br /&gt;URLS&lt;br /&gt;&lt;a href="http://www.gamedev.net/"&gt;http://www.gamedev.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gpwiki.org/"&gt;http://www.gpwiki.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gameprogrammer.com/"&gt;http://www.gameprogrammer.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gametutorials.com/"&gt;http://www.gametutorials.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gamedeveloper.net/"&gt;http://www.gamedeveloper.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gamespp.com/"&gt;http://www.gamespp.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gamasutra.com/"&gt;http://www.gamasutra.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gdmag.com/"&gt;http://www.gdmag.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gdse.com/"&gt;http://www.gdse.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.flipcode.com/"&gt;http://www.flipcode.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.msdn.com/"&gt;http://www.msdn.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gameai.com/"&gt;http://www.gameai.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aiguru.com/"&gt;http://www.aiguru.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ai-depot.com/"&gt;http://www.ai-depot.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.generation5.org/"&gt;http://www.generation5.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aihorizon.com/"&gt;http://www.aihorizon.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aaai.org"&gt;www.aaai.org&lt;/a&gt;&lt;br /&gt;IRC&lt;br /&gt;&lt;a href="mailto:#gamedev@AfterNET.org"&gt;#gamedev@AfterNET.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-112284613660829369?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112284613660829369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112284613660829369'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/07/to-my-dear-noobie-game-programmer-part.html' title='To: My dear noobie game programmer Part II'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-112284206436898801</id><published>2005-06-30T21:07:00.000-07:00</published><updated>2005-07-31T13:55:52.353-07:00</updated><title type='text'>To:  My dear noobie game programmer Part I</title><content type='html'>Programming games is not as easy like playing them. You have to make a plan and  stick to  it for accomplishing that, or you might lose your interest soon because of the steep learning curve and constant failures. What I am going to discuss here today is what are the steps that can lead you to the hall of good game programmers.&lt;br /&gt;First things first. You must have  skills in mathematics and programming. The three main programming languages used for programming PC and console games are C, C++ and Java. It will be helpful to know the working of a PC or Console from chip level to application level.&lt;br /&gt;Quote: "You can see that knowing how something works may not be necessary for operating a mechanism but is useful for operating it efficiently. And as you may know, game programming is all about using things efficiently and taking them to the limit.”&lt;br /&gt;&lt;br /&gt;Here are some of the prerequisites for a typical company’s game programmer post.&lt;br /&gt;Is it too heavy? Don't even think about that word, coz you are a game programmer :)&lt;br /&gt;&lt;br /&gt;BASICS&lt;br /&gt;C, C++, Java, Assembly Language&lt;br /&gt;VC++, STL, MFC, GDI, Platform SDK,&lt;br /&gt;Data structures and Computer Algorithms&lt;br /&gt;Compilers architecture&lt;br /&gt;Operating systems architecture&lt;br /&gt;Computer networks architecture&lt;br /&gt;Graphics-API (DirectX, OpenGL)&lt;br /&gt;&lt;br /&gt;MATHS&lt;br /&gt;Algebra&lt;br /&gt;Geometry&lt;br /&gt;Coordinate Systems&lt;br /&gt;Trigonometry&lt;br /&gt;Number Systems&lt;br /&gt;Complex Numbers&lt;br /&gt;Vectors&lt;br /&gt;Matrices and Quaternion&lt;br /&gt;Numerical Methods and Interpolation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PHYSICS&lt;br /&gt;Every bit of Newtonian physics.&lt;br /&gt;&lt;br /&gt;GRAPHICS&lt;br /&gt;Hardware Knowledge (Devices, VGA, GPU etc)&lt;br /&gt;Basic graphics concepts of 2D and 3D&lt;br /&gt;Color Models, image-formats, image-processing routines&lt;br /&gt;Object representations&lt;br /&gt;Transformations, clipping, viewing&lt;br /&gt;Illumination&lt;br /&gt;Hidden surface Elimination&lt;br /&gt;Animations&lt;br /&gt;Game engine Architecture&lt;br /&gt;Standard graphics algorithms&lt;br /&gt;&lt;br /&gt;ARTIFICIAL INTELLIGENCE&lt;br /&gt;Bot movement AI (Deterministic and Non Deterministic)&lt;br /&gt;Path finding&lt;br /&gt;Scripting&lt;br /&gt;Finite state machines&lt;br /&gt;Fuzzy Logic, Neural Networks and Genetic Algorithms&lt;br /&gt;Rule Based AI&lt;br /&gt;Probability, Bayesian Techniques&lt;br /&gt;Dynamic Programming, Game Search Trees&lt;br /&gt;&lt;br /&gt;NETWORKS&lt;br /&gt;Thorough knowledge and skills in tcp/ip and udp&lt;br /&gt;Knowledge of protocols and working of computer networks&lt;br /&gt;Knowledge of authentic hacking&lt;br /&gt;Knowledge and experience in client-server applications development.&lt;br /&gt;Knowledge of website development and scripting languages&lt;br /&gt;&lt;br /&gt;You might have started swearing I guess! You can reach these goals, if you move according to a plan. I just put it to show the steps that you have to reach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-112284206436898801?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112284206436898801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/112284206436898801'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/06/to-my-dear-noobie-game-programmer-part.html' title='To:  My dear noobie game programmer Part I'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-12836797.post-111587858515383905</id><published>2005-05-11T23:10:00.000-07:00</published><updated>2005-07-31T13:26:54.096-07:00</updated><title type='text'>Intro</title><content type='html'>If you consider gamedev as a passion or as a profession, then this blog is for you. I would  like to share my experience with this black art.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12836797-111587858515383905?l=gamedev1001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/111587858515383905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12836797/posts/default/111587858515383905'/><link rel='alternate' type='text/html' href='http://gamedev1001.blogspot.com/2005/05/intro.html' title='Intro'/><author><name>Manoj M J</name><uri>http://www.blogger.com/profile/11456396241423163026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
