游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1452|回复: 3

一个基本的矩阵问题

[复制链接]

7

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2008-4-7 22:23:00 | 显示全部楼层 |阅读模式
VertexShader需要完成的工作是,把光照方向(g_vecDirLight,世界坐标系)转到切线空间来。

部分代码如下:

float4x4 g_matWorld;

float4 g_vecDirEye;

struct VS_OUTPUT
{
    float3 view : TEXCOORD2;
};

VS_OUTPUT VSMain( float4 inPosOSITION, float2 inUV:TEXCOORD, float3 inNor:NORMAL, float3 inTangent : TANGENT )
{
    VS_OUTPUT output=( VS_OUTPUT ) 0;

    // omit some codes here...
       
    float3x3 matWorld2TangentSpace;
    matWorld2TangentSpace[0]=mul( inTangent, g_matWorld );
    matW orld2TangentSpace[1]=mul( cross( inTangent, inNor ), g_matWorld );
    matWorld2TangentSpace[2]=mul( inNor, g_matWorld );
       
    //原程序:
    //float3 posInWorld = normalize(mul( inPos, g_matWorld));
    //本人的程序:
    float3 posInWorld=mul( inPos, g_matWorld );
       

    float3 vecDirView=g_vecDirEye-posInWorld;
    //原程序:
    //output.view=mul( matWorld2TangentSpace, vecDirView );
    //本人的程序:
    output.view=mul( vecDirView, matWorld2TangentSpace );
       
    return output;       
}

  现在的情况是,原程序和本人的程序的显示结果差不多,也正因为结果差不多,带来了一些疑惑:

1、为什么原程序的posInWorld需要normalize?
  我认为既然posInWorld是拿来和g_vecDirEye相减的,就不能normalize

2、为什么原程序中是mul( matWorld2TangentSpace, vecDirView )而不是mul( vecDirView, matWorld2TangentSpace )?
  经过转换,matWorld2TangentSpace和vecDirView同在World坐标系中,如果是mul( vecDirView, matWorld2TangentSpace )就很容易理解,是把vecDirView转到matWorld2TangentSpace坐标系中,即转到了切线空间了。
  但这样如何解释原程序中的mul( matWorld2TangentSpace, vecDirView )?

7

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
 楼主| 发表于 2008-4-9 09:37:00 | 显示全部楼层

Re:一个基本的矩阵问题

高手帮帮忙啦~

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2008-4-9 09:59:00 | 显示全部楼层

Re:一个基本的矩阵问题

1.想不通归一化一个点有什么意义,应该不需要normalize。
2.请参照http://bbs.gameres.com/showthread.asp?threadid=108242

7

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
 楼主| 发表于 2008-4-12 13:28:00 | 显示全部楼层

Re:一个基本的矩阵问题

多谢了!明白了!

允许我用你们的两句话来总结一下吧:

"如果 matrix 在左 vector 在右,就是相当于 vector * matrix 的逆"

"向量在左边时为行向量,在右边时为列向量,两种情况的矩阵互为转置矩阵"
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 21:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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