查看: 1057|回复: 1

为什么反正设定 法向量 才得到正确的光照效果?

[复制链接]

该用户从未签到

发表于 2014-3-5 09:46:34 | 显示全部楼层 |阅读模式
本帖最后由 superwavelet 于 2014-3-5 13:10 编辑
  1. // X坐标向右; Y 坐标向里, Z 坐标向上
  2. //在原点画一个正方形:
  3. 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);
  4. quadNormal->push_back(osg::Vec3(0.f, -1.0f, 0.0f));//设定法向量向外
  5. //加上两个光源并启用双面光照
  6. osg::Node* light0 = createLightSource(0, osg::Vec3(0.0f,-3.0f,0.0f), osg::Vec4(1.0f,1.0f,1.0f,1.0f) );
  7. osg::Node* light1 = createLightSource(1, osg::Vec3(0.0f,3.0f,0.0f), osg::Vec4(1.0f,1.0f,1.0f,1.0f) );
  8. osg::ref_ptr<osg::LightModel> lightModel = new osg::LightModel;
  9. lightModel->setTwoSided(true);
  10. recPlane->getOrCreateStateSet()->setAttributeAndModes( lightModel.get() );
复制代码


但是这样显示是几乎黑色的. 我要把平面转到几乎平行于水平面才看到平面的下面被照亮.

我猜测是法向量的问题, 于是把法向量改为 osg::Vec3(0.f, -1.0f, 0.0f) 这样就前后面都可以被照亮了.

但是问题是, 我的两个point lights 是放在正方形前后的. 法向量应该设置向外才会被照亮. 但是为何改为相反的方向才正常照亮?很奇怪啊?

该用户从未签到

发表于 2015-11-10 21:29:30 | 显示全部楼层
你好,我也遇到了这个问题,请问是什么原因呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表