Logo, introduction to thecodinguniverseFor whom is this website meant?

This website is meant for an intermediate Java developer interested in using the Lightweight Java Game Library to create video games with stunning graphics.


On this website there are free text tutorials on the basics of OpenGL and LWJGL. Additionally, there is information about a private tutoring programme for LWJGL and OpenGL. Lastly, there is a donate page and an about page.


What is OpenGL and what is LWJGL?

OpenGL by TheKhronosGroup is a widely used low-level API for rendering state-of-the-art 2D or 3D computer graphics. It exposes all the features of the latest graphics hardware. Click here for more information on OpenGL.

The LWJGL website describes LWJGL as the following:

The Lightweight Java Game Library (LWJGL) is a solution aimed directly at professional and amateur Java programmers alike to enable commercial quality games to be written in Java. LWJGL provides developers access to high performance crossplatform libraries such as OpenGL (Open Graphics Library), OpenCL (Open Computing Language) and OpenAL (Open Audio Library) allowing for state of the art 3D games and 3D sound.

114 thoughts on “Introduction

  1. レベッカミンコフ バッグ REBECCA MINKOFF HU15EFCX11 679 FASHION CLASSICS MINI CROSSBY BODY ショルダーバッグ ELECTRIC PINK/SILVER【new062レベッカミンコフ ショルダーバッグ/クラッチバッグ/ハンドバッグ REBECCAMINKOFF HS15EFCX02 975 メタリックグレー IRIDESCENT SHADOW MINI5ZIP 3WAYバッグ Rebecca Minkoff レディース 革:TREASURE LAND-トレジャーランド-

  2. Google

    It will also increase the ranking of your website on search engines and
    will drive more traffic to your website. This will allow you to answer only
    those calls that come in on your forwarded toll free number and route other calls
    to different locations. There are other ways to improve your ranking in Googlemaps, the purpose of this
    blog post is not to tell you EVERYTHING Frederick Web Promotions can do to improve your ranking, the purpose
    of this particular blog post is to:.

    Feel free to surf to my homepage; Google

  3. blender 3d designs

    re were brothers and among the earliest filmmakers in history.
    You see, it used to be that in order to learn character animation you’d practice on
    your own and teach yourself as much as you could.
    Mattes have been used since the beginning of filmmaking, a technique
    used in special effects, known as an in-camera effect since mattes were used while shooting.

  4. Theo

    As this appears to be like a question and answer site, ill post my question too. I worked through the Lighting Tutorial and found, that the intensity of the light decreases if the angle of the survace is very low, but for me it does not decrease in distance, which is quite unrealistic, beause 2meters near me its quite dark, but like 200m away a wall is totally bright, because I am directly facing it…. Is this normal and can it be fixed without adding much more complexity? (I think the same applies to the Shader-example and I cant try it with the shadow mapping because my gpu surprisingly does not support that. Anyway, thanks for you reply 😉

    1. Oskar Veerhoek Post author

      The angle of the surface should not matter when using diffuse light (the default light). The effect you are describing (light intensity decreases with distance) is called light attenuation and can be achieved using shaders or the fixed function methods.

  5. Dothran

    It looks it has been a long time ago that someone has posted a comment on the homepage of so I hope you will still be reading them.

    I’m watching all of your LWJGL tutorials right now, and I must say you are explaining everything very well, good work.

    But the question I actually wanted to ask you: “How did you learn this programming?”. There are a lot of general Java tutorials in books and on the internet. But where did you ever find tutorials about LWJGL (I’ve searched a lot and only found by your Youtube channel).

    Did you use books (which one) or internet (which website). I read you are Dutch in a comment somewhere… so if you learned on a school, which one?

    Thanks for the reply :)

    1. Dothran

      I want to correct myself, it wasn’t a long time ago that someone posted a comment. I just had to scroll down.

      Maybe a good idea to place the last posted comments on top, but it’s your website after all.



          Great web site you’ve got here.. It’s difficult to find excellent writing like yours nowadays.
          I truly appreciate individuals like you! Take care!!

          Also visit my site … adobe,,

        2. Lester

          Good way of describing, and nice post to obtain information concerning my presentation subject, which i am
          going to convey in institution of higher education.

          Also visit my homepage: how to kill bacteria in your mouth –

    2. Oskar Veerhoek Post author

      First off, thank you for the compliment.

      I never really found tutorials on LWJGL, only some general directions on the Wiki-page. However, I did find some useful tips on the JGO and LWJGL forums. With respect to OpenGL, I mostly learned that from books (OpenGL SuperBible, Beginning OpenGL Game Programming).

      It’s true that I’m partly Dutch and that I am in Dutch secondary education, but I did learn programming in school.

      1. Anonymous

        Thanks for the helpful reply. I’ve found the books, now I have something to read while going to school with the train. 😉

      2. Dothran

        Thanks for the helpful reply. I’ve found the books, now I have something to read while going to school with the train. 😉

  6. atique

    Hi Oskar, i am learning lwjgl…i am trying to understand the concept of racing game….while playing games i have noticed that the car stays in the same position(in the y axis), rather the background road seems to move backward….if i decrement or increment the road y coordinate and take it back it flickers….but how to do it really…should i take help from a game engine? But game engine codes are quite different from java or lwjgl. if i use game engine like jMonkeyengine or popular ones like unity 3d or udk, my effort to learn java or lwjgl comes to no use. what should i do? please reply at your earliest convinience.

  7. xPhonex

    hey nice tuts and nice website but could u help me on something?

    in minecraft2D i want to play it xD it look fun….back to my question i get a Caution in

    Error is here

    class Player {

    private float x, y; <——- RIGHT HERE the x, y says the value of player.x is not used same for y what should i do?
    sorry if i sound noobie or sounds weird but i do want to know xD

  8. Derpy Guy

    Hey Oskar. Your OBJLoader class is not flexible enough to load any obj model. It could not read the files i tried to throw at it. Anyways, great tutorials! 😀

      1. Derpy Guy

        The re-export resulted in this: “OBJ file contains line which cannot be parsed correctly: mtllib untitled.mtl.” After removing all “mtl” references i got an ArrayIndexOutOfBoundsException at -2. The same error occurred when using the the cube that appears at the startup of Blender. The functionality of the OBJLoader is not important to me because I’m going to be writing a different file reader for voxel sprites. 😀

        1. Derpy Guy

          Derp, I just found your loadTexturedModel() method, but that doesn’t explain the IndexOutOfBounds error.

  9. John

    Ignore the above: I just noticed 2 things..
    1)You provide 1 to 1 tutoring, and I am sending an email now!
    2)You use display lists for certain cases like static geometry.
    I hope that you”ll have enough time to tutor me over the year ahead :)

    1. Oskar Veerhoek Post author

      Next time I should watch for newer comments. I already replied to the your previous one.
      I replied to your email, thanks for your interest.
      Very good – that’s exactly what to use display lists for!

  10. John

    Oh, I just reliased that glBeginList is for display lists. I thought that VBO’s were the more modern way of doing this? Is this also a fallback option, and if so can I recommend a comment on the code again :)

  11. John

    *It would be useful to see this physically documented in the source if so

    … Perhaps with a simple comment before glBegin, just as a reminder?

  12. John

    About my praise, well compliments where compliments are due!

    I’ve had a look at the link and the code you’ve produced is very interesting. I’m assuming the video will come soon,a s your series is up to 34 :)

    I noticed the use of immediate mode (glBegin / glEnd) is this simply a fallback option as per your shader tutorial? It would be useful to see this physically documented in the source of so (but please correct me if this is an OpenGL 1 only technique).

    I’m also looking forward to hearing your explanations of glBeginList as I’ve not come across that command before.

    Moreover, the use of input stream, buffered image and decoder data structures looks set to make a very interesting view, when will the video drop?

    On the topic of byte buffers, I’ve heard that they also lend themselves to loading 3D models with optimal speed, particulary for mobile devices, as per NinevehGL ( Have you accomplished this yourself?

    PS If you prefer, I will email you in future :)

    1. Oskar Veerhoek Post author

      The use of glBegin and glEnd is not a fallback option. Note that you can freely use shaders in conjunction with any supported rendering mode: display lists, immediate mode, Vertex Arrays, and Vertex Buffer Objects.
      glBeginList is used for display lists, which were deprecated in version 3.0. As such, you usually only use display lists in version 1 and 2, whereas in version 3 and 4 you would use Vertex Buffer Objects (VBOs).
      I cover display lists in episode eighteen of the LWJGL Tutorials series:
      I expect the terrain video to be up before the next weekend.
      PS: Emails would probably be a bit easier to answer.

  13. John

    I’m 20 years older than you and would not call myself a beginner, but your video tutorials are the most useful and important OpenGL learning guides I’ve ever had the fortune of coming across.

    I also learnt something else: that in the future the projects you work on will undoubtedly be awe inspiring.

    I’d be really happy to see another tutorial on Octree’s / Voxels / infinite worlds if you get the time or motivation.

    Keep up the superb work Oskar, and I hope that you have a very happy New Year :)

  14. Jeroen

    You should make like a forum or something!
    I think you got alot of new lwjgl programmers together and you should use that to make an awesome forum!

    1. chris

      Yea that is a great idea. Would be interesting to see what ideas “programming genius’s” come up with 😛 It would also be better to store all the comments instead of all over the site but still…loving the website!
      Continue the great work.

  15. flashc0d3r

    I love your tutorials, they have helped me to learn some of the basics of java, as did Developing Games in Java by David Brackeen. I am using my java knowledge to develop a 3d fps in java called Ruins of Ryth (info availible here: Thank you for the tutorials and keep up the good work!

  16. Grog

    Sorry for spamming but in the future when Your site develop to a bigger one You should consider to use some sort of spamming filter for posting comments. SEO “masters” like defenceless sites. Once again congrats Mr. Genius :)

  17. Kyle Pomykala

    Dude I love your tutorials but in tutorial 19 you never explained how to set up TWL. I have been searching for about two hours now and I still cant figure out how to install it.

  18. Brois

    Ik vroeg me af of je misschien een tutorial kon doen over hoe je bijvoorbeeld “Tiled” kan gebruiken om een platformer te maken met de hulp van Slick. Bij de wiki van Slick staat dan wel een tutorial ik maar ik vind die erg onduidelijk.

  19. Bradley

    Hey, I like your videos. They’re really helpful. I’m to the lighting videos, and I still don’t think your teaching’s found a happy medium, but you’re getting close. I like the website so far. You need to get a favicon though. Keep up the good work!

  20. Jake Pelter

    I’m 14 as well but I’ve only recently taken an interest in programming. I’ve learnt the basics of Java and have briefly touched on C++.

    I’m wondering where you began learning programming. I’ve taken a a bit of a look at your videos and you seem like you really know your stuff.

    I have taken a look at some books but I’m not quite certain where to start.
    Thanks for your time.

    1. Oskar Veerhoek Post author

      I began computer programming by reading a beginner Java tutorial book published by Sun covering Java 6. I recommend you read ‘Effective Java’ by Joshua Bloch – it really gets into more subtle, yet unquestionably important, details of Java.

      1. Max

        For german people: I also programm in Java and I know a very good java book to learn: “Java ist auch eine Insel” von Galileo Press

      1. Bigdog

        Do’t you have birthday on 29 Feb ? :) When do you start to learn programming ? ….. Btw nice websites. Keep up doing your amazing tutorials.

        1. Oskar Veerhoek Post author

          Nope, my birthday isn’t February 29th. I started programming on and off three years ago. And thanks for the compliment.

      2. Tad

        Yeah, it is pretty cool. If you are using Java Web Start, there is also a fntouicn called jardiff that works with the download servlet that can just send only the changed classes to the client. I’m doing some research on this and will post if I make progress using it.

      3. George Raven

        Hi! I’m 14 too, and it’s nice to know that there aren’t comments saying that the website is rubbish just because it’s made by a teenager. I love your LWJGL stuff, I’ve been learning it.

        1. Oskar Veerhoek Post author

          Ah, I didn’t consider that. Thanks! Hey, you’re from Stackexchange, right? Welcome to thecodinguniverse! :-)


Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>