查看: 905|回复: 6

模型设置显示比例后灯光不正常

[复制链接]

该用户从未签到

发表于 2015-7-6 09:29:21 | 显示全部楼层 |阅读模式
不知道社区里面有没有遇到过这个问题,就是模型1:1:1显示的时候,灯光明暗都是正常的,但是一旦设置显示比例后,上表面和下表面显示就比较暗,其他的显示正常。

该用户从未签到

发表于 2015-7-6 09:59:40 | 显示全部楼层
设置比例后法线就不对了

该用户从未签到

发表于 2015-7-6 10:11:44 | 显示全部楼层
When use glScalef, if fixed rendering pipeline was used. Call glEnable(GL_RESCALE_NORMAL) to make lighting calculation correctly computed.

该用户从未签到

发表于 2015-7-6 11:54:01 | 显示全部楼层
参考 <OpenSceneGraph 快速入门指导>  2.4.5  81p

法线
只有几何体数据中设有单位长度法线时,才可以实现正确的光照。第 2.2 节
“叶节点( Geode)和几何信息”已经对法线数组的设置和绑定到 Geometry 对象
作了介绍。
在大多数 3D API 中,法线数据必须单位化以得到正确的结果。注意缩放变
换的动作会改变法线的长度。如果你的 Geometry 对象中已经包含了单位长度的
OpenSceneGraph 快速入门指导 81
法线数组,但是光照的计算结果过于明亮或过于暗淡,那么这一现象可能是缩放
变换造成的。最有效的解决方案是在 StateSet 中允许法线的重放缩模式。
osg::StateSet* state = geode->setOrCreateStateSet();
state->setMode( GL_RESCALE_NORMAL, osg::StateAttribute::ON );
与 OpenGL 中相同, 这一特性可以保证法线在均匀放缩变换时仍然保持单位
长度。如果场景中的放缩变换是非均匀的,那么你可以允许法线归一化模式,以
保证法线为单位长度。
osg::StateSet* state = geode->setOrCreateStateSet();
state->setMode( GL_NORMALIZE, osg::StateAttribute::ON );
由于要进行法线的重新放缩,归一化模式往往会耗费大量的时间。编程时要
尽量避免。

该用户从未签到

发表于 2015-7-8 17:42:38 | 显示全部楼层
法线不是单位向量导致的

该用户从未签到

发表于 2015-7-9 15:20:15 | 显示全部楼层
看帖学习中

该用户从未签到

 楼主| 发表于 2015-7-9 17:14:26 | 显示全部楼层
,谢谢大家,我来结贴,问题已经解决了。上面的几位给提供的解答是正确的,缩放后需要将法线设置允许归一模式。后面来的人看到贴子后,就可以找到正确的问题解决方法,谢谢上面的几位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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