|
本帖最后由 superwavelet 于 2014-3-5 13:10 编辑
- // X坐标向右; Y 坐标向里, Z 坐标向上
- //在原点画一个正方形:
- recPlane = drawRectangle(osg::Vec3(-3,0,3), osg::Vec3(3,0,3), osg::Vec3(3,0,-3), osg::Vec3(-3,0,-3),osg::StateAttribute::ON);
- quadNormal->push_back(osg::Vec3(0.f, -1.0f, 0.0f));//设定法向量向外
- //加上两个光源并启用双面光照
- osg::Node* light0 = createLightSource(0, osg::Vec3(0.0f,-3.0f,0.0f), osg::Vec4(1.0f,1.0f,1.0f,1.0f) );
- osg::Node* light1 = createLightSource(1, osg::Vec3(0.0f,3.0f,0.0f), osg::Vec4(1.0f,1.0f,1.0f,1.0f) );
- osg::ref_ptr<osg::LightModel> lightModel = new osg::LightModel;
- lightModel->setTwoSided(true);
- recPlane->getOrCreateStateSet()->setAttributeAndModes( lightModel.get() );
复制代码
但是这样显示是几乎黑色的. 我要把平面转到几乎平行于水平面才看到平面的下面被照亮.
我猜测是法向量的问题, 于是把法向量改为 osg::Vec3(0.f, -1.0f, 0.0f) 这样就前后面都可以被照亮了.
但是问题是, 我的两个point lights 是放在正方形前后的. 法向量应该设置向外才会被照亮. 但是为何改为相反的方向才正常照亮?很奇怪啊?
|
|