John Stone

John Stone is a seasoned software developer with an extensive computer science education and entrepreneurial background and brings a wealth of practical real-world experience working with graphical visualization and virtual reality (VR). As a former technical director of research for a VR laboratory at the University of Texas at Austin, he spent years honing his craft developing VR-based data acquisition systems in OpenGL for scientific experiments and projects.


Blog  •  May 18, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Assimp
Hello and welcome back.   This is the follow-on to our original article by Eric Stone,  "Qt and OpenGL: Loading a 3D Model with Open Asset Import Library (ASSIMP)." Last time we covered how to use ASSIMP to load a model into our data structures such that is was ready for rendering with OpenGL.  This time, we’re going to cover how to write a program to actually render these models. We’re obviously going to Qt as our platform layer (it’s in this blog’s title) but we’re going to choose QOpenGLWindow from among all the various ways you can integrate OpenGL with Qt....
Blog  •  April 14, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Qt, 3D rendering
Welcome back! Last time we talked about texturing, lighting and geometry in regards to porting fixed function OpenGL to Modern OpenGL and while it covered the basic features in OpenGL programs, it left out a lot of advanced techniques that your fixed-function code may have used.  In this article I’m going to talk about one of those advanced features, render-to-texture. Render-to-Texture Render to texture is used in a variety of graphical techniques including shadow mapping, multi-pass rendering and other advanced visual effects.  It involves taking the...
Blog  •  March 14, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Qt, 3D, 3D rendering
The code referenced in this blog is available here. Texturing Texture setup in modern OpenGL is nearly equivalent to what you are used to in the fixed-function API.  You still have to enable your texture units, create and configure your texture objects (including mipmap chains), upload texture data to them, bind them to a texture target and configure texture coordinates on your vertices as attribute data. However, glTexEnv, glTexGen and the texture matrix stack have been removed. glTexEnv must be replaced by code in the fragment shader.  Recall that a fragment...
Blog  •  February 29, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Qt, 3D, 3D rendering
The code referenced in this blog is available here. In our last blog, we re-implemented the famous OpenGL triangle in world space and compared and contrasted the fixed-function GLUT program with an equivalent Modern OpenGL program.  We covered how to use Qt's math functions to replace the matrix mode that was removed from Fixed-Function OpenGL and replaced with code you write in your vertex shader.   We talked about the Model, View, Projection idioms and how you can use uniforms to pass these variables (and others) to your shaders programs between draw...
Blog  •  February 18, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Qt, 3D, 3D rendering
The code referenced in this blog is available here. This is the second of a four part blog series, in which we compare and contrast Fixed-Function OpenGL with Modern OpenGL and introduce you to the issues involved in porting your code to Modern OpenGL. Last time we covered the necessary steps you need to create the famous OpenGL triangle with the modern API.  We've introduced shaders and described their inputs and outputs along with various Qt convenience objects that make working with the new modern API easier.   In Part 2, we move from clip...
Blog  •  February 9, 2016  •  By John Stone  •  OpenGL  •  OpenGL, Qt, 3D, 3D rendering
The code referenced in this blog is available here. In this first of a four part blog series, we outline differences between Fixed-Function OpenGL with Modern OpenGL and show effective solutions for common issues encountered when porting your code to Modern OpenGL. I was once faced with the task of “modernizing” a large fixed-function rendering engine.  At the time, I was very well versed in the fixed-function programming model but only had vague knowledge of the “new” shader-based OpenGL.  With the release of OpenGL 3.3, all of the fixed-function...