libQGLViewer enables you to quickly develop a small test program as well as a complete 3D application. It is versatile and is not designed for any specific application. It it also very convenient as a 3D/OpenGL pedagogical tool.
QGLViewer
class, which opens an OpenGL window with your
3D geometry inside, and lets you move the camera using the mouse. QGLViewer
actually
inherits from the Qt's QGLWidget
class (use Qt's assistant
to see its
documentation).
A very simple application will look like simpleViewer. In
your header file, you declare a new Viewer
class which publicly inherits from
QGLViewer
and you overload the draw()
method:
class Viewer : public QGLViewer { protected : virtual void draw(); };and here is the implementation:
#include "viewer.h" void Viewer::draw() { // Your OpenGL 3D code goes here. // It consists in geometry description using glBegin() ... glEnd() blocks. // Camera's GL_MODELVIEW and GL_PROJECTION matrices are handled by the QGLViewer. }All you need now is a
main
function, where you create a Viewer
instance. Most
main
function are identical: simply copy and paste from the simpleViewer example.
An other useful method that can be overloaded is init()
, which is called once before the first
display. This is where your OpenGL initialization code goes (camera placement, scene initialization,
display lists creation...).
Your viewer can also be embedded in a Qt interface, using other Qt widgets to create a complete
multi-platform application. Instead of deriving from QGLViewer
, you can also use the Qt
signal-slot mechanism and connect your drawing method to the signals emitted by an instance of
QGLViewer
. See the callback example for details.
draw()
function, you are implicitly located
at the origin of the so-called world coordinate system.
In libQGLViewer
, the
Camera
is an "object" located in this virtual world, that displays it and that can be
moved with the mouse. Press 'A' to draw the axis of this world coordinate system. This approach is
different (but much more intuitive) from the original camera-centered OpenGL coordinate system.
QGLViewer
has no knowledge of the 3D scene it displays. However, you need to provide
an estimation of your scene radius (expressed in OpenGL units) in order to optimally set the
near and far clipping planes of the camera and to be able to showEntireScene()
. This
is done using the setSceneRadius()
function (default value is 1.0).
You may also want to tune the scene center if your scene is not centered on the world coordinate origin (0,0,0).
Use code like this in yourinit()
function to define your scene dimensions:
setSceneRadius(100.0); // scene has a 100 OpenGL units radius setSceneCenter( Vec(400,0,0) ); // with a center shifted by 400 units along X direction camera()->showEntireScene();