游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1774|回复: 4

请教怎么把shadow map的深度转到[0,1]

[复制链接]

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2010-6-11 03:35:00 | 显示全部楼层 |阅读模式
总是全白。貌似z不在[0,1]啊。用z/w也不行。另外投影到平面后z的范围是多少?数学不好…… [em24]

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2010-6-11 04:41:00 | 显示全部楼层

Re:请教怎么把shadow map的深度转到[0,1]


D3DXVECTOR3 out;
D3DXMATRIX worldMatrix,matView,matProj,worldviewproj;
Graphic::device->GetTransform(D3DTS_VIEW, &matView);
Graphic::device->GetTransform(D3DTS_PROJECTION, &matProj);
D3DXMatrixIdentity(&worldMatrix);
D3DXMatrixTranslation(&worldMatrix,200.0f,0.0f,-500.0f);
worldviewproj=worldMatrix*matView*matProj;
D3DXVec3TransformCoord(&out,&D3DXVECTOR3(0,10,0),&worldviewproj);
z在[0,1]间,
转到shader里用mul变换z竟然在100外,太诡异了。

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2010-6-11 09:49:00 | 显示全部楼层

Re:请教怎么把shadow map的深度转到[0,1]

你是怎么传到shader的?有没有用effect?

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2010-6-11 23:18:00 | 显示全部楼层

Re: 请教怎么把shadow map的深度转到[0,1]

谢谢回复。

就是把mat=WorldMatrix*viewMatrix*projMatrix传入shader啊。

然后在shader里mul(IN.vPos,mat)
后来看了下准确的说 z/w全部在0.9-1之间,是正常的,因为z/w = a+ b/z , a =f/(f-n) =1, b=nf/(f-n)=-1。所以z/w= 1-1/z,z一般都在100之外,所以z/w很难看出区别。可不可以除以一个数把z散开一些?

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2010-6-12 08:21:00 | 显示全部楼层

Re:请教怎么把shadow map的深度转到[0,1]

请注意shader中mul的矩阵是行矩阵还是列矩阵

Performs matrix multiplication between x and y. If x is a vector, it treated as a row vector. If y is a vector, it is treated as a column vector. The inner dimension x-columns and y-rows must be equal. The result has the dimension x-rows x y-columns.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 15:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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