Hi,
i need a little help with some lighting issues. the geometry, a roof, consists
of a drawable with one primitive (DrawElement TRIANGLES) and associated normal
vectors per vertex. the problem is, the resulting shading of the rendering is
not what i have expected.
[Image: http://www.spatiality.at/osg/roof_solid.png ]
[Image: http://www.spatiality.at/osg/roof_wire.png ]
face1 is like wanted, but face2 and face3 seem odd for me.
is this caused by a to crude mesh?
Thank you very much!
Christian
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=12161#12161
#include <osgGA/StateSetManipulator>
#include <osg/StateSet>
#include <osg/Node>
#include <osg/Group>
#include <osg/Geode>
#include <osg/Geometry>
#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
#include <osg/ShadeModel>
int main()
{
osg::Group* root = new osg::Group();
osg::Geode* polygonGeode = new osg::Geode;
osg::Geometry* polygonGeometry = new osg::Geometry;
polygonGeode->addDrawable(polygonGeometry);
root->addChild(polygonGeode);
osg::Vec3Array* polygonVertices = new osg::Vec3Array;
polygonVertices->push_back( osg::Vec3(400, 400, 0) );
polygonVertices->push_back( osg::Vec3(300, 400, 0) );
polygonVertices->push_back( osg::Vec3(300, 300, 0) );
polygonVertices->push_back( osg::Vec3(500, 300, 0) );
polygonVertices->push_back( osg::Vec3(500, 500, 0) );
polygonVertices->push_back( osg::Vec3(400, 500, 0) );
polygonVertices->push_back( osg::Vec3(300, 350, 50) );
polygonVertices->push_back( osg::Vec3(450, 350, 50) );
polygonVertices->push_back( osg::Vec3(450, 500, 50) );
polygonGeometry->setVertexArray(polygonVertices);
osg::DrawElementsUInt* polygonBase = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
polygonBase->push_back(1);
polygonBase->push_back(2);
polygonBase->push_back(6);
polygonBase->push_back(2);
polygonBase->push_back(3);
polygonBase->push_back(6);
polygonBase->push_back(6);
polygonBase->push_back(3);
polygonBase->push_back(7);
polygonBase->push_back(3);
polygonBase->push_back(4);
polygonBase->push_back(7);
polygonBase->push_back(7);
polygonBase->push_back(4);
polygonBase->push_back(8);
polygonBase->push_back(4);
polygonBase->push_back(5);
polygonBase->push_back(8);
polygonBase->push_back(5);
polygonBase->push_back(7);
polygonBase->push_back(8);
polygonBase->push_back(5);
polygonBase->push_back(0);
polygonBase->push_back(7);
polygonBase->push_back(7);
polygonBase->push_back(0);
polygonBase->push_back(6);
polygonBase->push_back(0);
polygonBase->push_back(1);
polygonBase->push_back(6);
polygonGeometry->addPrimitiveSet(polygonBase);
//osg::StateSet* stateSet = root->getOrCreateStateSet();
//osg::ShadeModel* shadeModel = new osg::ShadeModel;
//shadeModel->setMode(osg::ShadeModel::FLAT);
//stateSet->setAttribute(shadeModel);
// osg::Vec3 lightPosition(-1.0, -1.0, 2.0);
// osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource;
// lightSource->setDataVariance(osg::Object::DYNAMIC);
// lightSource->getLight()->setPosition(osg::Vec4(lightPosition, 0));
//// lightSource->getLight()->setAmbient(osg::Vec4(0.2, 0.2, 0.2, 1.0));
// lightSource->getLight()->setDiffuse(osg::Vec4(0.4, 0.4, 0.4, 1.0));
//// root->addChild(lightSource);
osg::Vec3Array* normals = new osg::Vec3Array;
polygonGeometry->setNormalArray(normals);
polygonGeometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
{ osg::Vec3 norm(-1, 0, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, 1, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, 1, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, 1, 0); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(-1, 0, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
{ osg::Vec3 norm(0, -1, 1); norm.normalize(); normals->push_back(norm); }
osgViewer::Viewer viewer;
viewer.setSceneData( root );
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.run();
}
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org