# C/C++ Graphics Programming



## java_king (Nov 11, 2008)

Now, Graphics.h header is not available any more. What is the replacement of this header file


----------



## azaad_shri75 (Nov 18, 2009)

is the site working


----------



## khattam_ (Dec 31, 2009)

One replacement is Allegro Gaming Library. It is a very easy to use library. It is cross platform and runs on Win, Lin and Mac. It comes with a handy manual too. And it is very easy to integrate (in linux, all you need to do is install the allegro development package.. in Ubuntu, sudo apt-get install liballegroX.Y-dev, where X.Y is current version of allegro GL.. at this time, it is 4.2...)


----------



## chirag_marwaha (Jan 9, 2010)

SDL Library is also worth, is easy to program with, cross platform & is constantly upgraded. It is compatible with the latest Windows 7 too. Also there are large number of tutorials(links on the site & books too):
*www.libsdl.org

The site says:


> Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of "Civilization: Call To Power."
> SDL supports Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and OS/2, but these are not officially supported.
> SDL is written in C, but works with C++ natively, and has bindings to several other languages, including Ada, C#, D, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, Smalltalk, and Tcl.
> SDL is distributed under GNU LGPL version 2. This license allows you to use SDL freely in commercial programs as long as you link with the dynamic library.


Check it out!!!


----------



## prasath_digit (Jan 16, 2010)

*For Basic Graphics programming on windows there are three options:-*

*1. *Use Dev-C++ it comes with the OpenGL libraries it has a neat OpenGL sample with it using win32 api this is one of the most simple and elegant way for starting out with graphics programming on windows.

*2. *SDL is also good use it with Visual Studio or Visual C++ Express editions.

*[ OR ]*

*3.* Use the GLUT library ( OpenGL Utility Toolkit ). ( Highly Recommended )

A GLUT Sample:- ( In Visual Studio 2008 )


```
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

#include <stdlib.h>
#include <GL/glut.h>

static GLfloat spin = 0.0;

void init( void )
{
   glClearColor ( 0.0, 0.0, 0.0, 0.0 );
   glShadeModel ( GL_FLAT );
}

void display( void )
{
   glClear ( GL_COLOR_BUFFER_BIT );
   glPushMatrix ( );
   glRotatef ( spin, 0.0, 0.0, 1.0 );
   glColor3f ( 0.0, 1.0, 0.0 );

   glRectf ( -25.0, -25.0, 25.0, 25.0 );

   glPopMatrix ( );
   glutSwapBuffers ( );		// Swap Buffers
}

void spinDisplay( void )
{
   spin += 2.0;
   if ( spin == 360.0 )
      spin = 0.0;
   glutPostRedisplay ( );
}

void reshape( int w, int h )
{
   glViewport ( 0, 0, (GLsizei) w, (GLsizei) h );
   glMatrixMode ( GL_PROJECTION );
   glLoadIdentity ( );
   gluOrtho2D ( -50.0, 50.0, -50.0, 50.0 );
   glMatrixMode ( GL_MODELVIEW );
   glLoadIdentity ( );
}

void mouse( int button, int state, int x, int y ) 
{
   switch ( button )
   {
      case GLUT_LEFT_BUTTON:
         if ( state == GLUT_DOWN )
            glutIdleFunc ( spinDisplay );
		 break;

      case GLUT_RIGHT_BUTTON:
         if ( state == GLUT_DOWN )
            glutIdleFunc ( NULL );
		 break;

      default:
		 break;
   }
}

void keyhandle( int key, int x, int y )
{
	int m = glutGetModifiers( );
	if ( key == 4 && m == 4 )
		exit ( 0 );
}

int main( int argc, char** argv )
{
   glutInit( &argc, argv );
   glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
   glutInitWindowSize( 250, 250 );
   glutInitWindowPosition( 250, 200 );
   glutCreateWindow( "Rotating Cube" );
   init( );
   glutDisplayFunc( display ); 
   glutReshapeFunc( reshape ); 
   glutMouseFunc( mouse );
   glutSpecialFunc( keyhandle );
   glutMainLoop( );
   return 0;
}
```

Output:-

*mail.google.com/mail/?ui=2&ik=9d480031da&view=att&th=126377902114dcda&attid=0.1&disp=attd

Hope this helps a bit


----------



## jithin.rao (Jan 17, 2010)

Nice start of a thread, but why did you miss DirectX SDK for Windows Platforms with IDEs like Code Blocks, Visual Studio, DevC++, etc.


----------



## prasath_digit (Jan 17, 2010)

jithin.rao said:


> Nice start of a thread, but why did you miss DirectX SDK for Windows Platforms with IDEs like Code Blocks, Visual Studio, DevC++, etc.



The Direct3D component of DirectX is a bit of overkill for beginning with graphics programming. When u r starting out with graphics, theory & maths are more important than the API

*Direct3D is :-*

   * Specifically developed for professional video game programming.
   * Has a very steep learning curve
   * It requires you to be comfortable with VC++,COM etc. 
   * Its a hardware-oriented API, not good for a beginner.

*OpenGL is :- *

   * A very general-purpose API
   * Very easy to learn 
   * The standard API of choice on all computer graphics books
   * Can do everything DirectX can do. 

( All Non-Microsoft platforms use OpenGL as their graphics API of choice  )

Both can be very easily configured with Visual C++ Express or Visual Studio to begin with graphics programming using either C or C++ on windows.


----------



## jithin.rao (Jan 18, 2010)

mm... well I did start with DirectX, may be because I like the COM methodologies, but its preferable for graphics programmers to be flexible with SDL, DirectX and OpenGL. Well, comes to a choice to choose from. Easy and Flexibility to learn is something that a user can only determine on, OpenGL is easier because it uses the old C methodology, Structured programming, but DirectX is of the OOPS type. I have programmed with both, for me both are the same, so here are the choices to choose from.


----------



## prasath_digit (Jan 18, 2010)

jithin.rao said:


> mm... well I did start with DirectX, may be because I like the COM methodologies, but its preferable for graphics programmers to be flexible with SDL, DirectX and OpenGL. Well, comes to a choice to choose from. Easy and Flexibility to learn is something that a user can only determine on, OpenGL is easier because it uses the old C methodology, Structured programming, but DirectX is of the OOPS type. I have programmed with both, for me both are the same, so here are the choices to choose from.



I see, I have never programmed using Direct3D I have only looked at some sample Direct3D code.

For things taught in graphics courses in most Colleges, OpenGL would be appropriate for doing some demos quickly and easily. I agree that easy and flexibility to learn depends on the programmer's preference. Anyway I prefer OpenGL and recommend it to any beginning programmer getting used to do graphics on Turbo C++ IDE using the graphics.h header functions.


----------



## himanshu_game (Jan 21, 2010)

i m learning DirectX and all the math with it.
yeah the learning curve is steep and takes some time..
but at the EnD its WOrth it if ur programming game for Windows.


----------



## prasath_digit (Jan 22, 2010)

himanshu_game said:


> i m learning DirectX and all the math with it.
> yeah the learning curve is steep and takes some time..
> but at the EnD its WOrth it if ur programming game for Windows.



Sure, DirectX graphics is the standard tool on windows and most game companies prefer/use DirectX for game development on windows.


----------



## anuvrat_parashar (Jan 23, 2010)

I successfully installed SDL + OpenGL on openSUSE but am not able to run opengl programs (basically the ones that I got from online tutorials). so please help me.


----------

