游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3830|回复: 6

求世界坐标系下的法线向量。

[复制链接]

23

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2009-2-22 10:28:00 | 显示全部楼层 |阅读模式
GPU Germs Shader里面,求世界坐标系点的位置和法线向量分别为
float4 PWorld=mul(ObjectToWorld,Pobject);//ObjectToWorld为object space到world space的矩阵,Pobject为objectspace的点坐标。
float4 Nworld=mul(ObjectToWorldIT,float4(Nobject,0)).xyz;//ObjectToWorldIT为ObjectToWorld的逆矩阵。
我想问的是,为什么求点的位置的时候用的是ObjectToWorld,而求法向量的时候却用这个矩阵的逆矩阵呢?
谢谢大家了

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-2-22 10:45:00 | 显示全部楼层

Re:求世界坐标系下的法线向量。

错了呗,也可能是这个shader做的事情和你理解的完全不一样。

一般对HLSL(行矩阵)来说
worldPos = mul(objectPos, ObjectToWorld);
worldNormal = mul(objectNormal, (float3x3)ObjectToWorld);

你给的代码里用的是列矩阵乘法,但语法又不是GLSL,那么估计可能是Cg + OpenGL的配置。不过,行矩阵和列矩阵从结果上只是个矩阵转置了一下,而对正交变换的矩阵来说,矩阵的逆正好又等于矩阵的转置,所以也可能是两次逆而又等同于本身。

另一方面,求法向时不能用完整的4x4矩阵,因为法向不应该受位移变换的影响,所以取其3x3的部分是必须的,除非位移分量肯定是0。而你给代码中用的是4x4矩阵。

所以,基于这些矛盾,你对这段代码的作用和目的的理解应该是错的。

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2009-2-22 16:33:00 | 显示全部楼层

Re:求世界坐标系下的法线向量。

float4 Nworld=mul(ObjectToWorldIT,float4(Nobject,0)).xyz;//ObjectToWorldIT为ObjectToWorld的逆矩阵。
我想问的是,为什么求点的位置的时候用的是ObjectToWorld,而求法向量的时候却用这个矩阵的逆矩阵呢?
谢谢大家了
--------------------------------------
ObjectToWorldIT是逆矩阵的转置,至于为什么变换法线要使用ObjectToWorld的逆矩阵的转置可以搜索野猪曾经写的一篇推导的文章

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-2-22 23:11:00 | 显示全部楼层

Re:求世界坐标系下的法线向量。

如何变换矩阵包含非均匀的缩放,那么必须用逆转置矩阵来变换法线
图形学的书上都有讲,找来看看吧

23

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2009-2-23 19:11:00 | 显示全部楼层

Re: 求世界坐标系下的法线向量。

谢谢你们每一个人,我再去查查。呵呵

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2009-2-23 20:49:00 | 显示全部楼层

Re:求世界坐标系下的法线向量。

客气啥?不用谢。

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-16 13:17:00 | 显示全部楼层

Re:求世界坐标系下的法线向量。

可以参考Real-time rendering这本书。法向的矩阵变换跟顶点的矩阵变换是不一样的。如果顶点变换用矩阵ObjectToWorld,那么法向边换则应该用3x3的ObjectToWorld的逆矩阵。我不记得书上有没有这个公式推导了,但自己也可以试着推一下。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 03:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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