Hi Erik,
Hi Sebastian,

Thank you for your reply.

As far as what type of glowing effect I'm after, I want something similar to 
the following:
http://i.stack.imgur.com/54Z2C.png
That is, I want a shiny glowing light to emit beyond the boundaries of the 
sphere.
Ok, basically this not related to OSG directly.
One option is to render the scene to texture and run a separable blur filter on the pixels you want to "glow". The osgPPU might help here.
The use of the infamous search device might reveal other options tough.


As far as your comment about normals, I thought that was taken care of by the 
smoothing visitor. Perhaps you can help me understand this concept a little 
better...

I didn't catch the visitor, but in general should provide at least face normals. The smoothing visitor will fail with more complex geometry if you don't provide enough topological information I guess. For more complex models you should use assets out of modelling programs anyway.

Cheers
Sebastian

As an experiment, I modified my code for six different variations and took 
screen captures of each of them. The experiments were:
1) No normals set, without the smoothing visitor
2) No normals set, with the smoothing visitor
3) "Good" normals set per primitive, without the smoothing visitor
4) "Good" normals set per primitive, with the smoothing visitor
5) "Bad" normals set per primitive, without the smoothing visitor
6) "Bad" normals set per primitive, with the smoothing visitor

By "good" normals I mean that for each triangle I set the normal to be the cross product 
of the two vectors that go along two sides of the triangle, and by "bad" normals I mean 
that I always set each normal vector to (0.0f, 0.0f, 1.0f). I set the normal vectors like so:


Code:

// Create the normal array for this geometry
osg::ref_ptr < osg::Vec3Array > pNormalsArray = new osg::Vec3Array;

//
// For each triangle...
//

// Add the vertices that make up this triangle
pVertexArray->push_back(Vertex1);
pVertexArray->push_back(Vertex2);
pVertexArray->push_back(Vertex3);

// Set the normal vector for this triangle
pNormalsArray->push_back((Vertex3 - Vertex1) ^ (Vertex2 - Vertex1));

...

//
// Done with all triangle vertices and normals
//

// Set this as the geometry's vertex array
pGeometry->setVertexArray(pVertexArray);

// Set the geometry's normals array
pGeometry->setNormalArray(pNormalsArray);
pGeometry->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE_SET);

...





The results were interesting (at least to me):

1) No normals set, no smoothing: A boring, ordinary, monochrome sphere
2) No normals set, with smoothing, A good looking sphere with some shine to it
3) "Good" normals set, no smoothing: A very dark, boring, ordinary, monochrome 
sphere
4) "Good" normals set, with smoothing: A good looking sphere with some shine to 
it
5) "Bad" normals set, no smoothing: A boring, ordinary, monochrome sphere
6) "Bad" normals set, with smoothing: A good looking sphere with some shine to 
it

Screen capture images of scenarios 1 and 5 were binary identical, so the 
effects were identical.
Screen capture images of scenarios 2, 4, and 6 were binary identical, so the 
effects were identical.

This means that when using the smoothing visitor, it doesn't matter how I set 
the normal vectors, or if I even set them at all. This also means that not 
setting any normals was, in this case, equivalent to setting bogus normals 
(where each normal was set to the z-axis).

I tried using setEmission on the material but all that happened was the color 
changed.

So, how can I achieve the kind of glow effect that I want, and do I in fact 
have to set any normals or is using the smoothing visitor enough? I've attached 
the six screenshots (I have since changed the color to a dark green 0, 153, 0 
instead of red).

Thank you very much in advance!

Erik


SMesserschmidt wrote:
Hi Erik,

Do you mean glowing like non-lit but selfillumination? Then you're maybe
after the setEmission property.
If you want a glow like bloom-effect, then you'll need some image
postprocessing or texture tricks.
Maybe you can send some picture which resembles what you are trying to
achieve.
BTW: your geometry doesn't have any normals, so lighting will be wrong
in any case.


Cheers
Sebastian

Hello everyone!

I'm generating a sphere geode and I'd like to add a glowing effect in any 
variable color. I've only found one other similar topic on these forums but 
there was no answer. I imagine this must be possible, I just don't know how to 
do it. I've posted my code that creates the geode.

Any and all help is very much appreciated!


Code:

// The center of my sphere
osg::Vec3 tSphereCenter(0.0f, 0.0f, 0.0f);

// Create the geode
osg::ref_ptr < osg::Geode > pGeode = new osg::Geode;

// Create the geometry
osg::ref_ptr < osg::Geometry > pGeometry = new osg::Geometry;

// The vertex array that defines the shape of the sphere
osg::ref_ptr < osg::Vec3Array > pVertexArray = new osg::Vec3Array;

//
// Add vertices to pVertexArray using an icosahedron approach...
// How this is done is not relevant to this question...
//

// Set this as the geometry's vertex array
pGeometry->setVertexArray(pVertexArray);

// Set the primitive set
osg::ref_ptr < osg::DrawArrays > pDrawArrays = new 
osg::DrawArrays(osg::PrimitiveSet::TRIANGLES, 0, static_cast < GLsizei 
>(pVertexArray->size()));
pGeometry->addPrimitiveSet(pDrawArrays);

// Get the state set
osg::ref_ptr < osg::StateSet > pStateSet = pGeometry->getOrCreateStateSet();

// Create the material
osg::ref_ptr < osg::Material > pMaterial = new osg::Material;

// Set the sphere color to red
pMaterial->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(1.0f, 0.0f, 
0.0f, 1.0f));

// Make the sphere shiny
pMaterial->setShininess(osg::Material::FRONT_AND_BACK, 128.0f);

// Set the material on the geometry's state set
pStateSet->setAttribute(pMaterial);

// Finish up with the geometry
pStateSet->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
pGeometry->setStateSet(pStateSet);

// Add this geometry to the geode
pGeode->addDrawable(pGeometry);

// Ensure the geode is visible
pGeode->setNodeMask(0xffffffff);

// Smooth out the material
osgUtil::SmoothingVisitor sv;
pGeode->accept(sv);

// Add the geode to the scene
pSceneGroup->addChild(pGeode);




Thank you very much!

Cheers,
Erik[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=65690#65690





_______________________________________________
osg-users mailing list

http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list

http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

  ------------------
Post generated by Mail2Forum
[/img]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=65696#65696





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to