Hi,
Jonathan Richard wrote:
>
> |// Tell to sort the mesh before displaying it
> |AFAIK OSG does not sort at the triangle level, there is an option to
> make the sorting happen at a primitive level, but I think the default is
> sorting on bounding sphere.
>
> I take this line (and the comment) from the osgblendequation example.
> You think that I should not do this call?
No, the call is fine. What I'm saying is that blending and transparency
is (depending on the blend equation) dependent on the order in which
things are rendered, so one cannot assume (when making off-line
calculations) that all the geometry is perfectly sorted (think e.g.
intersecting objects).
>
> |offscreenTexture->setSourceType( GL_UNSIGNED_BYTE);
> |Should this not also be GL_FLOAT?
>
> yes sorry it is a "copy paste" error. I call
> offscreenTexture->setSourceType(GL_FLOAT) and
> offscreenTexture->setInternalFormat(GL_FLOAT_RGBA32_NV).
>
> |I can also not see from the code if OpenGL lighting is enabled. Do you
> disable lighting in your app?
>
> No I wasn't but I disable it now and I see no change in the result
OK.
I'm running out of ideas to try help. I cannot from just reading the
code see any more problems. I'd suggest using the ARB modes and trying a
few other machines. I'll also try find some of our test code for float
blending.
Another option is to use shaders to explicitly set the colours of two
facets (to eliminate any fixed function interference) and see how they
blend.
jp
>
>
> Here a update of the code with the correction in yellow:
>
>
> The colors are attached by setting the ColorArray of the drawables of
> each Geode like this:
>
>
>
> int geodesNb = m_entityVectorOfGeodeVector[0].size();
>
>
>
> osg::Geode* aGeode;
>
> int drawablesNb;
>
> osg::Drawable* aDrawable;
>
> osg::Geometry* aDrawableGeometry;
>
> osg::Vec4Array* aDrawableColor;
>
> for (int geodesLoop = 0; geodesLoop < geodesNb; geodesLoop++)
>
> {
>
> aGeode = m_entityVectorOfGeodeVector[0][geodesLoop];
>
> drawablesNb = aGeode->getNumDrawables();
>
>
>
> // Update color for each facet (drawable) of a geode
>
> for (int i = 0; i < drawablesNb; i++)
>
> {
>
> aDrawable = aGeode->getDrawable(i);
>
> aDrawable->dirtyDisplayList(); //
> Force color update on next draw
>
>
>
> aDrawableGeometry =
> dynamic_cast<osg::Geometry*>(aDrawable);
>
>
>
> aDrawableColor =
> dynamic_cast<osg::Vec4Array*>(aDrawableGeometry>getColorArray());
>
>
>
>
> std::string geodeName=aGeode->getName();
>
>
>
> if(!geodeName.compare("p1"))
>
> {
>
> // Set the facet color
> and transparency (0=invisible)
>
> (*aDrawableColor)[0] =
> m_facet1Color;
>
>
>
> …
>
> }
>
> }
>
> }
>
>
>
> Where the /entityVectorOfGeodeVector/ is the list of visible geodes that
> I maintain by using a cull callback.
>
>
>
>
>
> Here a snapshot of my code to setup the viewer and the camera.
>
>
>
> m_viewer = new osgViewer::Viewer;
>
> m_viewer->setUpViewOnSingleScreen();
>
> osg::Camera *camera = m_viewer->getCamera();
>
>
>
> osgViewer::Renderer * renderer =
> static_cast<osgViewer::Renderer*>(camera->getRenderer());
>
> // Reading back the FBO does not work when it is disabled after render
> --> set this property of the
>
> // renderStage to false.
>
> renderer->getSceneView(0)->getRenderStage()->setDisableFboAfterRender(false);
>
> renderer->getSceneView(1)->getRenderStage()->setDisableFboAfterRender(false);
>
>
>
> m_scene=new osg::Group();
>
>
>
> std::string modelName="C:\\_JO\\LTI\\SIS\\Models\\test_IR\\carre.flt";
>
>
>
> LoadModel(modelName); // call m_viewer->SetSceneData
>
>
>
> osg::StateSet* state = m_scene->getOrCreateStateSet();
>
>
>
> // Disable Lighting effects
>
> state->setMode(GL_LIGHTING, osg::StateAttribute::OVERRIDE |
> osg::StateAttribute::OFF);
>
>
>
> // Enable transparency
>
> state->setMode(GL_BLEND, osg::StateAttribute::OVERRIDE |
> osg::StateAttribute::ON);
>
> // Tell to sort the mesh before displaying it
>
> state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
>
>
>
> // Set the blend function (related to the transparency)
>
> osg::BlendFunc* selectedBlendFunction = new osg::BlendFunc();
>
> selectedBlendFunction->setDestination(GL_ONE_MINUS_SRC_ALPHA);
>
> selectedBlendFunction->setSource(GL_ONE);
>
>
>
> state->setAttribute(selectedBlendFunction, osg::StateAttribute::OVERRIDE
> | osg::StateAttribute::ON);
>
>
>
> osg::Image* offscreenImage = new osg::Image;
>
> osg::ref_ptr<osg::TextureRectangle> offscreenTexture = new
> osg::TextureRectangle;
>
>
>
> // Allocate the image
>
> offscreenImage->allocateImage(WIDTH, HEIGHT, 1, GL_RGBA, GL_FLOAT);
>
>
>
> // Set the 32 bits texture
>
> offscreenTexture->setImage(offscreenImage);
>
> offscreenTexture->setSourceFormat(GL_RGBA);
>
> offscreenTexture->setSourceType( GL_FLOAT);
>
> offscreenTexture->setTextureSize(WIDTH, HEIGHT);
>
> offscreenTexture->setInternalFormat(GL_FLOAT_RGBA32_NV);
>
>
>
> // Initialize the background
>
> camera->setClearColor(osg::Vec4f(0.0f,0.0f,0.0f,1.0f));
>
>
>
> camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
>
> camera->attach(osg::Camera::COLOR_BUFFER0,offscreenTexture.get());
>
> camera->setFinalDrawCallback(new MyCameraDrawCallback(precision));
>
>
>
> m_viewer->realize();
>
>
>
> // Set the colors R G
> B A
>
> m_facet1Color = osg::Vec4( 0.2, 0.0, 0.0,
> 1.0 );
>
> m_facet2Color = osg::Vec4( 0, 0.1, 0.0,
> 1.0 );
>
> m_facet3Color = osg::Vec4( 4e-6, 0.0, 0.1,
> 1.0 );
>
> m_facet4Color = osg::Vec4( 5e-5, 0.5, 0.5,
> 1.0 );
>
> m_facet5Color = osg::Vec4( 6e-9, 0.1, 0.0, 1);
>
>
>
> …
>
>
>
> // Code of my camera Drawcallback
>
> void MyCameraDrawCallback::operator() (osg::RenderInfo& renderInfo) const
>
> {
>
> glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
>
> m_image->readPixels(0,0,WIDTH,HEIGHT, GL_RGBA,GL_FLOAT);
>
> }
>
>
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
--
This message is subject to the CSIR's copyright terms and conditions, e-mail
legal notice, and implemented Open Document Format (ODF) standard.
The full disclaimer details can be found at
http://www.csir.co.za/disclaimer.html.
This message has been scanned for viruses and dangerous content by MailScanner,
and is believed to be clean. MailScanner thanks Transtec Computers for their
support.
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org