Is OpenGL for me?

Started by
12 comments, last by Xorcist 22 years, 8 months ago
I''ve never used OpenGL, but I''ve heard a lot of good things about it. My question is, should I learn it? What are the benefits of it over DirectX? Currently a lot of my programming is done in Delphi. Will that make a difference? Should I be using C to get the most out of OpenGL? My gaming interests are mainly in 2D, but even today many 2D games use a lot of 3D effects and enviroments to enhance their overall appearance. Any advice and or information would be greatly appreciated. P.S. What would be a good book to pick up for a OpenGL newbie like myself.
Advertisement
OpenGL''s main advantage over DirectX is its portability. It runs on just about any platform, whereas DirectX is exclusively a Windows grapihcs API.

OpenGL is much easier to learn than DirectX because OGL itself isn''t an object oriented API (though you can write your own wrapper for it).

I think you''ll like it a lot if you give it a try. A good book is the "OpenGL Superbible 2nd Ed."... plus the NeHe tutorials are really good too. Between those two you should be up and running in no time.
Two quick questions...

#1 Is it possible to create a totally 2D game using OpenGL? I've done some looking around but everything I come across seems to be 3D. I'm just worried everything is optimized for 3D and the 2D performance might be lacking. On that note, does OpenGL require 3D hardware or will any standard video card work?

#2 Does it work with "windowed" applications or will everything need to be fullscreen. I've done some fullscreen stuff before and I've found it much harder to debug, I like having the option to run a windowed mode if for nothing else than to debug.


P.S. I like the fact OpenGL is portable. It's one of the things I've been looking for. I am seriously considering moving away from Windows and over to Linux. Of course that transition will take time, but better prepared than not.

P.P.S. "OpenGL Superbible 2nd Ed." looks great, it should be just the reference I need. Does anyone know if the "Delphi Developer's Guide to OpenGL" is any good? The Amazon reviews were at best, mixed.


{Thanks again everyone.}

Edited by - Xorcist on July 17, 2001 3:00:35 AM
1- Yes you can. OpenGL is not for 3D only but is more used for that. You need OpenGL drivers to use OpenGL.

2- Both works.

If you want to support several platform, have a look @ upcoming OpenML (www.khronos.org using OpenGL) or SDL (libsdl.org).

I suggest you use C or C++ instead of Delphi since delphi is mmmhh.... windows only. (well Linux two now)
But it''s definately not crossplatform.

-* So many things to do, so little time to spend. *-
-* So many things to do, so little time to spend. *-
If you know enough about OpenGL, you can do whatever your mind allows you to do... Plain
and simple... It just takes some work to get to that level.

------------------------------
Trent (ShiningKnight)
E-mail me
OpenGL Game Programming Tutorials
Yes, OpenGL works in windowed mode. I remember that if you initialize it by hand, there''s only one flag that you need to set to either make it full screen or windowed. If you use GLUT, i''m not sure.
theres a lot of very good opengl sites for delphi out there a couple are
http://delphigl.cfxweb.net/
http://www.delphi3d.net/

http://members.xoom.com/myBollux
Syntax speaking, OGL is far simpler to set up.
As for features, I think DX has more features.
I slammed my head against DX for a while, and now am learning OGL. Much simpler.
I dont know how Delphi works, so I cant advise you on that.
However, C++ would probably the way to go.
I like the way C++ works...some people don''t...
I would personally learn OGL in C++, if I were you.
~V''lion


I came, I saw, I got programmers block.
~V''''lion
~V'lionBugle4d
GLUT will do any windowing for you. You can run fullscreen or in a window. If you are in a window, you can switch to fullscreen by calling glutFullscreen(); . GLUT will handle mouse input, keyboard input, or just about any other kind of input. It even has built-in support for spaceballs (little motion-capture type devices... like if you wanted to make a boxing game where you can actually throw punches in real life--as far as I can gather anyway). You can create multiple windows with a couple of lines of code. It will handle menus for you, and overlays, and all kinds of stuff.

Most importantly, it's EASY... it's a good way to learn OpenGL without having to deal with windows in the early stages. Here is a little GLUT "skeleton" prog that just draws a quad.

#include

void RenderScene( void );
void SetupRC( void );
void ChangeSize( GLsizei w, GLsizei h );
void DoKeyboard( unsigned char key_asc, int mX, int mY );
void SpecialKeys(int key, int x, int y);
void Timer(int value);

void main( void )
{
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutCreateWindow("My Open GL Program");
glutFullScreen();

//Callback functions
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
glutKeyboardFunc(DoKeyboard);
glutTimerFunc(100, Timer, 1);

SetupRC();
glutMainLoop();
}
//--------------------------------
void SetupRC( void )
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

//--------------------------------
void RenderScene( void )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0.0, 0.0, -100.0);
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0);
glVertex2f( -20.0, 1.0);
glVertex2f( -20.0, -1.0);
glVertex2f( -20.0+x, -1.0);
glVertex2f( -20.0+x, 1.0);

glutSwapBuffers();
}

//-------------------------------------------------------
// Called by GLUT library when the window has changed size
void ChangeSize(GLsizei w, GLsizei h)
{
// Prevent a divide by zero
if(h == 0) h = 1;
if(w == 0) w = 1;
// Set Viewport to window dimensions
glViewport(0, 0, w, h);
// Reset coordinate system
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if (w <= h)
{ h = h*(h/w); w = w;}
else
{ w = w*(w/h); h = h;}

GLfloat fAspect = (GLfloat)w/(GLfloat)h;
gluPerspective(70.0f, fAspect, 0.1, 500.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void Timer( int value )
{
glutPostRedisplay();
glutTimerFunc(100, Timer, 1);

}

void DoKeyboard( unsigned char key_asc, int mX, int mY )
{
glutPostRedisplay();
}

void SpecialKeys(int key, int x, int y)
{
// Refresh the Window
glutPostRedisplay();
}





Edited by - smitty1276 on July 22, 2001 1:07:34 AM

Edited by - smitty1276 on July 22, 2001 1:08:53 AM
OpenGL is probably the best 3D API you can find. I was able to write a small engine which loads and renders a Milkshape3D model in just under 1000 lines of code.

This topic is closed to new replies.

Advertisement