Home Documentation Download Examples Developer

# Archived Change Log

This is the changeLog for libQGLViewer version 1.x. See also the changeLog for versions 2.x.

## April 28th, 2005 - 1.3.9-6

New features

- A new `Camera::zClippingCoef()` method to define z clipping planes positions.
- A new `mouseGrabberChanged` signal.
- Some hacks allow a compilation with .NET and the free Qt 2.3 version (thanks Lionel).

Changes in the API

- `Camera::pixelGLRatio()` made `const`
- `QGLViewer::drawGrid` and `drawAxis()` made virtual.

Bug fixes or improvements

- Help window improved: new About button and custom bindings descriptions separated.
- Problem with camera keyFrameInterpolator domElement fixed.

## March 2nd, 2005 - 1.3.9-5

New features

- A new `setStateFileName` method (default `stateFileName` is `.qglviewer.xml`, as before).
- A new `helpWidget` method.
- A Debian package of the library is now available (thanks to Artur Czechowski).

Changes in the API

- `saveToFile` and `restoreFromFile` were renamed `saveStateToFile` and `restoreStateFromFile`.
  They no longer take file names as parameters, use `stateFileName` instead.

Bug fixes or improvements

- Version number saved in state files.

## February 9th, 2005 - 1.3.9-4

New features

- `restoreFromFile()` now returns a `bool` that indicates restoration success.
- A message is briefly displayed when one changes the camera displacement mode (using the Space key).

Changes in the API

- Enabled text status (toggled using the ? key) no longer saved in `.qglviewer.xml` file.

Bug fixes or improvements

- Only the last saved camera position (or path) was restored from file (bug finder Xavier).
- Error message in `restoreFromFile()` with several viewers finally removed (bug finder Xavier).
- Proper include file (with `QGLViewer/` prefix) in classes' documentation.

## January 13th, 2005 - 1.3.9-3

New features

- New terrain and dvonn cool examples.

Changes in the API

