Current OpenGL

Started by
8 comments, last by V-man 15 years, 4 months ago
Hi everyone, i'm a little bit confused at the moment as i've just started to get into OpenGL again after a while and things seemed to have changed. I had started going through the NeHe tutorials until I saw a forum post on here about their approach being "ancient" and "deprecated" so I did a little bit of research and found that there seems to have been a shift away from glBegin/glEnd to the use of vertex buffers and shaders. So i'm wondering if there are any good resources for learning this new approach out there at the moment. What books are recommended now? Seeing as the red book I guess has been somewhat made obsolete. Also are there any good tutorial sites for starting off? I thought this might need to go in the "beginners" section but seeing as people who know more about OpenGL specifically will visit this section I thought i'd give it a go here. Thanks in advance.
Advertisement
The NeHe lessons are in the process of beeing updated to use more up-to-date approaches. While only the very basic ones are done, they should still be of some use since they deal with vertex buffers:

http://nehe.gamedev.net/wiki/NewLessons.ashx

For shaders (GLSL), I highly recommend Lighthouse3d:

http://www.lighthouse3d.com/opengl/
Cheers, i've been wading through GLSL tutorial and information for a few hours now and feeling a little bogged down. I'm confused as to what are current functions which are considered to be "best". For example the difference between "VBO" and "vertex arrays". The new NeHe tutorial use simple vertex arrays but according to another website "oZone3D.Net" you can get huge performance boosts through the use of VBO's.
Read the OpenGL Specifications. Section 2.9 explains the difference between vertex data arrays and buffer objects:
Quote:The vertex data arrays described in section 2.8 are stored in client memory. It is sometimes desirable to store frequently used client data, such as vertex array and pixel data, in high-performance server memory. GL buffer objects provide a mechanism that clients can use to allocate, initialize, and render from such memory.


Thus, VBOs are faster specially for static objects.

ps. The specification also includes a list of deprecated features.
Quote:Original post by havok4567
The new NeHe tutorial use simple vertex arrays but according to another website "oZone3D.Net" you can get huge performance boosts through the use of VBO's.


Oh, sorry, I thought VOBs were demonstrated too in the new NeHe lessons.

Typically, vertex arrays in one form or another is used in combination with VBOs. In fact, the only difference from using just vertex arrays and vertex arrays + VBOs is simply that instead of sending the geometry to the GPU you tell the GPU where in memory it allready is (inside the vbo). Like a display list, a VBO simply moves the data to the video RAM.

Using vertex arrays over imidiate mode (glBegin()/glEnd()) is *a lot* faster. Adding VBO's speeds things up even further (in my own engine, using VBOs speeds things up by 300%+ when using VBOs + vertex arrays, as opposed to just using vertex arrays).

It's relatively straight-forward to implement VBOs, even more so if you're allready using vertex arrays. Detailed explainations can be found here:
http://www.songho.ca/opengl/gl_vbo.html
http://www.opengl.org/wiki/index.php/VBO

Awesome, thanks guys, the songho link is really useful. So I think i've caught up somewhat in terms of what i *need* to learn. Just need to start implementing this stuff.

Any chance someone has some really basic code kicking around for drawing some simple shape with a simple shader? I'm going to start trying to implement this myself now.
Because all the things for using VBO, shaders and so on are ARB extensions, I would recommend you use something like GLee or GLEW if you haven't already so you have all of the extensions included in your project, it can become messy otherwise.

Like someone said earlier for getting going with GLSL lighthouse 3d is about the best there aren't first tutorials are great to see what it takes to compile a shader and link the program.

As for VBO tutorials I found A LOT of the ones you find of google are just confusing I think the one on ozone3d is pretty good though. if you have done any direct3d its very similar to how you do vertex buffers in that.

for what you need to learn it depends what you want to do, if you want to use VBO just work on that and forget about shaders for now, just draw an object first in fixed function then you can think about adding shaders when the VBO is working. Don't work on both of them at once if you are new to it because then you have 2 new things which could potentially cause problems.


I'd recommend that you start off with vertex arrays + shaders, and move on to using VBO's afterwards. It's easier to get one thing working at a time. ;)

Also keep in mind what BlackSeeds said about Glee/glew, it makes your life a whole lot easier since you dont have to deal with setting up opengl extensions yourself (vanilla opengl headers are OpenGL 1.1, so newer features such as VBOs and shaders aren't in there).

You can find glee here:
http://elf-stone.com/glee.php
Latest version also supports OpenGL 3.0.

As for shaders, the first lighthouse tutorial is indeed a good starting point. You can find it here:
http://www.lighthouse3d.com/opengl/glsl/index.php?ogloverview

Thanks again, this has been really helpful. Okay I think i'll start on just getting one thing done at a time otherwise i'm just gonna hit a brick wall.

Extensions are kind of new to me but i'm slowly kind of figuring out how they work so i'll check GLEE out. So are there no official releases of the OpenGL header and library files up to version 2.1 or 3.0? Are these extensions necessary to get these recent features?
It's important to know what is an extension and what isn't first

http://www.opengl.org/wiki/index.php/Common_Mistakes#Extensions_and_OpenGL_Versions
Sig: http://glhlib.sourceforge.net
an open source GLU replacement library. Much more modern than GLU.
float matrix[16], inverse_matrix[16];
glhLoadIdentityf2(matrix);
glhTranslatef2(matrix, 0.0, 0.0, 5.0);
glhRotateAboutXf2(matrix, angleInRadians);
glhScalef2(matrix, 1.0, 1.0, -1.0);
glhQuickInvertMatrixf2(matrix, inverse_matrix);
glUniformMatrix4fv(uniformLocation1, 1, FALSE, matrix);
glUniformMatrix4fv(uniformLocation2, 1, FALSE, inverse_matrix);

This topic is closed to new replies.

Advertisement