Jonathan Richard wrote on Friday, June 26, 2009 3:30 PM:

> Hi, I set the color by using a fragment shader and the 32 bits
floating point
> blending seems to be working now. 
> 
> I would like to use multisampling in my FBO. How can I configure that?
Is it
> only by setting the method: 
> 
> Camera::attach(BufferComponent buffer, osg::Texture* texture, unsigned
int
> level, unsigned int face, bool mipMapGeneration, unsigned int
> multisampleSamples, unsigned int multisampleColorSamples) ?  
> 
> What is the difference between the parameter multisampleSamples and
> multisampleColorSamples? 
> 
> I tried to set both at 4 but that did not work.

I'm not an expert, but I recently dug into FBOs, so hopefully I can
help. Yes, that's the way to configure multisample FBOs.

See
http://www.opengl.org/registry/specs/NV/framebuffer_multisample_coverage
.txt for the difference between multisampleSampls and
multisampleColorSamples

How did you test that setting both to 4 didn't work? Note that the
osg::Texture will not be multisampled because the multisample
RenderBuffers are resolved during the blit to texture.

> On Tue, May 26, 2009 at 11:09 AM, Jonathan Richard
> <jonathan.richa...@gmail.com> wrote: 
> 
> 
>       Ok thank you for the advice. I'm not very familiar with the
shader
> programming yet, but I'm suppose to get into it soon. The problem that
I see
> is how to get access to the facet from the shader. If I'm into a
fragment
> shader I'll probably have no idea from which facet come each fragment.
Is it
> right? Maybe I have to use a geometry shader? Or maybe I can perform
the
> blending by myself into a fragment shader? You can tell me if you have
any
> clue about that.      
> 
> 
>       I'll give you a little more of precision about my problem. The
blending
> seems to be working when the alpha of the front facet is different
from 1.
> For exemple if I define  
> 
> 
> 
>       Rd = (2e-3,          0.0,       0.0,       1.0) // RGBA
> 
>       Rs = (6e-9,         0.0,       0.0,       0.4) //RGBA
> 
> 
> 
> 
>       In theory:
> 
> 
> 
> 
>       Rd = Rs + (1-As)Rd
> 
> 
> 
>       Rd = 6e-9 + (1-0.4)*2e-3 = 1.200006e-3
> 
> 
> 
>       In practice I get: 0.0012000059
> 
> 
> 
> 
>       For now, the problem seems to occur only when As =1.
> 
> 
> 
> 
>       Thanks,
>       Jonathan
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>       2009/5/26 J.P. Delport <jpdelp...@csir.co.za>
> 
> 
>               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(fa
lse);
>               > >
>
renderer->getSceneView(1)->getRenderStage()->setDisableFboAfterRender(fa
lse);
>               > >
>               >
>               > 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
>               > osg-users@lists.openscenegraph.org
>               >
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g
> 
>               --
>               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
>               osg-users@lists.openscenegraph.org
>
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g



-- 
Bryan Thrall
FlightSafety International
bryan.thr...@flightsafety.com
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to