[osg-users] OSG and OpenGL rendering
Vican, Justin E.
jvican at draper.com
Mon Dec 3 06:31:45 PST 2007
Hi Roman,
In order to draw OpenGL code in the scene graph, you need to derive a
class from the osg::Drawable class. Overload the
osg::Drawable::drawImplementation method and have it call the
VolumeClouds::Render method. You'll have to add any instance of this
class to an osg::Geode and insert that geode into the scene graph.
To execute the VolumeClouds::Update call at the correct time during
traversal, you'll have to add an osg::NodeCallback to the geode or an
osg::Drawable::UpdateCallback to the drawable. In either case, you'll
probably have to derive from the callback class and overload a method to
make the call to VolumeClouds::Update.
Hope this helps,
Justin
-----Original Message-----
From: osg-users-bounces at lists.openscenegraph.org
[mailto:osg-users-bounces at lists.openscenegraph.org] On Behalf Of Roman
Grigoriev
Sent: Monday, December 03, 2007 9:12 AM
To: OpenSceneGraph Users
Subject: [osg-users] OSG and OpenGL rendering
Hi guys!
I try to implement Mark Harris cool clouds in osg but nowI try to use
his
code that he wrote on pure GL.
all functions worked but I haven't seen clouds in window. As you see
clouds
are not connected to root node
but I don't know how to use it. Please help me.
here is my code:
in main()
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new
osg::GraphicsContext::Traits;
traits->x = 0;
traits->y = 0;
traits->width = 1280;
traits->height = 1024;
traits->windowDecoration = false;
traits->doubleBuffer = true;
traits->sharedContext = 0;
traits->sampleBuffers = true;
traits->samples=8;
osg::ref_ptr<osg::GraphicsContext> gc =
osg::GraphicsContext::createGraphicsContext(traits.get());
camera.get()->setGraphicsContext(gc.get());
camera.get()->setViewport(new osg::Viewport(0,0, traits->width,
traits->height));
GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
camera.get()->setDrawBuffer(buffer);
camera.get()->setReadBuffer(buffer);
viewer.addSlave(camera.get(), true);
root = new osg::Group();
viewer.setSceneData(root);
if (VolumeClouds.Create(30, CloudPlaneSize / 2, CloudPlaneHeight))
return 1;
Vector3 sunvector,cameraposition;
sunvector.x=1;
sunvector.y=0;
sunvector.z=0;
cameraposition.x=0;
cameraposition.y=0;
cameraposition.z=0;
while(!viewer.done())
{
VolumeClouds.Update(sunvector * SkyRadius, cameraposition);
VolumeClouds.Render(cameraposition, sunvector * SkyRadius);
viewer.frame();
}
_______________________________________________
osg-users mailing list
osg-users at lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g
More information about the osg-users
mailing list