- `setMouseBindingDescription` parameters reordered.
- `startScreenCoordinatesSystem` z mapping now ranges in [0.0, 1.0[ (was [1.0, -1.0]).
- Frame alignment (left and right buttons double click) are now filtered by constraints.
- Double click events are disabled in fly camera mode.
- `Vec::projectOnAxis()` no longer requires a normalized axis.

Bug fixes or improvements

- `Vec` values stored in a union to ensure proper memory allocation (bug finder Olivier).
- Problem with vectorial rendering using several GL contexts fixed (bug finder Cyril).
- Problem with `displayMessage()` that regularly called `updateGL` fixed (bug finder Stéphane).
- No more error message when no `.qglviewer.xml` file is found in multi-viewer configuration.
- Slightly modified screenCoordSystem example.
- Warning message when quickly deleting several times the same camera paths removed.
- Double click properly handled by `ManipulatedFrame` when used as `MouseGrabber`.
- Mouse events binded to no action are no longer displayed in mouse help tab.
- `Frame::setFromMatrix()` now expects an OpenGL format matrix.

## November 23rd, 2004 - 1.3.9-2

New features

- New `QGLViewer::sizeHint()` method returns preferred viewer size (600x400).

Bug fixes or improvements

- Infinite loop when `displayMessage()` is called in `draw()` fixed.
- `EPSInterface.ui` version downgraded to 3.0.
- Better mouseGrabber example.
- Rounding problems in `Quaternion(from, to)` method fixed.
- Viewers share their OpenGL contexts in the multiView example.

## November 17th, 2004 - 1.3.9-1

New features

- A designer plugin can be installed to ease user interfaces creation. Thanks Glen.
- New `setSnapshotQuality()` method to tune snapshots' quality (and hence size).
- New `displayMessage()` method, useful to give feedback to the user.
- New `QGLViewer` constructor, that enables Open GL context sharing between several viewers (requires Qt > 3.2).
- New `saveSnapshot()` method, with a filename as parameter.
- New `openSnapshotFormatDialog()` method to select snapshot format using a popup dialog.
- New `drawFinished` signal, that can be connected to `saveSnapshot()` to create movies.
- New `firstTime(), lastTime()` and `duration()` method in `KeyFrameInterpolator`.
- New `aboutQGLViewer()` method displays libQGLViewer version and info.
- New `Camera::setViewDirection()` method.
- Several new examples:
  - multiSelect illustrates multi-objects selection and features an area selection.
  - A contribs page describes so-called "contribution" more complex examples.
  - eventRecorder enables scenario recording and replay for movie creation.
  - backgroundImage displays a static backgroundImage in your viewer. Thanks Sylvain.
  - thumbnail is a dual display illustration. Thanks Sylvain.
- `SpinningFrame, ManipulatedFrame` and `ManipulatedCameraFrame` have copy constructors and = operators.
- `Vec` and `Quaternion` classes have a convenient explicit constructor from a `QDomElement`.
- Full XML syntax checking in `initFromDOMElement()` functions.

Changes in the API

- New cleaned `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.0
- `setSelectRegionSize()` replaced by `setSelectRegionWidth()` and `setSelectRegionHeight()`.
- Spurious `foregroundColor()` and `backgroundColor()` methods removed.
- The `EXIT KeyboardAction` was renamed `EXIT_VIEWER` because of potential name conflict.
- `Vec::unit()` made `const`.

Bug fixes or improvements

- Adding or deleting a camera keyframe shortly displays a feedback message.
- Default snapshot image quality was increased to 95 (see `setSnapshotQuality()`).
- Camera holds its projection matrix, which makes `projectedCoordinatesOf()` faster and more versatile.
- Crash with anti-aliased font with nVidia cards fixed (once again, but now for good).
- Nicer help window, with colored lines and a header.
- `KeyFrameInterpolator` documentation mostly rewritten.
- `cwFiles` custom widget directory removed and replaced by a `qglviewer.cw` file.
- Default `snapshotFormat()` set to the first one available (instead of JPEG).
- `mouseTracking` state no longer saved in (nor restored from) `.qglviewer.xml` file.

## June 7th, 2004 - 1.3.8-3

Changes in the API

- `QAccel` abandoned : user defined key bindings have the priority.
- `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`.

Bug fixes or improvements

- Subtle bug flawed mouse bindings (especially object selection).
- Compilation successfully tested on SUN and IBM AIX (thanks Benjamin).

## June 14th, 2004 - 1.3.8-2

New features

- A new anaglyph example.

Bug fixes or improvements

- Patches for compilation on HP UX architecture (thanks Benjamin).

## June 9th, 2004 - 1.3.8-1

New features

- A new `setKeyDescription()` method to customize the help dialog.
- A new `setMouseBindingDescription()` method to customize the help dialog.
- `Camera::projectedCoordinatesOf()` and similar methods have an additional optional `Frame` parameter.

Changes in the API

- `ShortcutAction` enum renamed `KeyboardAction`.
- New `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()`.
- Several functions made `const`.
- `QGLViewer::rootWidget()` removed, use `QWidget::topLevelWidget()` instead.
- `SCREEN_ROTATE_BOTTOM` renamed `ROLL`.
- Asking for help window several times simply updates and shows instead of opening a new window.
- Scene radius and center no longer saved and restored in `.qglviewer.xml`.

Bug fixes or improvements

- Web site design updated. New Unix and Windows installation pages.
- New `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`.

## May 5th, 2004 - 1.3.7-1

New features

- The object selection process has been simplified. Simply overload the drawWithNames() function and get the resulting selection id with selectedName(). See the updated select examples for a practical implementation.
- Previous `select()` implementations still work.
- `Quaternion::inverseMatrix()` and associated similar methods.
- `Frame::inverse()` and associated similar methods.
- `Frame::inverseMatrix()` and associated similar methods.
- A new quarto example.

Changes in the API

- `QGLViewer::startAnimation()` has no more parameter.

Bug fixes or improvements

- The new Qt 3.2.2 version patches the anti-aliased font display on nVidia hardware that made drawText() crash.
- The examples page is divided in three sections: basic, pedagogical and complex.

## March 17th, 2004 - 1.3.6-2

New features

- A new `Vec::unit()` method. Returns a unitary copy of a vector.
- `Camera::setAspectRatio()` function, useful when a Camera is used to create a shadow map.

Changes in the API

- `Vec::normalize()` now returns the previous norm of the vector (instead of normalized vector).
- RPM now installs the documentation in `/usr/local/share/doc/QGLViewer`.
- Tarred versions of the sources now available under `tar.bz2` format.
- `make install` now also install the documentation (default path is `/usr/local/share/doc/QGLViewer`).
- New `make` options let you install separately the includes, the library and the documentation.
- Examples autodetect if Qt is threaded or not and change link accordingly.

Bug fixes or improvements

- The Qt 2.3 version (free win32 Qt version) works (almost) completely.
- Some typos in the documentation were fixed.
- Patch for `<<` operator with gcc 2.96 (bug finder Ranjith).

## February 3rd, 2004 - 1.3.6-1

New features

- The mouse sensitivity can be tuned for `ManipulatedFrame` and `ManipulatedCameraFrame`.
- The viewer window previous position is properly restored back, even for embedded widgets or in full screen mode.
- The version and packaging date are added to all files, so that you know your current version.

Changes in the API

- The `spinned(), manipulated()` and `interpolated()` signals are no longer connected to all the viewers `updateGL()` slots.
  If you use several viewers, you should now explicitly make these connections. See the signals' documentations for details.
- The `ManipulatedFrame::mouseMotion` enum (ROTATE, ZOOM,...) is renamed `QGLViewer::mouseAction`.
- `drawText()` made `public`.
- Deprecated `mouseStateKey(), Camera::mode(), ...` functions removed.

Bug fixes or improvements

- The `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()`.
- Calls to `updateGL()` limited to the strict minimum.
- FAQ page split in two, with a new technical FAQ.

## December 24th, 2003 - 1.3.5-8

New features

- `startScreenCoordinatesSystem()` can set the origin in the lower or the upper left corner.

Changes in the API

- The `Camera::domElement()` syntax has been changed (previous `.qglviewer.xml` files are not compatible).
- The `TriangleSetConstraint` class has been removed from the main library and moved in the `triSetConstraint` contrib example.

Bug fixes or improvements

- Problem with `MouseGrabber/ManipulatedFrame` wheel zoom fixed.
- `QGLViewer::saveToFileForAllViewers()` is back and called by Escape (problems with multiple viewers).
- The `.qglviewer.xml` state file is saved even when the viewer is not a top level window.
- A Qt bug with full screen has been patched so that viewers can start in full screen mode.
- When pressing a key, display is updated only when required.

## November 26th, 2003 - 1.3.5-7

New features

- A new `ManipulatedFrame::ZOOM_ON_REGION` mouse action, binded to Shift + middle button.
- The associated `Camera::fitScreenRegion()` function.

Changes in the API

- `startScreenCoordinatesSystem` no longer disable lighting nor enables blending.

## November 17th, 2003 - 1.3.5-6

New features

- A `MouseGrabber::clearMouseGrabberPool()` function.

Bug fixes or improvements

- Problem with classes derived from `ManipulatedFrame` used as `MouseGrabber` (bug finder Cyril).
- Unclean old malloc removed from EPSRender code.
- `libQGLViewer135.obj` error message with Visual C++ removed.

## November 7th, 2003 - 1.3.5-5

New features

- A new `keyboardAndMouse` example.

Bug fixes or improvements

- `ManipulatedFrame` grabsMouse within a distance of 10 pixels (instead of 5).
- Fly speed modification problem when using +/- fixed.

## November 5th, 2003 - 1.3.5-4

New features

- `QGLViewer::setBackgroundColor(QColor)` added to prevent hidding the `QGLWidget` function.
- `QGLViewer::setForegroundColor(QColor)` added for consistency reasons.
- A new `keyboardAndMouse` example.

Bug fixes or improvements

- Patch for `QTextEdit` with Qt 2.3.

## October 24th, 2003 - 1.3.5-3

Bug fixes or improvements

- The nVidia bug with anti-aliased fonts has been patched.

## October 22nd, 2003 - 1.3.5-2

New features

- Help window now has a keyboard and a mouse tabs.
- `QGLViewer::mouseBindingsString()` and `QGLViewer::shortcutBindingsString()` functions.
- Tested on Windows Visual 6 (Qt 2.3) and with MS .NET (Qt 3.2).

Changes in the API

- `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`.

Bug fixes or improvements

- `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.

## October 2nd, 2003 - 1.3.5-1

New features

- `Glut` no longer needed if your Qt version is at least 3.1.
- `QGLViewer::drawText` can use different `QFont`.

Changes in the API

- `QGLViewer::drawText()` has changed :
  - `QGLWidget::renderText()` is used instead of GLUT (no longer needed) if your Qt version is at least 3.1.
  - Parameter list differs : now uses `QString` and `QFont`.
  - Function is no longer `const` since it calls `makeCurrent`.
- `draw3DText()` does not work anymore (because of Qt's text rendering). Use `QGLWidget::renderText()` instead.
- The following functions now have their origin in the upper left corner :
  - `QGLViewer::startScreenCoordinatesSystem()`.
  - `Camera::projectedCoordinatesOf()`.
  - `Camera::unprojectedCoordinatesOf()`.
  - `MouseGrabber::checkIfGrabsMouse()`.
- `Camera::setFOVToFitScene()` is clamped to M_PI/2.0.
- The examples now `#include "QGLViewer/qglviewer.h"`.
- The `src` directory has subsequently been renamed `QGLViewer`.

## September 24th, 2003 - 1.3.4-2

New features

- `Camera::getViewport` function.

Changes in the API

- `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.
- Wheel bindings now also modified by `setMouseStateKey().`.

Bug fixes or improvements

- Segmentation fault when exiting fixed.
- Frustum modification minimized when switching between PERSPECTIVE and ORTHO camera type.
- Disabled shortcuts no longer appear in help window.
- Missing includes on specific linux architecture were added.
- Missing display update when using `fastDraw()` fixed.
- Position and size of the window properly saved and restored when QGLViewer is a part of an other QWidget.
- Camera now correctly handles `KeyFrameInterpolator` indexes out of range (bug finder Xadeck).
- No more erroneous `initializeGL()` message when several viewers are used (bug finder Franck).

## July 16th, 2003 - 1.3.4-1

New features

- Mouse bindings can entirely be customized. See mouse page.
- Double simple click action removed. See mouse page for new bindings.
- `setMouseBinding, setWheelBinding` mouse customization functions.
- The `select` function is back ! Simply overload. Shift-LeftButton by default.
- `QGLViewer::closeEvent()` saves the current viewer state to file.
- QGLViewer icon added to the web pages.
- A `Frame::alignOnAxis()` function.

Changes in the API

- `setMouseStateKey()` has been modified to fit with `setMouseBinding()`. Read its documentation.
- The `ManipulatedCameraFrame::Mode` enum and all `mode` functions are removed.
- The `mouseBehavior` enum is replaced by `mouseHandler`.
- The `mouseStateKey` removed and replaced by `setMouseBinding`.
- `QGLViewer::saveToFileForAllViewers()` removed as `saveToFile` is now called in `closeEvent`.
- `Camera::setRevolveAroundPointToSceneCenter()` function removed.

Bug fixes or improvements

- Zooms is not too slow when close to scene center.

## June 27th, 2003 - 1.3.3-1

New features

- Doxygen search engine added to the reference manual.
- `setXXXWithConstraint()` functions in `Frame`.
- A `finished` signal in `KeyFrameInterpolator`.
- Z-buffer can be displayed with shortcut Z (thanks Sylvain).
- A `Quaternion::randomOrientation()` static function.
- The Max OS X version of Qt is now free ! Download the latest version.
- The gcc 2.96 version of the rpm in no longer maintained. You need to compile it from the `.src.rpm` file.

Bug fixes or improvements

- `KeyFrameInterpolators` now enforce frame constraints.
- Easier compilation with darwin on mac architectures and on Linux Debian.
- `QGLViewer::drawLight()` made `const` and has an optional scale.
- `updateGL()` no longer called in `QGLViewer::keyPressEvent()` when the key is not handled.

## June 1st, 2003 - 1.3.2-3

Bug fixes or improvements

- `Camera::horizontalFieldOfView()` fixed. Previous value was flawed.

## April 17th, 2003 - 1.3.2-2

Changes in the API

- The `rpm` installs the library in `/usr/local`, as does a `make install`. The examples now compile with no manual tweaking.
- Easier compilation with Qt 2.3. See the installation page for details.

## April 17th, 2003 - 1.3.2-1

New features

- A new `helpString()` function used by `help()`.
- A `Qt::QMessageBox` is now used to display `help()`.
- A `Camera::getViewDirection()` with `float` parameters.
- Windows compilation now creates a `DLL`.
- A `Camera::setFOVToFitScene()` function.
- `cout` and `cerr` replaced by `QMessageBox` and `qWarning`.
- `QGLViewer::message()` removed.
- A new `QGLViewer::snapshotCounter()` makes `saveSnapshot()` faster in `automatic` mode.
- `QGLViewer::saveSnapshot()` has an `overwrite` parameter.

Changes in the API

- `Camera::zoomOutToFitScene() and zoomOnPixel()` become `Camera::interpolateToFitScene() and interpolateToZoomOnPixel()`.
- `QGLViewer::setShortcutKey` takes an optional stateKey parameter.
- `Camera::setSceneRadius` and `setSceneCenter` become `public`.

Bug fixes or improvements

- `Camera::fitSphere()` fixed (bug finder Sylvain).

## April 10th, 2003 - 1.3.1-1

New features

- `setForegroundColor()` and `setBackgroundColor()` functions.
- `ManipulatedFrame` inherits `MouseGrabber`. See the example.
- A `ManipulatedFrame::spinningSensitivity()` function.
- A `setSceneBoundingBox()` with `float[3]` parameters.

Changes in the API

- In `MouseGrabber`, `checkIfActive()` and others become `checkIfGrabsMouse, ...`.
- A new `ManipulatedCameraFrame` class merges specific `ManipulatedFrame` camera behavior.
- `Camera::mouseDoubleClickEvent()` and `Camera::adaptFrameState()` removed.

Bug fixes or improvement

- Camera `zNear() and zFar()` are more tightly (a factor 2) set from `sceneRadius()`.
- Camera `zNear() and zFar()` are changed to display path when `cameraPathIsEdited()`.
- A `#define QGLVIEWER_VERSION 0x010301` added. Allows `#if QGLVIEWER_VERSION < Ox010300 ... #endif` conditional code.
- `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).

## March 26th, 2003 - 1.3.0-1

New features

- A new `MouseGrabber` class for even more interactive applications. See the example
- Code was modified so that it compiles with the Qt 2.3 version (win32 free version).
  Screenshot saving is not supported with Qt 2.3.
- `QGLViewer.setCamera()` lets you switch between different cameras in your viewer.
- `restoreFromFile()` and `saveToFile()` now also accept a directory as an argument.
- A `QGLViewerPool()` holds all the QGLViewers, and `QGLViewerIndex()` identifies a viewer.

Changes in the API

- `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.
  Call `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.
- Control+Fx is replaced by Alt+double press Fx to delete a camera KeyFrame path.
  `deleteKeyFrameStateKey()` and associated functions are removed.
- `Camera::getProjectionMatrix()` and `getModelViewMatrix()` are now public.
  Use these `camera()->get...Matrix()` instead of the ones in QGLViewer, which have been removed.
- `Camera::fieldOfView()` in radians instead of degrees.
- The `ShortcutAction` names used in `setShortcutKey()` were uppercased to prevent name conflicts.

Bug fixes or improvement

- Most of the documentation was updated. Detailed descriptions and more code examples were added.
- `pixelGLRatio()` fixed and now correct in ORTHO camera mode.
- Frame and Camera translation follow mouse in ORTHO mode.
- `fitSphere()` fixed in ORTHO camera mode.

## March 19th, 2003 - 1.2.9-3

Bug fixes or improvement

- `revolveAroundPoint()` no longer moves in ORTHO mode.
- Special key (Esc, Return, Space...) displayed properly in `help()`
- rpm are created with the debugged gcc 3-2-2. Optimizations now available.

## March 5th, 2003 - 1.2.9-2

Bug fixes or improvement

- Slerp interpolation debugged.
- `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).

## February 26th, 2003 - 1.2.9-1

New features

- A new `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.
- A new `MultiView example`.
- Double click is handled for `ManipulatedFrame` as for `Camera`.
- `Frame::getMatrix()` and `Quaternion::getMatrix()` with double[16] parameters.
- A `Frame::rotatesAroundPoint()` function.

Bug fixes or improvement

- `Camera` no longer has a default `referenceFrame()`.
- Orientations interpolation now based on slerps in `KeyFrameInterpolator`.
- Successful compilation on Linux Debian distribution, with gcc 2.95 and 3.2.

Changes in the API

- Default install directory for `make install` and RPM becomes `/usr/local`.
  You should remove the previous files when you install this version (with `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`.

## January 30th, 2003 - 1.2.8-3

New features

- A convenient `Camera::pixelGLRatio()` function

Bug fixes or improvement

- Minor changes in the trackball behavior.
- Visual feedback when a double simple click is used to change the revolveAroundPoint().
- `std::min` patched for windows compilation

Changes in the API

- `QGLViewer::help()` becomes a public method.

## January 22nd, 2003 - 1.2.8-2

Bug fixes or improvement

- The `PLANE` constraint type can no longer be used for rotations.
- A `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.

Changes in the API

- `Camera::loadProjectionMatrix()` and `Camera::loadModelViewMatrix()` are no longer protected.

## January 15th, 2003 - Version 1.2.8

New features

- A textureViewer pedagogical example shows how to map textures with OpenGL.
- `Camera::pointUnderPixel(x,y)` to convert from screen to 3D coordinates.
- New cool trackball functionalities, see mouse page for details.
- In Camera : `setSceneBoundingBox(), zoomOnPixel(), viewDirection()`.
- The `ManipulatedFrame` now has a `rotationSensitivity()` and a `translationSensitivity()`.

Bug fixes or improvement

- `Camera::lookAt()` preserves the horizon.
- `Camera::fitSphere()` no longer modifies the orientation.
- The `ManipulatedFrame` bug was (finally) identified...and not fixed. See the AxisPlaneConstraint() man page for details.
- There used to be a problem in the displayed FPS when the manipulatedFrame was changed (bug finder Sylvain).
- There was a Quaternion drift. They are now re-normalized (bug finder Stéphane).

Changes in the API

- The `SPECIAL` mouse behavior disappears. See the mouse page.
- The `select()` function is removed. Overload `mousePressEvent()` to implement selection, see the select example.

## December 14th, 2002 - Version 1.2.7-2

New features

- `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.

Bug fixes or improvement

- Frame spinning threshold was flawed. Unwanted spins should no longer occur.
- Camera translation is inferred from `revolveAroundPoint()`. Should fix problems with small objects in large scene.
- `libGLcore` has been removed from the rpm dependencies.

Changes in the API

- `QGLViewer::saveSnapshot()` has only one parameter.

## December 4th, 2002 - Version 1.2.7

New features

- `KeyFrameInterpolator` class. See the `keyFrames` examples.
- Key Frames can be used to define a camera path. Binded on F1-12 (see keyboard page).
- Snapshot can be saved in EPS, PS and XFIG vectorial format (thanks Cyril).
- Gestion of a QGLViewer pool. See `QGLViewer::updateGLForAllViewers()` and `QGLViewer::connectSignalToAllViewers()`.
- The complete QGLViewer state can be saved and restored in XML format (see `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).
- +/- change camera fly speed. Arrows move the camera.
- designer cw files (custom widget) are distributed with the library (in `include_dir/cwFiles`).

Bug fixes or improvement

- Float trigonometric function removed : now compile on Mac OS X architecture.
- `QGLViewer::startScreenCoordinatesSystem()` was flawed, now ok. See the screenCoordSystem example.
- The different slots (`toggleDisplayFPS(), toggleDrawAxis()...`) now call `updateGL()`. The qt bug that prevented it was patched.
- REVOLVE trackball orientation no longer depends on the mouse path.
- `Vec` class slightly modified (some const removed and normalize() returns a ref).
- `Quaternion::axis()` and `Quaternion::angle()` now respect the 0-pi specification.

Changes in the API

- Most of the "Display of visual hints" functions' names were changed. See the `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()`.
- MouseBehavior enum is uppercased : { CAMERA, FRAME, SPECIAL } (see `QGLViewer::setMouseStateKey()` and `mouseStateKey()`).
- Exit2 shortcut key ('Q') removed. Exit key (Escape) remains.

## September 10th, 2002 - Version 1.2.6

New features

- The entire library and the examples now use the threaded version of QT.
- Pressing the left and middle mouse button together rotates the scene around an axis orthogonal to the screen.
- `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.
- FullScreen mode now set the parent window (if any) in full screen mode.
- `Frame::transformOf()` and similar functions to convert vectors between frames.
- In FLY mode (see `Camera::setMode()`), a double click changes fly speed. See mouse page.

Bug fixes or improvement

- `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.

Changes in the API

- `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.
- FullScreen mode shortcut key changed to Alt-Return, to fit the windows standard..
- `Frame::orientationOf()` is replaced by Frame::transformOf().

## Mardi 21 Juillet - Version 1.2.5

New features

- Stereo display available. See the stereoViewer example.
- A `startScreenCoordinatesSystem()` function that allows to directly draw in screen coordinates.
- A new `help()` function. Key Binding 'H'. Complete default behavior.
- First RPM release, some cleanup, web pages updated.
- Web pages will now be in english, so that they can be shared on the web. Maintaining two versions is really too much work.

Changes in the API

- Text drawing is done using `drawText()` directly in `draw()`.
- Key shortcut are no longer defined by static variables. They can be tuned using `setShortcutKey()` and `setShortcutStateKey()` See also `setMouseStateKey(), setSavePOVShortcutKey(),...`.

Please send any comment, suggestion or problem by e-mail.

Last modified on Sunday, February 28, 2010.