游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16385|回复: 21

关于tex2D/tex2Dproj和shadowmap

[复制链接]

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-6-1 09:09:00 | 显示全部楼层 |阅读模式
tex2D/tex2Dproj到底在什么情况下才能实现深度对比?
我现在用tex2D/tex2Dproj得到的结果全都是获取像素颜色值

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-6-1 09:35:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

1、tex2D和tex2Dproj的区别在于:tex2Dproj会先将第二个参数除以它的最后一个分量。
2、要想进行深度值对比,只有先存储深度值。在生成ShadowMap时存储深度值,然后无论用tex2D还是tex2Dproj都可以得到深度值。
3、不是太清楚lz的意思,如果仅是ShadowMap问题,DXSDK里的例子应该说得很详细吧

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2009-6-1 09:50:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

根据我查阅的大量资料
只要第一个参数是指定格式的纹理
tex2D/tex2Dproj可以直接获得深度对比的结果

我现在深度纹理已经渲染出来了
问题就是如何对比深度
在PS里好像不能获取当前片断的深度值吧?
注意是深度值,不是Z值

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2009-6-1 09:51:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

DXSDK里的例子简单到让我想哭
可就是没效果

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-6-1 10:03:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

渲染场景时,当前顶点到光源的长度就是需要用到的深度,这个用来模拟点光源,如果是模拟平行光的话,直接用z

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-6-1 10:05:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

"根据我查阅的大量资料
只要第一个参数是指定格式的纹理
tex2D/tex2Dproj可以直接获得深度对比的结果"
----------------------------------------------
还有,tex2D和tex2Dproj只是用来返回纹理指定位置的信息,无法单靠一个tex2D来完成对比,必须有两个深度才能对比
不知道你说的是不是这个意思- -

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-6-1 10:06:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

还有,为了在ps中获得当前像素的深度,还需要一个特殊的"纹理变换矩阵"

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2009-6-1 10:08:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap


深度值是用于深度检测的
范围在0~1之间
hardware shadowmap用的就是这样的纹理
如果直接用Z的话就有个很严重的问题了
Z值至少是32位浮点数
纹理每个通道只有8位
Alpha通道经常无法使用
那就只有24位了
如何容纳32位的浮点是个非常头痛的问题
也不可能因为这个而使用浮点纹理,X1950渲染4个1024*1024的16位浮点纹理都会慢如牛车

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2009-6-1 10:09:00 | 显示全部楼层

Re: Re:关于tex2D/tex2Dproj和shadowmap

biggerwoo: Re:关于tex2D/tex2Dproj和shadowmap

"根据我查阅的大量资料
只要第一个参数是指定格式的纹理
tex2D/tex2Dproj可以直接获得深度对比的结果...

是可以的……

7

主题

78

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2009-6-1 10:11:00 | 显示全部楼层

Re:关于tex2D/tex2Dproj和shadowmap

float fTexOffs = 0.5 + (0.5 / (float)ShadowMap_SIZE);
D3DXMATRIX matTexAdj( 0.5f,    0.0f,        0.0f,        0.0f,
                      0.0f,    -0.5f,        0.0f,        0.0f,
                      0.0f,     0.0f,        1.0f,        0.0f,
                      fTexOffs, fTexOffs,  0.0f, 1.0f );

D3DXMATRIX matTexture = matLightWorldViewProj * matTexAdj;

matTexture 就算这个纹理变换矩阵,在最后的vs中,vPos = mul(inPos ,matTexture),之后在VS中计算vPos与光源的距离,用来进行深度对比就可以了
是你要的吗- -
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 04:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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