Sign in to follow this  
flodywan

OpenGL How did you learn OpenGL?

Recommended Posts

Hi! I'm wondering how different people learned OpenGL. Did you read through the red book, watch tutorials, learn from another book? I'm currently reading through the red book and I'm trying to find which way would be the most helpful.

Share this post


Link to post
Share on other sites
Moving to the OpenGL forum.

I learned it by skimming the red book and referring to the blue book as needed. I'd previously learned about the fundamentals of the graphics pipeline by reading other, API-agnostic, textbooks.

Share this post


Link to post
Share on other sites
I went about it the other way (i.e. ass-backwards), by learning basic OpenGL programming from NeHe and other sample code/tutorials, before reading up on the theory, and eventually taking a graphics course in university.

I wouldn't recommend learning this way, but it has worked out all right in the long run.

Share this post


Link to post
Share on other sites
I actually bought a copy of the GameDev book. Dunno if it's the best way, but it was a hell of a lot better than reading the NeHe trash. It'd be pretty out of date relative to the current OpenGL API, now.

Share this post


Link to post
Share on other sites
I also went with the book Promit said. It was a very good base for my opengl knowledge. I really should get one of the updated editions as mine is one of the first ones and doesn't mention shaders or anything of that sort.

Share this post


Link to post
Share on other sites
I learnt the basics of OpenGL for a university assignment. Necessity was a great motivator. I used NeHe, random webs, gamedev, and plenty of trial and error. Trying to solve problems in OpenGL worked best for me, as oppose to reading a book. So I'd start with how do I draw a line? Okay I will go figure that out then just build up from their.

Oh and Glut, yes its old, but it was just so quick and easy for learning.

Share this post


Link to post
Share on other sites
NeHe, 2000-5000 demo-tutorial sources, 5k articles, skimming through many online books. Thus, all the fixed-func stuff is a mush in my head :D. SM3.0 and 4.x let me skip all the fluff and shade however I want.
But had already worked commercially on software rasterization of 3D. So, programmable shading is in my veins - and there the extension-specs are the best resources, together with actually coding, testing and benching ideas; all else is more of a case-point or a tiny guideline imho.

Share this post


Link to post
Share on other sites
College OpenGL class, the red book and the OpenGL SuperBible. I have to say I am extremely fond of the OpenGL SuperBible fourth edition, although I originally learned off of the second edition.

Share this post


Link to post
Share on other sites
videotutorialsrock.com was my starting point. I was introduced to the theory behind graphics in university but I jumped ahead and started working through this website. It's very clear and the guy is well spoken so it's easy to follow and understand. By the end you will have made a nice 3D pong type game.

This website uses GLUT however so if your used to the Win32 format this may be a little daunting.

Share this post


Link to post
Share on other sites
In order:
Python: reverse engineering, playing around
PyGame: reverse engineering, playing around
PyOpenGL: reverse engineering, a boatload of playing around
I actually recommend this way. It's taken me about 5 years, but learning through experience is the best way.

Share this post


Link to post
Share on other sites
Quote:
Original post by ajm113
I learned from Marek-knows.com's video tutorials in the Game Engine series. I think all of he's tutorials are pretty good! :)


A vague guess, but maybe because you are Marek? (if that's wrong, please accept my apologies, but I remember him from highly advocating his costly stuff)

Share this post


Link to post
Share on other sites
I learned it 10 years ago from a French website:
http://rvirtual.free.fr/programmation/OpenGl/Index.htm

(I'm surprised it's still up!)

If you can understand French well, this website is 10x better explained than nehe in my opinion. Nehe throw a lot of explanations on things you don't really need to know when you are just starting. I knew nothing advance about graphics, and I knew almost nothing about C++ itself. This website was my starting point :)

Share this post


Link to post
Share on other sites
I learned from the GDNet book as well (first edition), but I recommend the Redbook as a much more comprehensive book, it won't teach you to write games, but it will give you a much better understanding of the OpenGL state machine.

Share this post


Link to post
Share on other sites
Quote:
Original post by Geometrian
In order:
Python: reverse engineering, playing around
PyGame: reverse engineering, playing around
PyOpenGL: reverse engineering, a boatload of playing around
I actually recommend this way. It's taken me about 5 years, but learning through experience is the best way.


It's great to learn through experience, but you should also make sure to read books, blogs, etc... from others so you can learn some of the best practices. Only learning from your own code can lead you to find solutions to problems that would often be unfamiliar to others, making your code hard to understand, and potentially error prone in edge cases.

Just a word of caution on your statement about always learning via reverse engineering and playing around. It can be great, as long as it's properly balanced.

Share this post


Link to post
Share on other sites
Quote:
Original post by Rydinare
engineering and playing around. It can be great, as long as it's properly balanced.


I agree with this and the reason I like to play with code first and then go back and read is because you are more familiar with what is being said. I find trying to read about something completely new harder to digest. With a little playing around with code examples and then attempting to write something going back to a tutorial can be a great way to learn.

Share this post


Link to post
Share on other sites
From what I remember, I used the Red and Blue book, read threads on OpenGl.org, the GL specification, and the extensions specs. Coupled with quite a few articles and tutorials on the net, and of course spending a lot of time experimenting with code. Writing a software renderer based on the GL specification was a good way to learn and understand the pipeline better. I don't really remember reading anything from Nehe, although it was a popular source at the time...

Share this post


Link to post
Share on other sites
Quote:
Original post by phresnel
Quote:
Original post by ajm113
I learned from Marek-knows.com's video tutorials in the Game Engine series. I think all of he's tutorials are pretty good! :)


