OSG Change log ============== o Added src/osgPlugins/tgz for general tarball models. o Added src/osgPlugins/zip for general zipped models. o From Don, src/osgPlugins/osgtgz for a osg tarball models. dist/Irix for creating IRIX binary distributions. o Removed redundent NSPlugin and src/Viewer directorties. o Fixed compilation error in src/osgPlugin/flt under IRIX related to flt::Record::Record(const Record&):Referenced() {}. 6th December 2000 - osg_src-0.8-34.tar.gz o To bring the main branch inline with the autoconf branch, and inline with standard open source conventions, have made the following changes. - Copied and doc/index.html to index.html and modified to ref. README file and new relative paths of the documention. - Added AUTHORS file. - Rename and moved doc/CHANGES.txt to ChangeLog, doc/TODO.txt to TODO, doc/FAQ.txt to FAQ, LICENSE to COPYING. README.txt to README. Note, removing the .txt from files means that Windows won't be able to pick up on the file type automatically. However, they didn't have the Win32 style end of line conventions so they still wern't much use. By adding the index.html to the root directory this now allows Win32 users to browse the relevant files via Netscape or IE which can handle the unix style text files. I felt this was the best compromise. o Added notify messages to osg::Registry::read/writeOject/Node/Image() for when a plugin for a file extensions hasn't been found and for when a file hasn't been successfully read. o Added Axel Volley's UML diagrams to doc/UML. o Added mind maps on DesignPatterns and MissionState to doc/MindMaps. o Added new library command line options (see below) into src/Demos/sgv. o Integrated Graeme Harkness's reworking of src/Viewer into src/osgGLUT and Demos/sgv. Added Graeme's new Demos/cube which provides a simple demonstration of animation. o Added ReaderWriterPFB::readImage() to enable the loading of .pfu images into the osg, even if .pfb arn't used. Note, you'll need to run the viewer something like 'sgv -e pfb datfile.osg. o Added pfMultiprocess(0) to ReaderWriterPFB.cpp. o Added -W predatic warning option to compilation under Linux, and cleaned up the headers and source in response. o Added osg::Image::ensureDimensionsArePowerOfTwo() and a call to it from osg::Texture::apply() when mip mapped textures are required. Added packing aligment value to osg::Image, defaulting to 4 if the image width is a factor of 4, otherwise defaulting to 1. osg::Texture::apply() now used this osg::Image::_packing value to set glPixelStorei(); o Added sgv usage help to Viewer.cpp. Running 'sgv' will now report the command line options for sgv. Outputs the following : usage: sgv [options] infile1 [infile2 ...] options: -l libraryName - load plugin of name libraryName i.e. -l osgdb_pfb Useful for loading reader/writers which can load other file formats in addition to its extension. -e extensionName - load reader/wrter plugin for file extension i.e. -e pfb Useful short hand for specifying full library name as done with -l above, as it automatically expands to the full library name appropriate for each platform. o Added command line options -l and -e to Viewer.cpp to assist usage of plugins which can load more than indicated by their standard file extension type. See above for details. For instance pfb plugin can load *many* file formats. Try 'sgv -e pfb /usr/share/Performer/data/teapot.dxf'. o From Ben Discoe, added osg::Matrix::setTrans() and getTrans(). o Moved src/pfPlugin to src/osgPlugins/pfb and added code to enable the plugin to work with the osg as a plugin in addition to it previous functionality as a Performer plugin. Creating a link from lib/osgPlugins/osgdb_pfb.so to lib/libpfosg.so should be sufficient from Performer to pick up on the library. Added support for copying image data across from pfTexture to osg::Image texture and handling of pfMaterial::getColorMode(). Added to src/osgPlugins/pfbREADEME.txt to documentation some of the features and issues of the Performer plugin. o Fixed bug in osg::GeoState related to loading and saving of the new alpha_test paramter, which wasn't initialised in the osg::GeoState constructor. 22nd December 2000 - osg_src-0.8-33.tar.gz o Integated Brede Johansen's update to flt loader. o Added function osg::getLowerCaseFileExtension() to osg/FileNameUtils, modifed osg::Registry::createLibraryNameForFile() and osg::ReaderWriterRGB::readImage() to use this function for correctly recognising upper case extensions as equivilant to their lower case counterpart, i.e. .RGB should be interepreted as .rgb. o Fixed intersection bug which occured of osg:GeoSet's containing osg::GeoSet::TRIANGLES primitive bug. Bug was due to compilers incorrectly optimizing a templated function & functor, fixed by small reordering of the code, works perflectly now?! o Updated the README.txt with info on the dependancies of the new plugins. o Created VisualC++ project files for gif,jpeg,tga,tiff image loaders. o Commented out disabling of depth testing for transparent bin as it was causing visual artifacts on several models. 21st Decemeber 2000 - osg_src-20001221.tar.gz o Added an osg::createGeodeForImage(Image* image) method in osg/Image to create a geometry node around a image so that it can visualised within the scene without having to create all the required Geode, GeoSet, GeoState and Texture classes. Added a call to above from each of the image loaders so that images themselves can be loaded into sgv... Thereby making sgv an 3D image viewer! o From Don, added facility in osg::Texture so that if _min_filter == LINEAR || _min_filter == NEAREST then create a glTexImate2D, otherwise create a gluBuild2DMipmaps texture. o From Don, added code to display able depth testing of the transparent bin in the osgUtil::RenderVisitor:render() method. 20th Decemeber 2000 - osg_src-20001220.tar.gz o Incorportated the following image loaders from the simage library. src/osgPlugins/gif /jpeg /pic /tga /tiff Note, have only written unix makefile's so far, VisualStudio files need to be written before the next release. o Changed osgGetVersion() and osgUtilGetVersion() so that they return const char* instead of the original float. o added osg::GeoSet::s/getUseDisplayList(),dirtyDisplayList() and virtual method drawImmediateMode() which draws primitive without ever calling or creating a display list. The draw() has been changed to handle the new _useDisplayList flag so that it automatically creates a display list if the flag is true and uses the display list on further calls to draw(). draw() is nolonger a virtual method and therfore should *not* be overriden, drawImmediateMode() is now the method to override. This allows subclasses of osg::GeoSet to automatically take advantage of display lists. o From Brede, added option to osgUtil::SceneView to enable the automatic calculate of near and far planes on each frame to be switched on/off. o From Kartsen, spelling fixes to comments in Switch and GeoSet. 18th December 2000 - osg_src_20001218.tar.gz o Changed the directory structure in preperation for autoconf integration. o Converted pf2osg and osg2pf into a libpfosg.so plugin for Performer, instead of stand alone conversion programs, new pffb plugin can be found in src/pfPlugin. o Changed the osg::Material default _colorMode to OFF, and the global material _colorMode default to AMBIENT_AND_DIFFUSE. o Added read/write support for interleaved arrays into osg::GeoSet. 16th December 2000 - osg_src_20001216.tar.gz o Added osg::AlphaFunc state object. o Added support for osg::AlphaFunc into osg::GeoState. o Added support for osg::AlphaFunc into flight_park.fly. o Changed osg::Material::apply() so only required glMaterial's are called. o Integrated Don's work on adding glVertexArrays etc to osg::GeoSet. 12th December 2000 - osg_src-20001212.tar.gz o Integrated Karsten's standardisation of the library header guards. o Added osg::LightSource node. o Added get methods to osg::Light. o Modified osgUtil::RenderVisitor is track osg::LightSource nodes. o Modified osgUtil::SceneView so that it can handle headlight, sky light, and no scene view lights for the extra lights it adds to the scene for viewing. In the later mode only osg::LightSource's will light the scene. o Modified Viewer.cpp so that it toggles between the above scene view lighting modes above using the 'L' key. o Changed osg::Geode and osg::Group to rely upon ref_ptr<> for memory management rather the previous mode which required explicit ref and and unref statements. o Made osg::GeoSet::draw() and osg::GeoSet::getBound() virtual functions to allow user-drawn objects. A short term fix only. 8th December 2000 - osg_src-0.8-32.tar.gz o Added osg::Node::s/getNodeMask() as a fore runner to full implementation of TraversalMasks. o Added osg::loadNodeFile(),osg::loadImageFile() and osg::loadObjectFile() to osg/Registry header, as convienince functions for loading data. o Added osg::Camera::s/getFieldOfView() methods and split up the draw method into draw_PROJECTION() and draw_MODELVIEW() methods. Converted osg::SceneView is use these methods instead own gl calls. o Added osg::Timer class for high resolution, low overhead time stamping, converted sgv to use it. Timer class based on Don's real time frame scheduling library. o Added extension guards to .rgb reader/writer to prevent it from trying to load non rgb models. Accepted extensions are rgb,rgba,int,inta & bw. o Added osg::Node::setUserData(void*,MemoryAdapter*), osg::Node::getUserData() and osg::Node::getMemoryAdapter() and osg::MemoryAdapter to support user data. o Added png image file format loader. o From Ben Discoe: - updated LOD to use distance squared for evaluating child usage to remove need to computing sqrt. - png to osg::Image conversion code. o From Kartsen Weiss, fixes and improvents to sgv help message. o From Brede Johansen: - added osg::Node::setName( const char* name )to get round a crash under Windows, caused by a VisualC++ bug, which occurs under to multiple assignment of C style string to C++ strings. - bug fix for .rgb plug-in to solve problems with some textures with alpha values. The water tower, fences and fences now render properly in Performer Town! o Added osgUtil::SceneView::set/getBackgroundColor() for setting the background colour used by glClearColor(). o Added osgUtil::SceneView::projectWindowIntoObject(), projectWindowXYIntoObject() and projectObjectIntoWindow() to assist converting to and from window coordinates and object coordinates. o Added osg::Image* osg::Texture::getImage() to osg::Texure and converted it to use ref_ptr for handling the image memory. Added osg::Texture::getFilter() && getWrap() and seperated out enum TextureMode into enum WrapParameter & WrapMode, and FilterParameter & FilterMode. o Converted osg::GeoSet to use ref_ptr for handling the geostate memory. 2nd December 2000 - osg_src-0.8-31.tar.gz o Added osgUtil::SceneView to encapsulate the details required to render a view of a scene - the scene data, light, global geostate, camera and rendervisitor. o Cleaned up Viewer/Viewer.h & .cpp to use the new osgUtil::SceneView. o Integated Brede Johansen's update to flt loader. o Added .txt extension to README,CHANGES,TODO and FAQ to aid reading of files under Windows. o Added osg/Version and osgUtil/Version which provide external C functions for getting library name and version. Also can be used by autoconf to check for existance of the osg and osgUtil libraries. o Implemented missing osg::Camera::home(); o Fixed bug in osg::Material::apply() where no texture would be appear on surfaces on the first frame. glBindTexture was not being called with the correct parameter on creation of the OpenGL texture. o Removed redundent glEnable(GL_LIGHTING) from Viewer.cpp. o Changed the osg::Light::setDirection(Vec4&) to setDirection(Vec3&). o From Karsten Weiss : Comments added to osg::Light and osg::RenderVisitor. Fixes to make install parts of osg/src/Makefile. 28th November 2000 - osg_src-0.8-30.tar.gz o Added osg::Object::isSameKindAs(Object* obj) to aid object type comparions. This allowed osg::Object::readClone(Input& fr) to be extended to automatically detect 'Use ObjectID' syntax in .osg files, which fixes errors in reading .osg files saved from some data models created correctly by the flt loader. o Integated Brede Johansen's update to flt to handle transparency. o Commented out the flt::Registry::instance()->removedPrototype() call from RegisterRecordProxy() flt::RegisterRecordProxy destructor, which was causing a segmentation fault on exit under Linux due to destruction ordering - gnu c++ doesn't seem to honour construction/destruction order?! Prior to this 'fix', did the following changes to clean up memory allocation & deallocation as an attempt to fix the segmentation fault on exit! Changed the memory allocation of RegisterRecordProxy children to use osg::ref_ptr<> for automatic deallocation. Removed the flt::Record::_init(), _copy() and _free() moving the functionality into the constructor and destructor to simplify. flt::Record copy operator and copy constructor made private to prevent misuse. o Rewrote osg::Material so that it handles both FRONT and BACK face materials within one class, with support for FRONT_AND_BACK. o Added two sided lighting toggle to Viewer and NSPlugin. o Changed the LODBias in Viewer and NSPlugin to 1.0 (previously 2.0). o Added '#define GL_GLEXT_LEGACY 1' to osg/GL to fix compilation problems which occur on some implementation of OpenGL under Linux. 18th Novemeber 2000 - osg_src-0.8-29.tar.gz o Integrated Don Burns' Linux Netscape plug-in. o Added osg::PolygonOffset state attribute. o Added support for osg::Point and osg::PolygonOffset into osg::GeoState. o Extended osg::CullFace to encompass which face to cull, i.e FRONT,BACK or FRONT_AND_BACK, and added IO support. o Added read/write ascii to osg::Point and osg::PolygonOffset o From Don, moved light source from above model, to behind eye point for sgv and the Netscape plug-in. o Fixed material inheritance bug, by modifing osg::GeoState so that it now inherits attributes from the global state if they are not set locally. o From Brede Johansen, bug fixes in flt loader, setting of externals and redudent 'dummy' groups in LOD's. o Changed the default compilation of loaders so that pf2osg and osg2pf are not compiled by default under Linux or IRIX, ideally the presence of Performer should be detected automatically and compilation set accordingly, however this may have to wait for autoconf work. o Fixed warnings generated by gcc-2.96 in flt,fly,pf2osg and Viewer. o Changed 'const int' and 'const bool' returns type in Loaders/flt to 'int' and 'bool' respectively. This fixed silly warnings under IRIX. o In Loaders/flt changed all cout, cerr and printf's to osg::notify(). o From Karsten Weiss : - Updated OSG_ROOT/README to account for sh shells & added contact details. - Changed variable 'or' to 'ori' in Loaders/fly/base.cpp to enable compilator under later versions of gnu c++. - Comments added to BoundingBox, Lighting, CullFace and Quat. - BoundingBox::contains() bug fixed. - Changes to remove warnings generated in Loader/flt with gcc-2.96. o Updated FAQ. o Updated OSG_ROOT/README with contact details. o Changed osg::Registry and flt::Registry to use ref_ptr<> to automatically handle attached prototypes memory usage. o Removed flt/Referenced.h and replaced flt::Referenced with osg::Referenced. o Removed vnf loader is it was only a to help import a single file from an now out of date format, its existance was clogging up the distribution. 10th November 2000 - osg_src-0.8-28.tar.gz o Added Brede Johansen .flt loader. o Integrated Neil Salter's new implementation of osg::notify() which uses a NotifyInit class with a 'nifty' counter to ensure construction. o Changed osg::TexEnv,TexMat,Fog,Point,Transparency & Material so that they area all derived from osg::Object. All state components are now derived from osg::Object. o Changed osg::GeoState::setAttribute(..) and getAttribute() methods so that they deal with osg::Object's rather than void*. o Changed osg::GeoState so that it uses ref_ptr<> to automatically manage attribute memory whilst supporting attribute sharing. o Added to osg::ref_ptr<> extra operators =,==,!= & a valid() method. o Added osg::Point which enables control of OpenGL point size. o Added osg::ExtensionSupported which allows the querring of support for OpenGL extensions. o Changed the default global lighting mode to ON in sgv. o Changed the toggling bahviour in sgv between lighting and texture ON and OFF, new behaviour should be more consistent. 6th November 2000 - osg_src-0.8-27.tar.gz o Added option in osgUtil::FlightManipulator for automatically yawing the camera into the bank, and made it the default operation. o Changed the implementation of osg::notify() to default to simply cout for all platforms, rather than just Windows. This is a temporary measure to fix the crashes under IRIX and Linux. Work is underway to provide a robust implementation of osg::notify(). o Added Neil Salter's Doxyfile makefile to docs/ for generating Doxygen documetation. o Changed the #define's in include/osg/Transparency to enumerated types and removed the SGTRANSPARENCY_ prefix as its now within the scope of the Transparency class itself. o Changed the #define's in include/osg/TexEnv to enumerated types and removed the SGTEXENV_MODE_ prefix as its now within the scope of the TexEnv class itself. o Changed the #define's in include/osg/TexGen to enumerated types and removed the SGTEXGEN_ prefix as its now within the scope of the TexGen class itself. o Changed the #define's in include/osg/Material to enumerated types and removed the SGMAT_ prefix as its now within the scope of the Material class itself. o Changed the #define's in include/osg/Fog to enumerated types and removed the FOG_ prefix as its now within the scope of the Fog class itself. o Changed the #define MIN_CACHE_SIZE in include/osg/Field to enumerated type, therefore keeping it within the Field's scope. o Changed the #define MINIMUM_FIELD_READER_QUEUE_SIZE in include/osg/ FieldReaderIteraor to enumerated type, therefore keeping it within the FieldReaderIterator's scope. 3rd November 2000 - osg_src-0.8-26.tar.gz o Removed the GSET_ prefix from the osg::GeoSet enumerated types as its no longer required, since the enumerated types are within the osg::GeoSet's scope. o Added osg::notify() function for redirecting messages either to stdout or stderr (cout or cerr) or /usr/tmp/osg.info, depending upon the severity level set. The environmental variable OSGNOTIFYLEVEL can be set to overide the default level which is osg::NOTICE. See include/osg/Notify for more details of the levels available. Current implementation only works under Linux and IRIX, under Windows the output is simply directed to cout. o In osgUtil::DriveManipulator added the option to use the mouse y poistion to govern the speed in addition to the previous left button to speed up, right button to slow down/reverse. The two modes can be toggled by pressing 'q' and 'a' respectively. Default is using the mouse y position for speed. o Changed osgUtil::TrackballManipulator so that it supports proper trackball style manipulation. o Added a zoom limit to the osgUtil::TrackballManipulator to prevent the user from zooming into a point. Under this limit the zoom operation nolonger zooms in but pushes the eye and look points forward down the look vector, keeping the distance constant. o Added osg::Camera::getLookVector() and osg::Camera::getFocalDistance() methods. o Added osgUtil::DriveManipulator. o Renamed osgUtil::GUIUpdateState to osgUtill::GUIActionAdapter and moved it to its own file. o Fixed bug in osgUtil::IntersectVisitor related to reference counting and NULL object. o Added osgUtil::FlightManipulator. o Modified sgv to enable support for multiple camera manipulators. o Added resize event and window min and max to osgUtil::GUIEventAdapter. o Added resize event and window min and max to GLUTEventAdapter. 27th October 2000 - osg_src-0.8-25.tar.gz o Added support for string descriptions to be added to osg::Node's, which can be saved and loaded via .osg data file. o Fixed bugs in osg::FieldReaderIterator & osg::GeoSet related to the osg::FieldReaderIterator::matchSequence() method, detected when implementing string descripters IO. o Modified osg::Light so its derives from osg::Object. o Added osg::Matrix::preScale(),postScale() methods. o Added methods to osgUtil::CameraManipulator. o Added osgUtil::GUIEventAdapter::time() to log the time of an event. o Rewrote osgUtil::GUIUpdateState so it now based on virtual functions. o Implementated trackball functionality in osgUtil::TrackballManipulator. o Ported sgv over to use new osgUtil::CameraManipulator rather than old trackball functionality, removed original trackball code. o Changed the frame delay in sgv to default to off, pressing '-' turns the frame delay on, then successively slow sgv down, pressing '+' reduces the frame delay again until it turns off as before. o Added matrix multiplication methods into osg::Camera, and added method for calculating the side vector of the camera. o Added methods to osgUtil::CameraManipulator to extend the functionality which can be exposed to users of a generic camera maniupluator. o Added osgUtil::RenderVisitor::setLookAt(const Camera&) method to make it convinient to use camera's with the render visitor. o From Don, added Unix Makefile support for make install, instlinks, home and automatic detection of OS type. Changed target lib directory for loader plug-in to lib/OSGLoaders. o Added /usr/lib{32}/OSGLoaders DSO search path for and to prepend file name with "OSGLoaders/" if the standard search fails. o Renamed osgUtil::GUIEventAdaptor to osgUtil::GUIEventAdapter. o Renamed osg::RP<> to osg::ref_ptr<> to make it clearer its usage and to be more consistent with STL's auto_ptr<>. o Added osgUtil::CompileGeoSetsVisitor, original existed in sgv. o Changed the osg::GeoSet::compile() method so that it calls the GeoSet's GeoState apply method before creating the OpenGL Display List. Note, the state is still NOT compiled into the Display List. This improves performance significantly when running the program remotely. o Cleaned up the methods in osgUtil::CameraManipulator. o Added support for returning intersection normals from osgUtil::IntersectVisitor. 20th October 2000 - osg_src-0.8-24.tar.gz o With assistance for Simon Cooke and Brede Johansen added support for relative include, lib and bin paths into the VisualStudio workspace files. o Changed the link to glut from glut.lib to glut32.lib in VisualStudio workspace files. o Updated the root READE to reflect the simplified Windows compilation. o Added support for osg::GeoState into osg::Scene. o Added osg::Quat::get(Matrix&) & osg::Quat::set(Matrix&) into osg::Quat, submission from Brede Johansen, orginal source from gamasutra.com. o Fixed crash in osgUtil::RenderVisitor::reset(), caused by an unguarded ptr->unref(). o Added -Wall to Linux makedefs, and fixed resultant warnings. o Added preliminary interfaces to osgUtil::GUIEventAdaptor, osgUtil::GUIUpdateState and base class osgUtil::CameraManipulator. 14th October 2000 - osg_src-0.8-23.tar.gz o Updated the root README file to mention the Data download, the dependancies (i.e GLUT) and slightly clearer Win32 instructions. o Added == operator into osg::Vec2, osg::Vec3 and osg::Vec4. o Removed float* and const float* conversion operators from osg::Vec2, osg::Vec3 and osg::Vec4. o Added Neil Salter's osgUtil work on camera manipulators into the osg distribution under include/osgUtil and src/osgUtil and moved the original src directory to src/osg. Modified Linux and IRIX makefile to account for new library and structure. o Moved osgUtil::Camera into osg::Camera. o Moved osg::RenderVisitor and osg::IntersectVisitor into osgUtil:: RenderVisitor and osgUtil::IntersectVisitor. o Added osgUtil/Export into osgUtil to handle DLL's under Windows. o Modified Viewer.cpp to take account of the new osgUtil library and placement of RenderVisitor and IntersectVisitor. 7th October 2000 - osg_src-0.8-22.tar.gz o Fixed crash under Windows when activating the osg::IntersectVisitor in the scene graph viewer sgv. Bug appears to be an MS Visual C++ bug when using a std::multiset iterator and combining std::map and std::multiset. Replacing the later by a std::vector has curred the problem, but also required an explicit sort on the vector in osg::IteratorVisitor::intersect() to achieve the desired functionality. o Fixed the use of gluUnproject() in Viewer.cpp so that it properly resolved the difference in window coordinates between GLUT mouse position which origin is top left, and OpenGL which is bottom left. This fixed picking problems apparent under previous release. o Cleaned up the intersection messages and added timing code to report the length of time required for the osg::IntersectVisitor to traverse the scene. o Added '-OPT:Olimit=0' compile flag to IRIX makedefs to allow large methods, such as the osg::for_each_triangle() template function, to be optimised. o Streamlined the intersect code a little, improving performance by around 20% over previous release. 5th October 2000 - osg_src-0.8-21.tar.gz o Added support for shooting a ray through the scene in Viewer.cpp, by pressing 'i' a ray is shot from the mouse position projected onto the near and far plane into the scene reporting back the hit objects, uses the new osg::IntersectVisitor. Note, results are not 100% reliable yet, to be worked on. o Completed first iteration of osg::IntersectVisitor. Visitor allows the intersection of specified segment with the scene, reporting back node path to intersected geoset's and intersection point and object to world transformation. o Added templated function osg::for_each_triangle() to include/osg/GeoSet which allows a functor to iterated through all triangles within a osg::GeoSet. The function decomposses quads and polygons into triangles. o Added osg::Node::getParent(), getParents() and getNumParents() to osg::Node to allow public access to parent list. o Added more doc++ comments to osg::Node & osg::Object. 21st September 2000 - osg_src-0.8-20.tar.gz o Added new osg::Seg class for representing a single line segment, providing methods for intersecting with BoundingSpheres, BoundingBoxes and triangles(not implemented yet), and for transforming the segment. Typical use is for ray based intersections of the scene. o Added the beginnings of a new osg::IntersectVisitor for traversing a scene to find the intersection of attached osg::Seg's with osg::GeoSet's. osg::Seg and osg::IntersectVisitor should be completed for the next release. o Added !operator to osg::RP<> and made osg::RP<>::get() const. o Moved osg::BoundingBox from osg/Types to its own osg/BoundingBox and added default constructor which initializes it to an invalid bounding box (by setting xMaxxMax and other useful methods for accessing and updating the bounding box. Changed the internal representation from eight floats to two osg::Vec3 one each for min and max values. o Moved osg::BoundingSphere from osg/Types to its own osg/BoundingSphere and added default constructor which initializes it to an invalid bounding sphere (by setting radius<0), added isValid() method which returns true if radius is zero or positive and other useful methods for accessing and updating the bounding sphere. o Modified osg::Node so that getBound() return a reference to the internal node's BoundingSphere (which could be invalid), rather than the previous version which required the passing of BoundingSphere which was written to if there was a valid bounding box. This new implementation is more efficient (less copying of data) and more convenient to work with. o Added culling active flags into osg::RenderVisitor and Viewer.cpp, to allow view frustum and small feature culling to be switched on and off at run-time, using 'C' and 'c' to toggle each culling technique repsectively. 15th September 2000 - osg_src-0.8-19.tar.gz o Added osg::RenderVisitor::setTransparencySortMode() to allow two modes of depth sorting the transparency bin - the original implementation is set with LOOK_VECTOR_DISTANCE and new implementation OBJECT_EYE_POINT_DISTANCE. The osg::RenderVisitor::apply methods have been modified to support both modes. The later produces better results when rendering billboards such a trees. o Added osg::RenderVisitor::calcNearFar(double& near,double& far), to be called after the cull traversal, which goes through the resultant opaque and transparent binds for their depth range. Returns false if the bins are empty and near and far planes cannot be set, true on success. The near and far plane can then be used when setting OpenGL's near and far planes. The near plane is return as is and may be zero or negative and therefore will need to be clamped by the calling function if the using gluPerpsective() when setting up the OpenGL projection matrix. This clamping will not be required when use gluOrtho(). o Viewing.cpp has been modified to support the new calcNearFar method, and does the required clamping to capture invalid values. This has solved problems with Z fighting which existed before on models such as Tux_rocket.osg. o Added project file VisualStudio/libFly/libFly.dsp to support the .fly loader plug-in. Modified several of the .cpp & .h files in Loaders/fly to enable compilation under Win32 and to remove the resulting 'double to float conversion' warnings under Win32. o Improved support for plug-ins under Win32 by adding the environmental variable PATH to the search path used for located the required .dll. o Modified osg::Registry::createLibraryNameForExt so that under Win32 the when linking to the debug build of the osg library (osgd.dll) the debug build of the plug-in is also sought (for instance osg_flyd.dll). When using the release build of the osg library (osg.dll) it will default to using the release build of the plug-in (i.e. osg_fly.dll). Mixing debug and release builds under Win32 causes problems with the osg::Registry - producing two or more versions of the singleton! This is a appears to be MS linker bug as its does not resolve the symbols correctly between debug and release builds **!! o To README added example autoexect.bat extract for a helping Windows users getting up and running. 7th September 2000 - osg_src-0.8-18.tar.gz o Implemented a parent list for osg::Node to allow nodes to keep track of their parents. The links to their parents are automatically managed osg::Group::addChild() and removeChild() and destructor. o Added osg::Node::ascend(NodeVisitor&) which traverses the nodes parent list applying the node visitor to each node in turn. This is equivalent to osg::Node::traverse(NodeVisitor&), but typically won't need to be overridden like traverse() is. o Added support for parent traversal into osg::NodeVisitor so that scenes can be traversed upwards as well as the traditional top down traversal. This is useful for propagating changes of leaf and internal nodes upto their parents which enclose them. o Added osg::Node::dirtyBound() method which set the _bound_computed flag to zero so that the next osg::getBound() is forced to recompute the bounding sphere. o Added support into osg::DCS for calling dirtyBound() recursively up the nodes parent paths. This fixes the report view frustum culling bug when viewing Torus.osg. o Changed the #define is osg::Texture to enum TextureMode. o Removed the SGTEX_ prefix from osg::Texture::TextureMode's. o Removed the SGSTATE_ prefix from osg::GeoState::AttributeType and osg::GeoState::AttributeType. 4th September 2000 - osg_src-0.8-17.tar.gz o Changed osg::Sequence so it derives from osg::Group rather than osg::Switch. o Improved the support for pfSwith in the Performer converter pf2osg. o Changed osg::Node so that the node name _name is now a std::string rather than a C style char* string. This clears up a problem with osg:::Node::setName which was erronously handling the freeing of mememory. o Changed Loader/osg2pf.cpp and Viewier/Viewer.cpp inlight of the change to std::string name in osg::Node. o Fixed (again?!) compilation problem on Irix (missing osg:: in Loaders/osg2pf.) o Fixed a bug in Viewer.cpp related to loading multiple files, which resulted in sgv viewing an empty model. 3rd September 2000 - osg_src-0.8-16.tar.gz o Fixed compilation problem on Irix (missing osg:: in Loaders/osg2pf.) o Basic Implemention of small feature culling in osg::RenderVisitor, based on culling objects with small screen size projected into the viewport. o Added support for Don Burns real-time frame schedualer into sgv. To compile the viewer with Don's library RTfs use the Viewer/Makefile.rtfs which links with the appropriate libraries and define's SGV_USE_RTFS which is now used in Viewer.cpp to utilise the frame rate schedualing. o Changed osg::Light::init() so that it set the internal variables to predefined constants rather than capturing the values from the current OpenGL state as done previously. The previous versions of osg::Light needed to be constructed in a valid current context. The capturing of the current OpenGL light state can now done with a new method osg::Light::captureLightState(). o Added osg::Image::scaleImage(int s,int t,int r) which uses gluScaleImage to scale up/down the image. Useful for scaling down images for graphics cards which can not handle large images, such as the Voodoo1,2 & 3. 27th August 2000 - osg_src-0.8-15.tar.gz o Implemented osg::Switch node with similar functionality to performer, allowing all, none or a single child to be selected. o From Graeme, ostream << operator's added to osg::Vec2/3/4 and osg::Quat. o From Graeme, Added osg::Qauat::makeRot which creates a rotation Quat which will rotate vec1 to vec2. o Fixed some of the /// comments on osg::Quat so that doc++ handles it better as it doesn't seem to like multi-line usage of ///. o Fixed compilation problem on Windows with GeoSet.cpp - required the inclusion of to handle the use of FLT_MAX. 25th August 2000 - osg_src-0.8-14.tar.gz o Implemented basic view frustum in the render visitor. Performance is now pretty close to Performer on Performer town on the Onyx2. o Modified the iostream includes so that the .h versions can be included by defining OSG_USE_IO_DOT_H, or by default includes the standard C++ version without the .h. 21st August 2000 - osg_src-0.8-13.tar.gz o Removed old converter code in OSG.cpp as its is now enterirly replaced by functionality in osg::Registry and osg::DynamicLibrary. o Added support for '/' and '*' keys into sgv for altering the LOD bias. o Added support for '?' key into sgv for printing out help. o Added support for 'o' key into sgv for output scene to "saved_model.osg". o Small improvements to osg2pf, now can handle normals. o Added osg::GeoState::getMode and osg::GeoState::getAttribute() methods. o Fixed compilation problem under Irix in sgv.cpp. o Fixed compilation problems under Windows. o Added new models Data/esprit.osg and Data/paraglider.osg. o Re-exported Cow.osg, Tux.osg and Tux_rocket.osg from Performer, correcting artifacts relating to state inheritance in the previous .osg models. o Removed Loaders/osg as it was only there to illustrate how to write and reader/writer library (as loading functionalilty is is already built into libosg.so.) Loaders/fly and Loaders/vnf both serve the purpose of illustrating read/writer functionality, making Loaders/osg redundent. 17th August 2000 - osg_src-0.8-12.tar.gz o Fixed a bug with the CompileGeoSets visitor in Viewer.cpp where the visitor was not using the new traversal conventions. The bug ment that 0.8-11 would have only compiled OpenGL display list for the first child of an LOD, Switch and Sequence and leave the rest to be rendered without display lists. This fix now allows all osg::GeoSet to be visited and display lists compiled - which should improve performance on systems where display list are important. o Implemented a *very* basic view frustum culling to get a handle on the potential performance improvements. I've added the ability cull objects wholely behind the eye point. This is clearly much less powerful at culling than proper view frustum culling but is much quicker to implement. Performance improvement is _non_existant_ through to *AMAZING*. On lowly PI233 & TNT Linux box I'm now getting 5 frames a sec when viewering the whole model, through to 6-8 frames a sec looking close up to the town to 40-50 frames when looking at the out-lying farms and mountains. Full view frustum culling promises even better results! 16th August 2000 - osg_src_0.8-11.tar.gz o Completed basic LOD functionality in osg:LOD and osg::RenderVisitor. o Modified Performer to OSG converter to handle LOD's. o Added a templated function write out arrays of data to osg::Output, while enable multiple values to written out on each line, defaulting to 10 values per line. o Modified osg::GeoSet to use enabling duplicated code to be removed and the .osg file format to be more compact virtual of the multiple values values per line. o Added the ablity to chain osg::NodeVisitor's together to enable user defined traversers to be used in preferences to the standard osg::Node::traverse(). o Added a traversal mode to osg::NodeVisitor to enable osg::Node::traverse() to distingush whether to traverse all children or only those which are active such as when traversing a switch or sequence. 10th August 2000 - osg_src_0.8-10.tar.gz o Further work of the OSG to Performer converter osg2pf. Can now convert basic geometry. o Fixed the osg::Billboard::computeBound() so it accounts for the billboard positions correctly. o Fixed a memory deallocation problem in RenderVisitor which caused a serious memory leak which would eventually grind the system to a halt on big models. o Added support for a global osg::GeoState into Viewer.cpp and osg::GeoState, also add the ability to overide local state modes with the global state, or inherit the local state from the global state. This enables the sgv keys 't' and 'l' to work as would as one would expect. o Created a new method osg::GeoState::apply(GeoState* global,GeoState* prev) which takes the previously applied GeoState and then only applies the differences. This is crude step to mimic the pushState and popState in Performer's pfState class - but does achieve the lazy state updating. This just a short term step, but does give some healthy performance improvements - the old way produced a draw time of ~42ms on Performer town, with the new lazy updating of state the draw time is ~25ms (on a Onyx2 IR.) This is the about same draw time as Perfly when culling is switched off. Enabling culling in Perfly more than halves the draw time. o Modified osg::Billboard::calcTransform() & calcRotation() to do the hand coded maths calculations rather than using generic osg::Matrix operations to do it. This has cut the cull traversal down for 16ms to 12ms. Combined with the new lazy state updating frame rates on Performer town now hits 24 frames a second. o Added data access methods to osg::GeoSet and osg::Referenced. 7th August 2000 - osg_src-0.8-09.tar.gz o Added some temporary timing code to Viewer to reveal rendering bottle necks. o Modified osg::RenderVisitor so it handles osg::Billboards more efficiently by storing the inverse matrix stack in sync with the current matrix stack. o Changed Make/makedefs.linux and Make/makedefs.irix to use -O2 instead of the previous -g setting. This speeds up the cull traversal by 2-3 times. 5th August 2000 - osg_src-0.8-08.tar.gz o Fixed build problems under Windows. o Added basic support for pfLOD,pfSwitch and pfSequence into pf2osg. o Implemented osg::Switch and osg::LOD to just traverse their first child rather than all their children as osg::Group does. This is a temporary measure to get round the lack of full implementations of osg::Switch and osg::LOD. o Added osg::Sequence basic interface, core functionality remains to be implemented. 3rd August 2000 - osg_src-0.8-07.tar.gz o Added osg/FileNameUtils which is a collection of useful functions for parsing filenames. o Further work on the Performer converter pf2osg, now can load most models from the Performer distribution, including Performer town. Performance with sgv compares well with perfly on most models but Performer town is significantly slower than with perfly (5fps vs 50fps on a Onyx2 IR). It looks like the OSG current simplicistic state management needs a revamp to get performance up where it belongs... This is will be done in the near future. o Added support for flat shaded primtives into osg::GeoSet as per pfGeoSet, this was required to bring across several key peformer models such as Performer town. o Added bare bones of an OSG to Performer conversion program, osg2pf under Loaders/osg2pf. o Modified osg::Node so that it saves and loads its name if it has one. 28th July 2000 - osg-0.8-06.tar.gz o Futher work on Performer converter pf2osg. o Bug fixes to osg::GeoSet revealled by the Performer work. 26th July 2000 - osg-0.8-05.tar.gz o Added support for osg::Object sharing in the reading and writing of the .osg format. This enables a MASSIVE speed up on models which can share GeoState's. Expect order of magnitude of speed up on models such as /usr/share/Performer/data/iris.flt (from the Performer distribution and converted using the new pf2osg converter. o Added support of pfObject sharing in the Performer converter, taking advantage on the above. o Bug fixes to the writing of osg::GeoSet's to .osg files. 19th July 2000 - osg-0.8-04.tar.gz o Due to problems with integrating Performer as plug-in on Linux, have converted it to work as a conversion program - now called pf2osg and can be found in Loaders/pfb. 5th July 2000 - osg-0.8-03.tar.gz o Bugs fixes to support in osg::GeoSet for normal, colour and texture coordinate binding, and modified the .osg ascii format to reflect this. o Added glMaterialColor() to Viewer/Viewer.cpp to enable colors to be activated on osg::GeoSet's. Without it untextured models would turn only be coloured by current glMaterial rather than the current glColor. o Moved the compilation of the display lists from the init stage into the draw function, as the requests to glGenLists was failing within the Viewing::init's glContext. glDisplay lists are now created correctly with a nice improvement in speed :-) 4th July 2000 - osg-0.8-02.tar.gz o new version numbering scheme to be consistent with the RedHat scheme - ie. ProjectName-Version-Release. The current alpah release has been assigned as version 0.8, and the release number 02 reflecting this is the second release under the new scheme (alot can happen in day:-) o Support for RedHat RPM distributions has been added, and can be found in OpenSceneGraph-0.8/dist/RedHatRPM. o Further work on the Peformer loader, which can now read in pfGroup,pfDCS,pfGeode, pfGeoSet and small bit of pfGeoState/pfMaterial. o Improved the support in osg::GeoSet for normal, colour and texture coordinate binding, and modified the .osg ascii format to reflect this. o All .osg ascii files in Data were updated to reflect the new binding information. 3rd July 2000 - osg_src_20000703.tar.gz o Changed the return types for several of the operators in osg::Vec2/3/4. o Further work on osg::Billboard. o Further work on Loader/pfb. 27th June 2000 - osg_src_20000627.tar.gz o Added make snapsrc and make snapdata to the root Makefile to allow smaller source only and data only distributions. o Completed Billboard::Mode::AXIAL_ROT functionalilty which fits the case of billboarded trees, POINT_ROT_EYE and POINT_ROT_WORLD left to complete. o Removed the reference to Image library in pfb Makefile which caused the build of the Performer loader to break under linux. 26th June 2000 - osg_20000626.tar.gz o Added the Don Burns' hang gliding flight simulator database loader example into distribtion under Loader/fly. The data file used to select which components of the database to load has been added as Data/flight_park.fly. The scene can be loaded in the standard way i.e. "sgv flight_park.fly" o Created the beginings of a Performer .pfb loader. The work is ongoing, the first signs of life can be found in Loaders/pfb. o Continued work on osg::Registry related to dynamic loading of Reader/Writer plug-ins, its now works as intended! o Continued work on the new osg::Billboard class, completing the class interface and saving and loading functions. Calculation of the rotation matrix used to orientate the billboard towards the eye point is final element left to implement - coming soon! o Added support for osg::Billboard into osg::RenderVisitor. o Fixed a bug in osg::RenderVisitor::pushMatrix() relating to pre/post multiplication of matrices. o Changed the * operator in osg::Matrix to return a osg::Matrix rather than a osg::Matrix*. 20th June 2000 - osg_20000620.tar.gz o Fixed Irix compile problems related to missging std:: from use of std library strings in Loaders/Osg/osg.cpp on Irix. o Fixed crash in sgv due to Loaders/Osg/osg.cpp using the same static variable name as src/ReaderWriterOSG.cpp. o Removed temporary code (from osg_20000619) in Viewer.cpp which was used for testing loading and closing at runtime of dynamic libraries (plug-ins). 19th June 2000 - osg_20000619.tar.gz o New osg::Vec2, Vec3 and Vec4 have been written and placed in individual header files, replacing original typdef float[] versions in osg/Types. The new Vec classes now add a range maths operations with them such as multiplication, dot and cross product. o New osg::DynamicLibrary class has been written to encapsulate the loading and closing of dynamic libraries across different platforms with one consistent interface. o osg::DynamicLibrary support has been added to osg::Registry, not fully implemented yet, but will soon replace the old style dso support seen in osg/OSG.cpp. o osg::Registry, osg::RegisterReaderWriterProxy, osg::RegisterObjectProxy, have all been modified to support the removal of automatically deleted Prototypes and ReaderWriters from the Registry. Automatic deletion occurs when a dynamic library is closed - the proxies now deregister themselves when this happens ensuring that these deleted objects are never referenced. This facility enables reader/writer plug-ins to be loaded when needed then closed to free up the space again, all at run-time. o Renamed include/osg/ReferencedPointer to include/osg/Referenced to reflect the main class it defines. 6th June 20000 - osg_20000606.tar.gz o Modified the root Makefile so that it can target linux or irix compilation directly by copying the appropriate makerules/makedefs. README now reflects the simplified make. o Changed the names of Make/makedefs.sgi and Make/makedefs.sgi to Make/makedefs.irix and Make/makedefs.irix to make it more consistent and allow for sgi's new Linux boxes:-) 29th May 20000 - osg_20000529.tar.gz o Added clean up of 'so_locations' & 'ii_files' into sgi build rules. o Fixed compilation problems due to shortcomming of MicroSoft C++ 6.0 when handling static const's declared within the scope of class. Have changed to #define, less C++ but works... 28th May 20000 - osg_20000528.tar.gz o Moved the doc directory to docs to be consistent with other Open Source software projects. o Created osg::Billboard class, currently only 1/3rd complete. o Implemented the .osg ASCCII file read and write methods for osg::DCS. o Moved defines & enums which were in the osg global namespace into the classes they are associated (this has now broken the Win32 - currently investigating.) o Removed the virtual int osg::Node::classType() function as its function is better served by RTTI such as dynamic_cast<>. o Added automatic register proxy to osg::Scene so it properly registers itself with osg::Registry. o Added shell of the osg::LOD and osg::Switch classes which will be implemented fully at a later date. o Changed a cout to printf in src/Registry.cpp to fix a dumb crash under Win32 - MicroSoft still can't write decent compilers... o Modified several library class so that they use the convention of _variableName for class member variables, these classes were developed before the the above convention was adopted as standard. o Fixed bug in Geoset_osg.cpp related to GL Display Lists. o Merged file_p.cpp into file.cpp files and removed file_p.cpp exept for GeoSet_p.cpp which was kepth seperate due to its size. GeoSet_p.cpp has been renamed GeoSet_ogl.cpp to reflect its primary function. 25th May 2000 - osg_20000525.tar.gz o Changed library header files in include/osg/ from C style .h to the new Standard C++ style without suffix. For instance include/osg/Node.h has become include/osg/Node. o Moved all osg::Branch functionality to osg::Group, and removed osg::Branch. o Changes to src/*.cpp, Viewer/* and Loaders/Osg/* to account for the above header and osg::Group changs. o Fixed some inappropriate permission in the data directory. 22nd May 2000 - osg_20000522.tar.gz o Added to the FAQ. o Added more functionality to the osg::Matrix. o Incorportated makedefs.sgi fix to handle .cpp extensions. 16th May 2000 - osg_20000516.tar.gz o Added more doc++ comments to headers file. 14th May 2000 - osg_20000514.tar.gz o moved .cxx extensions to .cpp. o removed sg prefix from all library files and class as they were redudent virtue of the new osg namespace. o changed the include/OSG to include/osg to keep it consistent with library and namespace capitilization. o added osg namespace it the remaining classes which were missed the first time round! o add first iteration of the FAQ. o fixed the permission of files - many incorrectly had executable permissions. 9th May 2000 - osg_20000509.tar.gz o reduced the STL platform specific #ifdef's. o remove using namespace from all header files, so not to pollute user space. 8th May 2000 - osg_20000508.tar.gz o osg namespace implemented. 6th May 2000 - osg_20000506.tar.gz o Added CHANGES list for logging changes from version to version. o Added TODO list for list desired functionality and development activity. o Beautified the code using bcpp. 2nd May 2000 - osg_20000502.tar.gz Release first alpha version, compiles under Windows95, Linux and Irix, distribtion includes : o unix makefiles for Linux, Irix and Win32 via MS VC++6.0 workspace files. o basic GLUT based scene graph viewer - sgv. o basic Scene Graph nodes, such as sgBranch, sgGeode. o basic Drawing primitive and state containers GeoSet and GeoState. o basic Maths/Geometry classes such as sgMatrix, sgVec2/3/4. o refence counting and smart pointers via sgReferenced and sgRP<> classes. o support for automatic object registration with sgRegistry. o support for automatic reader writer plug-ins with sgReaderWriter/sgRegistry. o input parsing classes sgField,sgFieldReader. o .osg ascii file reader/writer. o .rgb/.rgba (sgi format) images reader. o automatically generated documention from header files using doc++.