Overview

The Orihalcon framework is an OpenSceneGraph based applications, plug-ins and libraries for practical real-time visualization development.

It contains a graphical scene graph editor, wrapper classes for rapid development, and also useful toolkits which give more features to OpenSceneGraph such as integration with wxWidgets, intuitive viewer and so on.

Author

Toshiyuki Takahei (takahei<at>orihalcon.jp)

Platform

Windows 2000/XP

Licence

Lesser General Public Licence (LGPL)

Download

Source and Windows binary (from sourceforge.net)

Usage

osgDirector

Overview

osgDirector is wxWidgets based graphical scene graph editor. It shows many features of OpenSceneGraph and Orihalcon framework via its GUI interface. So its source code is a very good example of an actual application using them.

The osgDirector's 3d viewer is OpenSceneGraph's native osgProducer viewer. So you can navigate the scene in the familiar way (hit 'h' key for help). In this viewer, you can seek to a point (smooth change of view center, like OpenInventor's Examiner Viewer) by left click with control key. You'll also find this smooth view transition in viewpoint based navigation in [Viewpoint] menu. You can also select a node by left click with shift key.

The osgDirector's scene graph tree shows your scene graph structure, and its property editor describes in detail. You can edit the scene graph with [Edit] menu or context menu (right click in the scene graph tree), and edit properties of each node in the property editor.

I named it 'osgDirector' instead of 'osgDesigner' because it will become a contents authoring tool and runtime environment. Currently the osgDirector controls only a view animation, but in the future it will control all property value animations. Further more I'll integrate a script editor/debugger with the osgDirector for interactive contents development.

Screenshots

screen shot

Limitations

The osgDirector's property editor is still in the early stage, so it can't handle complex types such as nesting containers.

Currently you can't add or remove array property with the editor. It can't list up the non enumeration type indexed properties like StateSet's modeList.

Some OpenSceneGraph nodes and object require unique way to construct. For example you can't load texture image via property editing.

Property editor needs much more get/set methods (for properties) in OpenSceneGraph library.

Anyway, the property editor of osgDirector is a good start point of discussion about these topics.

Known Bugs

When you select nothing in the scene, focusing the scene tree widget causes a selection of the root node.

Libraries

orh (include/orh/, lib/orh.lib)

Orh(ORiHalcon) library is a core library of the Orihalcon framework. Currently it provides some manager classes which wrap the OpenSceneGraph and its osgProducer for easy access and additional state management.

I designed the orh library to extend the OpenSceneGraph in its style. For example, it uses familiar osgProducer::Viewer and its default manipulator classes to implement its viewer, then extends its usability in non-intrusive way.

orh::ViewManager
ViewManager provides view and projection matrix, camera manipulators, stereo settings and other view related functions. It also provides a seeking action control in the viewer.
ex. orh::ViewManager::instance()->setViewer(&viewer); // That's all for seeking!
orh::ProducerManager
ProducerManager wraps many osgProducer classes and functions in a single class, and it provides store/restore mechanism of its inner states for persistence.
When you use this class, give the osgProducer::Viewer pointer to it, then set the scene by setSceneData() method instead of the same name function in the viewer.
orh::SelectionManager
SelectionManager keeps which node you selected, and highlight it by its inner orh::SelectionDecorator. You can change the selection appearance by the decorator, and you can use your own decorator.
ex. orh::SelectionManager::instance()->setViewer(&viewer); // That's all for selection!
orh::PostFXManager
PostFXManager hooks a post draw callback to the viewer, then applies its registered callbacks as post effects. You can enumerate the registered effects, and store/restore all settings of them via this class.
orh::FaderEffect and orh::MotionBlurEffect are examples of the post effects.
orh::ViewpointManager
orh::Viewpoint represents a view point states such as position, orientation and distance form the center. ViewpointManager manages the orh::Viewpoint instances.
You can use these view points with the orh::ViewManager class.
orh::AnimationPathCtrlManip
AnimationPathCtrlManip is inherited from osgGA::AnimationPathManipulator class. It provides some functions for replay control such as play, pause, etc.
orh::SceneEditManager
SceneEditManager provides some helper functions for developing scene graph editor like the osgDirector.
orh::ReflectorManager
ReflectorManager scans library folder to find osg wrapper libraries, then load and keep them during its life time.

wxOsg (include/wxOsg/, lib/wxOsg.lib)

wxOsg library is a collection of reusable wxWidgets' widget components to use with the OpenSceneGraph. It does not depend on the orh library.

wxOsgTreeCtrl
wxOsgTreeCtrl is inherited from wxTreeCtrl class. It parses a scene graph using wxOsgSceneTreeVisitor (or your own replacement) and displays it as a tree.
wxOsgPropGrid
wxOsgPropGrid is a property editor widget class based on wxPropertyGrid. It parses a given osg::Referenced pointer with osgIntrospection library.
wxOsgMatrix
wxOsgMatrix is a matrix editor dialog for a osg::Matrix value.
wxOsgMessageDialog
wxOsgMessageDialog captures std::cout and std::cerr outputs to show them in its text area. You can also select an OpenSceneGraph notify level with it.
wxOsgViewerWindow
wxOsgViewerWindow is a simple window frame used as a parent window of osgProducer::Viewer.
wxOsgOptimizeDlg
wxOsgOptimizeDlg is a dialog to ask osgUtil::Optimizer::OptimizationOptions value.

wxOrh (include/wxOrh/, lib/wxOrh.lib)

wxOrh library is a collection of wxWidgets' widget components to make a GUI front end of the orihalcon library.

Build

The Orihalcon framework is currently built with Visual Studio .NET 2003. To build the applications and libraries, open VisualStudio/OrihalconFW.sln solution file into the Visual Studio and compile it.

Dependencies

To build or use the Orihalcon framework, you have to prepare the following libraries.

OpenSceneGraph 1.0 or later with its dependent libraries.
Download the OpenSceneGraph and its dependent libraries from its official web site : http://www.openscenegraph.org/. Follow its Getting Start guide to build it, then set its include and lib path to your Visual Studio file path.
wxWidgets 2.6.1 or later
Download the latest wxWidgets library from its official web site: http://www.wxwidgets.org/.
Open %WXWIN%/include/wx/msw/setup.h into your text editor, then modify the following flags.
#define wxUSE_STD_IOSTREAM 1
#define wxUSE_GLCANVAS 1
#define wxUSE_IOSTREAMH 1
Then open %WXWIN%/build/msw/wx.dsw project file and build the library.
The current Orihalcon framework binary was built in 'Release' build option.
Add %WXWIN%/include, %WXWIN%/include/msvc and %WXWIN%/contrib/include to your Visual Studio's include file path. Add %WXWIN%/lib/vc_lib to your Visual Studio's library file path.
wxPropertyGrid 1.1.0 or later
Download the latest wxPropertyGrid from http://www.geocities.com/jmsalli/propertygrid/.
Copy all the files into the wxWidgets folder, then build %WXWIN%/contrib/build/propgrid/propgrid.dsw project with the same build option as the wxWidgets library.
If you want to rebuild the osgWrapper of the Orihalcon framework, you also need doxygen 1.4.1 or later and Marco Jez's genwrapper 1.2.

Todo

Fix the terrible memory leak in osgDirector debug build.
In debug build, osgDirector causes tons of memory leak :-(. In the development time I found a very simple program with the osgIntrospectiond.lib causes terrible memory leak, and it still happens in osgDirector. Currently I don't know any qlues to solve this problem...
Improve the property editing
Using the current version of osgDirector you'll find many limitations in property editing. Anyway, the property based scene editing in OpenSceneGraph just started. Any ideas, discussions and contributions are welcome.
Porting to other platforms.
The current Orihalcon framework is tested in Windows and VS.NET2003 environment only. It may work in VS.NET2002 and VS6.0, but not tried yet.
wxWidgets and wxPropertyGrid are portable, so it may work in Linux and Macintosh environment.

Future Plans

  • AnimationPath controler not only for view but also any MatrixTransform nodes.
  • Animation control of any value type based on osgIntrospection.
  • Distortion rendering for curved screen projection.
  • Specialized nodes such as grid frame node, annotaton marker node, and so on.
  • Lua binding of OpenSceneGraph based on osgIntrospection.
  • Lua script editor and debugger based on wxLua.
  • Interactive manipulators and draggers like OpenInventor.
  • Macromedia Flash rendering in 3D scene based of gameswf library.
  • ActiveX and web browser plug-in wrappers of Orihalcon framework run-time environment.
  • 3D widgets based on osgWidgets or CEGUI library.
  • Movie texture based on QuicktimeSDK (porting) and DirectShow (based on my GLStereoPlayer).
  • Input remapping of shortcut keys, mouse buttons and joysticks.
  • Graphical osgarchive tool for contents packaging.
  • Minimum application framework.
  • etc...

Change Log

  • 005/12/12 Orihalcon framework version 0.1.0, the first public release.