游戏开发论坛

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

关于投影阴影的一个问题

[复制链接]

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2006-6-28 17:44:00 | 显示全部楼层 |阅读模式
[em4] [em4]投影阴影,
我使用hlsl来实现的,先从灯光的角度,render一个512x512的图

但是在计算投影贴图的时候出现一个问题,贴图确实投影在表面上了,可是贴图是阵列重复贴出来,我如何不让他重复?


还有,我投影贴图的矩阵 = 世界转换矩阵 x 灯光观察矩阵 x 灯光投影矩阵 ,按照书上所说,就可以将贴图投影在正确的位置,可是我的程序显示出来,贴图的位置不对,有可能是那里出的问题?

书上说投影贴图矩阵最后要加一个 调整矩阵,即将顶点缩放1/2,再+ 1/2,让最后顶点值都在0~1之间,可是我加了这个矩阵就是错误的结果,不加反而正确


void VertScene( float4 Pos : POSITION,
                 float2 Tex        : TEXCOORD0,
                 out float4 oPos : POSITION,
                 out float2 oTex : TEXCOORD0,
                 out float4 oTex1 : TEXCOORD1 )
{
       
        oPos = mul( Pos, g_mCamFinal );
        oPos = mul ( oPos , g_mCamProj);
       
        //oTex1 = mul( Pos , g_mLightFinal );
        oTex1 = mul( Pos , g_mLightWorld );
        oTex1 = mul( oTex1 , g_mLightView );
        oTex1 = mul( oTex1 , g_mLightProj );
        //oTex1 = mul( oTex1 , g_mLightTemp );  //调整矩阵,去掉注释,结果就是错误的
       
       

        oTex = Tex;

}
void PixScene( float2 oTex : TEXCOORD0,
                float4 oTex1 : TEXCOORD1,
                out float4 Color : COLOR )
{
        float4 col = tex2D(g_samScene, oTex);
        float4  colshadow= tex2Dproj(g_samShadow, oTex1);
       
        Color = (col + colshadow)  / 2;
}

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-28 23:29:00 | 显示全部楼层

Re:关于投影阴影的一个问题

重复贴出来是纹理寻址的问题,改成ADDRESS_CLAMP

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2006-6-29 10:47:00 | 显示全部楼层

Re:关于投影阴影的一个问题

谢谢楼上了

阴影的位置由问题,知道怎么回事么

就是貌似,贴图的右上角正好在正确的位置,可是人物的阴影在贴图的中心啊

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-29 23:25:00 | 显示全部楼层

Re:关于投影阴影的一个问题

乘加0.5是必须的,投影空间坐标-1~1要转换到纹理空间的0~1
乘加0.5是在除Projection系数w之后进行的,你在VS中做乘加操作当然不对了,自己手动在PS中先除w再?\加,然后直接tex2D就行了
另外你还需要将y坐标取反,因为投影空间的y轴和纹理空间的y轴方向是相反的,就是oTex.x/oTex.w * 0.5f + 0.5f;   oTex.y/oTex.w * -0.5f + 0.5f;

如果还是有问题的话,请检查其他地方,比如矩阵是否一致

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2006-6-30 11:49:00 | 显示全部楼层

Re:关于投影阴影的一个问题

哈哈,终于搞定了,太感谢了

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2006-6-30 11:53:00 | 显示全部楼层

Re:关于投影阴影的一个问题

自己手动除w的话,应该没有那个函数快吧?因为好像nvidia说,能用系统给的函数就用,因为系统给的函数可能会调用显卡的专用指令进行优化

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-7-1 14:37:00 | 显示全部楼层

Re:关于投影阴影的一个问题

只是一个小小的除法操作,不会影响性能的,再说这个是必须的,因为你在除之后还需要做运算才能寻址,直接用texProj是不行的,或者你也可以在VS里面除w、乘加0.5,在PS中直接寻址。这样比在PS中做同样运算的执行次数要少
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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