游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2993|回复: 12

求教:怎样从VShader中输出一个3x3 matrix给PShader?

[复制链接]

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
发表于 2005-3-21 14:58:00 | 显示全部楼层 |阅读模式
怎样从VShader中输出一个3x3 matrix给PShader?不知道怎么定义VS_OUTPUT中
float3x3 matrix冒号后面的用法说明.

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-21 16:34:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

用const变量吧(全局变量).不可能为每一个pixel都传一个matrix的.

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-21 16:59:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

我明白了,确实如此.
我在实现per pixel lighting时想把查表得来的normalized的光向量从世界空间转换到tangent空间去,这就需要逐象素地传递tangentMatrix到PS中.既然不行,那有无替代的方法呢?

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-21 17:59:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

有normal,tangent,binormal三个向量,应该可以算出来的吧,具体怎么算我就不知道了,数学太差,应该能找到sample吧.

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-3-21 18:06:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

可以在vs中把lightvector和halfvector转到tangent space
然后通过texture coord或者其他的管道传给ps
如果非要在PS里来转换,那就把T,B,N分别通过texture coord传给PS
normalize以后,就可以组成一个3X3 的MATRIX,把normal乘上这个MATRIX
然后再和lightvector,halfvector计算就可以了
struct VSOUT
{
...
        float3 Normal    : TEXCOORD2;
        float3 Tangent   : TEXCOORD3;
        float3 Binormal  : TEXCOORD4;
...
};
struct PSIN
{
...
        float3 Normal    : TEXCOORD2;
        float3 Tangent   : TEXCOORD3;
        float3 Binormal  : TEXCOORD4;
...
};

in pixel shader(HLSL)

PSIN psin;

float3 T = normalize( psin.Tangent.xyz  );
float3 B = normalize( psin.Binormal  .xyz  );
float3 N = normalize( psin.Normal .xyz  );


float3 TBNormal = mul(oriNormal, float3x3(T, B, N));

此时。TBNormal 就是转换到tangent space的normal了

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-21 18:21:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

谢谢楼上,刚想说有谁能贴个sample出来就好了.

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-21 18:46:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

实验了一下代码,它说我的TEXCOORD最多只能是四个(0到3),可我还有attenuation也要用TEXCOORD呢,这可咋办?

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-21 19:07:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

显卡不行就没办法了,换一块好的显卡吧.或者用软件模拟.

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-3-21 19:28:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

你的显卡不支持ps1.4以上呢
那么就在VS里做好传过去,只需要2个vector,可以用到oD0, oD1

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-21 19:52:00 | 显示全部楼层

Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?

如果直接在VS里把tangentMatrix给求出来赋给一个global变量是不是等效于传两个vector的方法呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 21:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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