snapshotFilename renamed snapshotFileName (uppercased 'N').snapshotCounter is not appended to snapshotFileName in automatic mode.saveSnapshot(fileName) no longer opens a file dialog (bug finder Jürgen).The library now compiles with Qt version 2, 3 and 4. When enum or function names have been changed in Qt4, the QGLViewer documentation uses their Qt 4 version and gives Qt 2 & 3 translations.
New featuresQGLViewer::drawArrow() method from two points (thanks Sylvain).
Qt::ButtonState (Qt versions 2 & 3) has been split into
Qt::KeyboardModifiers and Qt::MouseButtons in Qt4. Since these are just
enums, previous code will still work.
playPathStateKey() and addKeyFrameStateKey() were renamed
playPathKeyboardModifiers() and addKeyFrameKeyboardModifiers().int parameter has been replaced by a type-safe Qt::KeyboardModifiers.setHandlerStateKey renamed setHandlerKeyboardModifiers.Camera copy constructor fixed (bug finder Xavier).QGLViewer::copyBufferToTexture() to copy the frame buffer in a texture.Camera::drawCamera() and draw() methods.QGLViewer::drawArrow() static method.QGLViewer::mouseGrabberIsEnabled() method.= operator implemented for Camera and
KeyFrameInterpolator classes.address() deprecated, use operator const float* instead.sqNorm() renamed Vec::squaredNorm().randomOrientation renamed randomQuaternion.operator* now returns a non-const Quaternion.referenceFrame() is no longer const.setOrientationAxisAngle() and Frame::setRotationAxisAngle() removed.translate(float t[3]) and Frame::rotate(float q[4]) removed: use Vec and Quaternion equivalents instead.invert() and Frame::worldInvert() removed: use inverse() instead.inverseMatrix() and worldInverseMatrix() removed: use inverse().matrix() instead.setReferenceFrame() emits the modified() signal as expected.SpinningFrame class has been removed. Spinning was integrated in ManipulatedFrame.spinned signal renamed spun.Camera parameter.float methods removed: use Vec equivalents instead.*Dir() methods renamed *Direction().keyFramePosition() and keyFrameOrientation() removed: use KeyFrame().position() and KeyFrame().orientation() instead.finished() renamed endReached().float parameter removed. Use their Vec(x,y,z) and Quaternion(q0,q1,q2,q3) equivalents instead.editCameraPath() and cameraPathIsEdited() removed.float versions of getModelViewMatrix and
getProjectionMatrix removed. Use double equivalents instead.pointUnderPixel()...) take QPoint parameter instead of x and y. Use QPoint(x,y) constructor if needed.nbPaths() removed. Camera now contains an arbitrary number of paths.fitScreenRegion now takes a QRect parameter.getOrthoWidthHeight made virtual.ORTHO type renamed ORTHOGRAPHIC.zNearCoef and zClippingCoef renamed zNearCoefficient and zClippingCoefficient.setWindowWidthAndHeight renamed setScreenWidthAndHeight.playKeyFramePath, deleteKeyFramePath and resetKeyFramePath renamed playPath, deletePath and resetPath.addKeyFrame renamed addKeyFrameToPath.distanceToScreen() renamed physicalDistanceToScreen().distanceToZeroParallaxPlane() renamed focusDistance().IODist renamed IODistance.setCameraFromProjectionMatrix() renamed setFromProjectionMatrix().cameraPathIsEdited and editCameraPath renamed cameraIsEdited and setCameraIsEdited.EDIT_CAMERA_PATHS renamed EDIT_CAMERA in prevision of a future camera edition.setDrawAxis, setDrawGrid, setDisplayFPS, setDisplayText renamed
setAxisIsDrawn, setGridIsDrawn, setFPSIsDisplayed, setTextIsEnabled.float methods removed. Use Vec and Quaternion equivalents instead.drawAxis made static.setMouseStateKey renamed setHandlerStateKey.keyFrameKey renamed pathKey, with swapped parameters.playKeyFramePathStateKey renamed playPathStateKey.keyboardAccelerator (resp. setKeyboardAccelerator) renamed
shortcut (resp. setShortcut).select, beginSelection, endSelection and postSelection use
QPoint instead of x and y.toggleAnimationMode renamed toggleAnimation.version syntax in state file changed and is now compared with current version on restoration.camera().connectSignalToAllViewers, disconnectSignalToAllViewers and updateGLForAllViewers removed. Use QGLViewerPool insead.zip and tar files names include release number.rpm now includes a static version of the library.QGLViewer::stateFileName no longer skips the directory prefix.QGLViewer::drawLight nicer and fixed.fastDraw(). A final draw() is now triggered at a short delay after the last wheel event.Camera::zClippingCoef() method to define z clipping planes positions.mouseGrabberChanged signal.Camera::pixelGLRatio() made constQGLViewer::drawGrid and drawAxis() made virtual.setStateFileName method (default stateFileName is .qglviewer.xml, as before).helpWidget method.saveToFile and restoreFromFile were renamed
saveStateToFile and restoreStateFromFile.stateFileName instead.restoreFromFile() now returns a bool that indicates restoration success..qglviewer.xml file.restoreFromFile() with several viewers finally removed (bug finder Xavier).QGLViewer/ prefix) in classes' documentation.setMouseBindingDescription parameters reordered.startScreenCoordinatesSystem z mapping now ranges in [0.0, 1.0[ (was [1.0, -1.0]).Vec::projectOnAxis() no longer requires a normalized axis.Vec values stored in a union to ensure proper memory allocation (bug finder Olivier).displayMessage() that regularly called updateGL fixed (bug finder Stéphane)..qglviewer.xml file is found in multi-viewer configuration.ManipulatedFrame when used as MouseGrabber.Frame::setFromMatrix() now expects an OpenGL format matrix.QGLViewer::sizeHint() method returns prefered viewer size (600x400).displayMessage() is called in draw() fixed.EPSInterface.ui version downgraded to 3.0.Quaternion(from, to) method fixed.setSnapshotQuality() method to tune snapshots' quality (and hence size).displayMessage() method, useful to give feedback to the user.QGLViewer constructor, that enables Open GL context sharing between several viewers (requires Qt > 3.2).saveSnapshot() method, with a filename as parameter.openSnapshotFormatDialog() method to select snapshot format using a popup dialog.drawFinished signal, that can be connected to saveSnapshot() to create movies.firstTime(), lastTime() and duration() method in KeyFrameInterpolator.aboutQGLViewer() method displays libQGLViewer version and info.Camera::setViewDirection() method.SpinningFrame, ManipulatedFrame and ManipulatedCameraFrame have copy constructors and = operators.Vec and Quaternion classes have a convenient explicit constructor from a QDomElement.initFromDOMElement() functions.domElement() XML syntax. Incompatibilities will result in warnings at first start (or delete your old .qglviewer.xml).foregroundColor() and backgroundColor() use QColor instead of Vec. Attention, range is 0-255 instead of 0.0-1.0setSelectRegionSize() replaced by setSelectRegionWidth() and setSelectRegionHeight().foregroundColor() and backgroundColor() methods removed.EXIT KeyboardAction was renamed EXIT_VIEWER because of potential name conflict.Vec::unit() made const.setSnapshotQuality()).projectedCoordinatesOf() faster and more versatile.KeyFrameInterpolator documentation mostly rewritten.cwFiles custom widget directory removed and replaced by a qglviewer.cw file.snapshotFormat() set to the first one available (instead of JPEG).mouseTracking state no longer saved in (nor restored from) .qglviewer.xml file.QAccel abandonned : user defined key bindings are prioritary.setKeyboardAccelerator() and setKeyDescription() take an int as parameter instead of a QKeySequence.keyboardAccelerator() logically returns an int accordingly.Frame::referenceFrame() (and related methods) are now const.setKeyDescription() method to customize the help dialog.setMouseBindingDescription() method to customize the help dialog.Camera::projectedCoordinatesOf() and similar methods have an additional optional Frame parameter.ShortcutAction enum renamed KeyboardAction.MOVE_CAMERA and FLYSPEED values added to the KeyboardAction enum, see keyboard page.setShortcutKey() and setShortcutStateKey() replaced by setKeyboardAccelerator().QGLViewer::shortcutBindingsString() renamed keyboardString().QGLViewer::mouseBindingsString() renamed mouseString().SpinningFrame::updateFrame() renamed spin().const.QGLViewer::rootWidget() removed, use QWidget::topLevelWidget() instead.SCREEN_ROTATE_BOTTOM renamed ROLL..qglviewer.xml.KeyboardAction added (MOVE_CAMERA_LEFT, INCREASE_FLYSPEED, ....ManipulatedFrame didn't correctly take its rotationCenter() into account (bug finder Manu).SpinningFrame::rotatesAroundPoint() and SpinningFrame::orientationIsFrozen() were not documented.Camera::setType() changed zoom when called twice with ORTHO (bug finder Manu).Shortcut help window tab renamed Keyboard.select() implementations still work.Quaternion::inverseMatrix() and associated similar methods.Frame::inverse() and associated similar methods.Frame::inverseMatrix() and associated similar methods.QGLViewer::startAnimation() has no more parameter.Vec::unit() method. Returns a unitary copy of a vector.Camera::setAspectRatio() function, useful when a Camera is used to create a shadow map.Vec::normalize() now returns the previous norm of the vector (instead of
normalized vector)./usr/local/share/doc/QGLViewer.tar.bz2 format.make install now also install the documentation (default path is /usr/local/share/doc/QGLViewer).make options let you install separately the includes, the library and the documentation.<< operator with gcc 2.96 (bug finder Ranjith).ManipulatedFrame and ManipulatedCameraFrame.spinned(), manipulated() and interpolated() signals are no longer
connected to all the viewers updateGL() slots.ManipulatedFrame::mouseMotion enum (ROTATE, ZOOM,...) is renamed QGLViewer::mouseAction.drawText() made public.mouseStateKey(), Camera::mode(), ... functions removed.Quaternion(from,to) constructor had a bug (bug finders Marc and Tanguy).MouseGrabber no longer activated when hovered while moving the camera or the manipulatedFrame().updateGL() limited to the strict minimum.startScreenCoordinatesSystem() can set the origin in the lower or the upper left corner.Camera::domElement() syntax has been changed (previous
.qglviewer.xml files are not compatible).TriangleSetConstraint class has been removed from the main library and moved
in the triSetConstraint contrib example.MouseGrabber/ManipulatedFrame wheel zoom fixed.QGLViewer::saveToFileForAllViewers() is back and called by Escape (problems with multiple viewers)..qglviewer.xml state file is saved even when the viewer is not a top level window.ManipulatedFrame::ZOOM_ON_REGION mouse action, binded to Shift + middle button.Camera::fitScreenRegion() function.startScreenCoordinatesSystem no longer disable lighting nor enables blending.MouseGrabber::clearMouseGrabberPool() function.ManipulatedFrame used as
MouseGrabber (bug finder Cyril).libQGLViewer135.obj error message with Visual C++ removed.keyboardAndMouse example.ManipulatedFrame grabsMouse within a distance of 10 pixels (instead of 5).QGLViewer::setBackgroundColor(QColor) added to prevent hidding the QGLWidget function.QGLViewer::setForegroundColor(QColor) added for consistency reasons.keyboardAndMouse example.QTextEdit with Qt 2.3.QGLViewer::mouseBindingsString() and QGLViewer::shortcutBindingsString() functions.ManipulatedFrame associated state key are no longer considered when they are manipulated as MouseGrabber.QGLViewer::ZOOM_OUT renamed QGLViewer::ZOOM_TO_FIT.QGLViewer::CENTER_AS_RAP renamed QGLViewer::RAP_IS_CENTER.ManipulatedFrame can now correctly be used as mouse grabbers (see the keyFrames example).displayZBuffer problem with glRasterPos fixed..displayFPS correctly handles application default font size.Glut no longer needed if your Qt version is at least 3.1.QGLViewer::drawText can use different QFont.QGLViewer::drawText() has changed :
QGLWidget::renderText() is used instead of GLUT (no longer needed) if your Qt version is at least 3.1.QString and QFont.const since it calls makeCurrent.draw3DText() does not work anymore (because of Qt's text rendering). Use
QGLWidget::renderText() instead.QGLViewer::startScreenCoordinatesSystem().Camera::projectedCoordinatesOf().Camera::unprojectedCoordinatesOf().MouseGrabber::checkIfGrabsMouse().Camera::setFOVToFitScene() is clamped to M_PI/2.0.#include "QGLViewer/qglviewer.h".src directory has subsequently been renamed QGLViewer.Camera::getViewport function.drawNeeded() is emitted before each call to draw() (it was no longer the case if you chose to override draw()).ZOOM_OUT default mouse binding changed. See mouse page.setMouseStateKey()..fastDraw() fixed.KeyFrameInterpolator indexes out of range (bug finder Xadeck).initializeGL() message when several viewers are used (bug finder Franck).setMouseBinding, setWheelBinding mouse customization functions.select function is back ! Simply overload. Shift-LeftButton by default.QGLViewer::closeEvent() saves the current viewer state to file.Frame::alignOnAxis() function.setMouseStateKey() has been modified to fit with setMouseBinding(). Read its documentation.ManipulatedCameraFrame::Mode enum and all mode functions are removed.mouseBehavior enum is replaced by mouseHandler.mouseStateKey removed and replaced by setMouseBinding.QGLViewer::saveToFileForAllViewers() removed as saveToFile is now called in closeEvent.Camera::setRevolveAroundPointToSceneCenter() function removed.setXXXWithConstraint() functions in Frame.finished signal in KeyFrameInterpolator.Quaternion::randomOrientation() static function..src.rpm file.KeyFrameInterpolators now enforce frame constraints.QGLViewer::drawLight() made const and has an optional scale.updateGL() no longer called in QGLViewer::keyPressEvent() when the key is not handled.Camera::horizontalFieldOfView() fixed. Previous value was flawed.rpm installs the library in /usr/local, as does a make install. The examples now compile with no manual tweaking.helpString() function used by help().Qt::QMessageBox is now used to display help().Camera::getViewDirection() with float parameters.DLL.Camera::setFOVToFitScene() function.cout and cerr replaced by QMessageBox and qWarning.QGLViewer::message() removed.QGLViewer::snapshotCounter() makes saveSnapshot() faster in automatic mode.QGLViewer::saveSnapshot() has an overwrite parameter.Camera::zoomOutToFitScene() and zoomOnPixel() become Camera::interpolateToFitScene() and interpolateToZoomOnPixel().QGLViewer::setShortcutKey takes an optional stateKey parameter.Camera::setSceneRadius and setSceneCenter become public.Camera::fitSphere() fixed (bug finder Sylvain).setForegroundColor() and setBackgroundColor() functions.ManipulatedFrame inherits MouseGrabber. See the example.ManipulatedFrame::spinningSensitivity() function.setSceneBoundingBox() with float[3] parameters.MouseGrabber, checkIfActive() and others become checkIfGrabsMouse, ....ManipulatedCameraFrame class merges specific ManipulatedFrame camera behavior.Camera::mouseDoubleClickEvent() and Camera::adaptFrameState() removed.zNear() and zFar() are more tightly (a factor 2) set from sceneRadius().zNear() and zFar() are canged to display path when cameraPathIsEdited().#define QGLVIEWER_VERSION 0x010301 added. Allows #if QGLVIEWER_VERSION < Ox010300 ... #endif.make install creates links to libraries instead of copies.Quaternion internal representation switched from float to double because of precision problems with very small rotations (bug finder Christof).MouseGrabber class for even more interactive applications. See the exampleQGLViewer.setCamera() lets you switch between different cameras in your viewer.restoreFromFile() and saveToFile() now also accept a directory as an argument.QGLViewerPool() holds all the QGLViewers, and QGLViewerIndex() identifies a viewer.viewer.camera and camera.frame are now pointers. Use viewer.camera() and camera()->frame() instead.manipulatedFrame() are now manipulated with the Control key instead of Alt.saveToFile() and restoreFromFile() removed from constructor/destructor.restoreFromFile() in your init() function if you want to restore previous state.saveToFile() is called when you quit your application (default key is Escape). See also saveToFileForAllViewers().Camera::saveCurrentPOV() and restorePOV() removed. Use addKeyFrame() and playKeyFramePath() instead.deleteKeyFrameStateKey() and associated functions are removed.Camera::getProjectionMatrix() and getModelViewMatrix() are now public.camera()->get...Matrix() instead of the ones in QGLViewer, which have been removed.Camera::fieldOfView() in radians instead of degrees.ShortcutAction names used in setShortcutKey() were uppercased to prevent name conflicts.pixelGLRatio() fixed and now correct in ORTHO camera mode.fitSphere() fixed in ORTHO camera mode.revolveAroundPoint() no longer moves in ORTHO mode.help()Quaternion::log() and exp() more robust.distanceToSceneCenter() changed so that zNear() and zFar() handle tight sceneRadius().revolveAroundPoint was not fixed on screen with an ORTHO camera (bug finder Christof).SpinningFrame class, between Frame and ManipulatedFrame.
See the example.QGLViewer::setSceneBoundingBox() function.Quaternion::log() and Quaternion::exp() functions.Quaternion::slerp() and Quaternion::squad() static members.MultiView example.ManipulatedFrame as for Camera.Frame::getMatrix() and Quaternion::getMatrix() with double[16] parameters.Frame::rotatesAroundPoint() function.Camera no longer has a default referenceFrame().KeyFrameInterpolator.make install and RPM becomes /usr/local.rm or rpm -e libQGLViewer*).make install installs include files in INCLUDE_DIR/QGLViewer.SpinningFrame, KeyFrameInterpolator and ManipulatedFrame update signals are automatically connected to all viewers.Camera::setSceneBoundingBox() also set the sceneCenter().Camera::setConstraint() removed. Use camera.frame.setConstraint() instead.Camera::zoomOutFromPixel() replaced by zoomOutToFitScene().ManipulatedFrame::alignWithAxis() replaced by Frame::alignWithFrame().QGLViewer::convertClickToLine() moved in Camera and takes int.Camera::pixelGLRatio() functionstd::min patched for windows compilationQGLViewer::help() becomes a public method.PLANE constraint type can no longer be used for rotations.KeyFrameInterpolator used to crash if the path was deleted while interpolating (bug finder Sylvain).drawAxis() and drawGrid() no longer save the openGL state.postDraw(), that call them does it instead.Camera::loadProjectionMatrix() and Camera::loadModelViewMatrix() are no longer protected.Camera::pointUnderPixel(x,y) to convert from screen to 3D coordinates.setSceneBoundingBox(), zoomOnPixel(), viewDirection().ManipulatedFrame now has a rotationSensitivity()
and a translationSensitivity().Camera::lookAt() preserves the horizon.Camera::fitSphere() no longer modifies the orientation.ManipulatedFrame bug was (finally) identified...and not fixed. See the AxisPlaneConstraint() man page for details.SPECIAL mouse behavior disappears. See the mouse page.select() function is removed. Overload mousePressEvent() to
implement selection, see the select example.QGLViewer::currentFPS() returns the current frame rate.QGLViewer::setSnapshotFormat() and QGLViewer::snapshotFormat().Quaternion::matrix() to use Quaternions as openGL 4x4 matrices.QGLViewer::draw3DText() to draw text in 3D, see the draw3DText example.revolveAroundPoint(). Should fix problems with small objects in large scene.libGLcore has been removed from the rpm dependencies.QGLViewer::saveSnapshot() has only one parameter.KeyFrameInterpolator class. See the keyFrames examples.QGLViewer::updateGLForAllViewers() and QGLViewer::connectSignalToAllViewers().saveToFile() and restoreFromFile(). All classes implement domElement() and initFromDOMElement().Quaternion::inverse() and Quaternion::invert() : two separated methods (thanks Dominique).Frame::modified() signal is now emitted when a frame is modified.const versions of Frame::translate() and Frame::rotate().Camera::setCameraFromProjectionMatrix() (thanks Sylvain).include_dir/cwFiles).QGLViewer::startScreenCoordinatesSystem() was flawed, now ok. See the screenCoordSystem example.toggleDisplayFPS(), toggleDrawAxis()...) now call updateGL(). The qt bug that prevented it was patched.Vec class slightly modified (some const removed and normalize() returns a ref).Quaternion::axis() and Quaternion::angle() now respect the 0-pi specification.QGLViewer documentation.Camera::setRevolveAroundPoint() is replaced by Camera::seamlesslySetRevolveAroundPoint().QGLViewer::animationPeriod() replaces QGLViewer::animationInterval().Camera::aspect() and QGLViewer::aspect() are now named aspectRatio().Quaternion::setAxisAndAngle() becomes Quaternion::setAxisAngle().QGLViewer::setMouseStateKey() and mouseStateKey()).Camera::setUpVector() function.Camera::setOrientation(theta, phi) : an other easy way to position the camera.Frame::getMatrix(), Frame::getWorldMatrix(), Frame::worldMatrix() : new matrix expressions of a frame transformation.Frame::transformOf() and similar functions to convert vectors between frames.Camera::setMode()), a double click changes fly speed. See mouse page.QGLViewer::drawLight() polished. See the drawLight example.Quaternion::setFromRotationMatrix fixed. Was completely flawed (thanks Sylvain). Camera::setOrientation fixed. It used to change the camera position too because of the complex camera frame setup (web page to come). setPosition and setOrientation can now be used in any order. See also setOrientation(theta,phi) in the NEW section.Frame::setConstraint() now supports a NULL pointer, which intuitively results in no constraint.Camera::FLY mode changed to maintain the horizon.Quaternion(from, to) had a problem with angles > pi/2 and null vectors.QGLViewer::setDisplayText becomes QGLViewer::setEnableText
(idem for QGLViewer::toggleEnableText() and QGLViewer::isTextEnabled()).
It controls whether QGLViewer::drawText() actually draws text
or not (default is yes).
Convenient to remove all the displayed text with a single shortcut ('?' by default).Frame::setRotationAxisAngle(), Frame::setOrientationAxisAngle() now take angles expressed in radians instead of degrees.Frame::orientationOf() is replaced by Frame::transformOf().startScreenCoordinatesSystem() function that allows to directly draw in screen coordinates.help() function. Key Binding 'H'. Complete default behavior.drawText() directly in draw().setShortcutKey() and setShortcutStateKey()
See also setMouseStateKey(), setSavePOVShortcutKey(),....