[osg-users] Draw a triangle with front and back faces

Robert Osfield robert.osfield at gmail.com
Wed Mar 18 10:15:24 PDT 2009


Hi Ruqin,

I'm not going to review your code as it's pointless, it's not seeing the
wood from the trees.  Answer the question I asked, is it back face culling
that you are talking about??  In your OpenGL app did you enable/disable back
face culling?

Robert.

2009/3/18 Ruqin Zhang <ruzhang at gmail.com>

> Sorry about the confusion. Here is the openGL code that works:
>
>                     *triangle t;*
> *                    const float* pFltArrayN = t.getNormal();*
> *                    const float* pFltArray1 = t.getVert1();*
> *                    const float* pFltArray2 = t.getVert2();*
> *                    const float* pFltArray3 = t.getVert3();*
>
> *                    glNormal3fv(pFltArrayN);*
> *                    glVertex3fv(pFltArray1);*
> *                    glVertex3fv(pFltArray2);*
> *                    glVertex3fv(pFltArray3);*
> *        *
> *                    a[0] = -pFltArrayN[0];*
> *                    a[1] = -pFltArrayN[1];*
> *                    a[2] = -pFltArrayN[2];*
> *                    glNormal3fv(a);*
> *                    glVertex3fv(pFltArray3);*
> *                    glVertex3fv(pFltArray2);*
> *                    glVertex3fv(pFltArray1);*
>
> I tried to do the same thing in osg, here is my code:
>
> *osg::ref_ptr<osg::Material> material = new osg::Material();
>
> material->setEmission(osg::Material::FRONT_AND_BACK,osg::Vec4f(0.00f,0.00f,0.00f,0.00f));
> osg::ref_ptr<osg::PolygonMode> polymode = new osg::PolygonMode();
> polymode->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode::FILL);
> osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet();
>
> stateset->setAttributeAndModes(material.get(),osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
>
> stateset->setAttributeAndModes(polymode.get(),osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
>
> stateset->setMode(GL_LIGHTING,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
>
> stateset->setTextureMode(0,GL_TEXTURE_2D,osg::StateAttribute::OVERRIDE|osg::StateAttribute::OFF);
> *
>
> *for(int j = 0; j < mesh->getNumTriangles(); j ++)*
> *{*
> *        osg::DrawElementsUInt* frontTriElement = new
> osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES,0);*
> *        frontTriElement->push_back(mesh->getTri(j).getVert1Index());*
> *        frontTriElement->push_back(mesh->getTri(j).getVert2Index());*
> *        frontTriElement->push_back(mesh->getTri(j).getVert3Index());*
> *        meshGeometry->addPrimitiveSet(frontTriElement);*
> *        osg::Vec3f normalVec(mesh->getTri(j).getNormalVec3().x,
> mesh->getTri(j).getNormalVec3().y,*
> *
> mesh->getTri(j).getNormalVec3().z);*
> *        normalArray->push_back(normalVec);*
>
> *        osg::DrawElementsUInt* backTriElement = new
> osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES,0);*
> *        backTriElement->push_back(mesh->getTri(j).getVert3Index());*
> *        backTriElement->push_back(mesh->getTri(j).getVert2Index());*
> *        backTriElement->push_back(mesh->getTri(j).getVert1Index());*
> *        meshGeometry->addPrimitiveSet(backTriElement);*
> *        normalArray->push_back(-normalVec);*
> *}*
> *meshGeometry->setStateSet(stateset.get());*
> *meshGeometry->setVertexArray(vertexArray.get());*
> *meshGeometry->setNormalArray(normalArray.get());*
> *meshGeometry->setNormalBinding(osg::Geometry::BIND_PER_PRIMITIVE);*
>
> While seems this doesn't work. Any problem or mistake? Thanks a lot!
>
> Ruqin
>
>
> 2009/3/18 Robert Osfield <robert.osfield at gmail.com>
>
>> Hi Ruqin,
>>
>>
>> 2009/3/18 Ruqin Zhang <ruzhang at gmail.com>
>>
>>> Thanks Robert. Alright, here is the deal. I'm trying to draw a 3D
>>> triangular mesh with osg. For some mesh, the calculated normal points
>>> to the inside. So, I want to draw both the front and back faces, which
>>> have opposite normals. Then you can render the mesh visible.
>>> Is there an example of this? Thanks!
>>>
>>
>> Are you talking about two face lighting of back face culling here??
>> Originally your email sounded like you were talking about lighting at back
>> face culling has nothing to do with normals, but this new emails sounds like
>> you might be refering to back face culling...
>>
>> Robert.
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20090318/1e9d6b47/attachment-0003.htm>


More information about the osg-users mailing list