游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3645|回复: 4

单位法向量,用与不用有什么区别?

[复制链接]

4

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2011-7-4 10:16:00 | 显示全部楼层 |阅读模式
这个 glEnable(GL_NORMALIZE), 用了有什么好处,或某些地方必须用

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2011-7-4 10:42:00 | 显示全部楼层

Re:单位法向量,用与不用有什么区别?

用来计算方向的,用了后会快些。

某些地方直接用向量做旋转之类的,就必须是规格化过的。

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2011-7-4 14:53:00 | 显示全部楼层

Re:单位法向量,用与不用有什么区别?

哈,这个我知道。

开启 NORMALIZE之后,法向量的 (X平方 + Y平方 + Z平方)的平方根会强制变成1,然后XYZ会等比缩小。
这样,每个法相适量的长度都变成1了。

如果不开启 NORMALIZE会产生什么问题?
如果我手动设置 Normal为 (1.0f, 1.0f, 0.0f)的话,这个多边形渲染之后看上去会比现实中的更亮。
因为现实中的法向量应该是 (0.7f,0.7f,0.0f)才对。
再举个例子
法向量( 1.0f, 0.0f,0.0f) 和 法向量(5.0f,0.0f,0.0f) 在现实中表示的是同样的“向右”的方向性。
但是这俩在OpenGL里直接渲染的话,右边的多边形会更亮。因为它的数值用的是5.0

所以开启 NORMALIZE 就是为了让所有顶点看上去一样亮。

4

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2011-7-5 14:47:00 | 显示全部楼层

Re:单位法向量,用与不用有什么区别?

谢谢,刚试了一下,果然是这样

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2011-7-10 20:52:00 | 显示全部楼层

Re: Re:单位法向量,用与不用有什么区别?

snghun: Re:单位法向量,用与不用有什么区别?

哈,这个我知道。

开启 NORMALIZE之后,法向量的 (X平方 + Y平方 + Z平方)的平方根会强制变成1,然后X...

不尽然。
在一些图形算法中,如果需要某些量为“单位化”的话,就需要用到这个。

关于你这个亮不亮的例子,只是在处理光照时,法线与光照方向的夹角的运算,在光照向量分量确定的情况下,增大了法线的模,确实会使相乘的结果变大,表现就是变亮,而且是整个mesh都变亮,所以除了看起来变亮外似乎没有问题。
但这已经是问题了,本来就不该变亮的。如果是在其他要求更严格的算法中(如涉及到旋转)不统一的法向量会造成很大的问题。

更深入的内容,楼主应该看看高数和线性代数的基础理论。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 10:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表