A vague guess, but maybe because you are Marek? (if that's wrong, please accept my apologies, but I remember him from highly advocating his costly stuff)


Hahaha, no. I'm a fan of he's website and I wrote a few articles in the forums on there, I learned a lot from his tutorials so there is like a 20% time I will ever go on a forum and ask for help now aha days.

Share this post


Link to post
Share on other sites
I knew much about C, so NeHe's tutorials didn't confuse me so much as they were obsolete; his reliance on GLaux leaves a lot to be desired. But, after I got some basics on my own, I began to read the Red Book, a year of trial and error, and eventually I ended up here. My own software renderer is underway, building from what I learned.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Forum Statistics

    • Total Topics
      627765
    • Total Posts
      2978983
  • Similar Content

    • By DelicateTreeFrog
      Hello! As an exercise for delving into modern OpenGL, I'm creating a simple .obj renderer. I want to support things like varying degrees of specularity, geometry opacity, things like that, on a per-material basis. Different materials can also have different textures. Basic .obj necessities. I've done this in old school OpenGL, but modern OpenGL has its own thing going on, and I'd like to conform as closely to the standards as possible so as to keep the program running correctly, and I'm hoping to avoid picking up bad habits this early on.
      Reading around on the OpenGL Wiki, one tip in particular really stands out to me on this page:
      For something like a renderer for .obj files, this sort of thing seems almost ideal, but according to the wiki, it's a bad idea. Interesting to note!
      So, here's what the plan is so far as far as loading goes:
      Set up a type for materials so that materials can be created and destroyed. They will contain things like diffuse color, diffuse texture, geometry opacity, and so on, for each material in the .mtl file. Since .obj files are conveniently split up by material, I can load different groups of vertices/normals/UVs and triangles into different blocks of data for different models. When it comes to the rendering, I get a bit lost. I can either:
      Between drawing triangle groups, call glUseProgram to use a different shader for that particular geometry (so a unique shader just for the material that is shared by this triangle group). or
      Between drawing triangle groups, call glUniform a few times to adjust different parameters within the "master shader", such as specularity, diffuse color, and geometry opacity. In both cases, I still have to call glBindTexture between drawing triangle groups in order to bind the diffuse texture used by the material, so there doesn't seem to be a way around having the CPU do *something* during the rendering process instead of letting the GPU do everything all at once.
      The second option here seems less cluttered, however. There are less shaders to keep up with while one "master shader" handles it all. I don't have to duplicate any code or compile multiple shaders. Arguably, I could always have the shader program for each material be embedded in the material itself, and be auto-generated upon loading the material from the .mtl file. But this still leads to constantly calling glUseProgram, much more than is probably necessary in order to properly render the .obj. There seem to be a number of differing opinions on if it's okay to use hundreds of shaders or if it's best to just use tens of shaders.
      So, ultimately, what is the "right" way to do this? Does using a "master shader" (or a few variants of one) bog down the system compared to using hundreds of shader programs each dedicated to their own corresponding materials? Keeping in mind that the "master shaders" would have to track these additional uniforms and potentially have numerous branches of ifs, it may be possible that the ifs will lead to additional and unnecessary processing. But would that more expensive than constantly calling glUseProgram to switch shaders, or storing the shaders to begin with?
      With all these angles to consider, it's difficult to come to a conclusion. Both possible methods work, and both seem rather convenient for their own reasons, but which is the most performant? Please help this beginner/dummy understand. Thank you!
    • By JJCDeveloper
      I want to make professional java 3d game with server program and database,packet handling for multiplayer and client-server communicating,maps rendering,models,and stuffs Which aspect of java can I learn and where can I learn java Lwjgl OpenGL rendering Like minecraft and world of tanks
    • By AyeRonTarpas
      A friend of mine and I are making a 2D game engine as a learning experience and to hopefully build upon the experience in the long run.

      -What I'm using:
          C++;. Since im learning this language while in college and its one of the popular language to make games with why not.     Visual Studios; Im using a windows so yea.     SDL or GLFW; was thinking about SDL since i do some research on it where it is catching my interest but i hear SDL is a huge package compared to GLFW, so i may do GLFW to start with as learning since i may get overwhelmed with SDL.  
      -Questions
      Knowing what we want in the engine what should our main focus be in terms of learning. File managements, with headers, functions ect. How can i properly manage files with out confusing myself and my friend when sharing code. Alternative to Visual studios: My friend has a mac and cant properly use Vis studios, is there another alternative to it?  
    • By ferreiradaselva
      Both functions are available since 3.0, and I'm currently using `glMapBuffer()`, which works fine.
      But, I was wondering if anyone has experienced advantage in using `glMapBufferRange()`, which allows to specify the range of the mapped buffer. Could this be only a safety measure or does it improve performance?
      Note: I'm not asking about glBufferSubData()/glBufferData. Those two are irrelevant in this case.
    • By xhcao
      Before using void glBindImageTexture(    GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), does need to make sure that texture is completeness. 
  • Popular Now