游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3569|回复: 15

怎么把深度值转换为距离?

[复制链接]

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2008-11-17 23:10:00 | 显示全部楼层 |阅读模式
实现shadowmap的时候不可能直接在shader里获取到当前点到光源的距离吧?
深度值和距离应该有个通用换算公式吧?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-11-18 09:44:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

不需要一定是depth的深度值,那样反而需要多余的计算进行转换。可以直接写入视空间或投影空间的Z值。只要都转换到同一坐标系就能比较,并不一定必须是物理距离值。

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-11-18 10:25:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

shadowmap用的深度贴图里的值是深度值
但是在shader里能获取当前点到光源的深度吗?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-11-18 12:13:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

能啊,用绘制shadowmap时的worldviewprojection矩阵变换一下就是了。取决于你用的深度值的坐标系,这个矩阵会有点差别

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-11-20 14:04:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

求实例
我在网上搜了半天
毛都没找到一根orz

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-11-20 16:04:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

你绘制shadowmap时用的worldview矩阵,作用不就是从世界坐标变换到以光源为相机的视坐标系么,这时的Z值不就是点到光源的距离么。

然后在使用shadowmap绘制场景时,用之前的那个worldview矩阵把每个点再变换一下,不就得到相同的距离值了么,然后和shadowmap里的值比较就行了

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-2 20:39:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

worldview就是state.matrix.mvp吧?
我现在用state.matrix.mvp变换之后
得出的z值非常奇怪
虽然肯定和深度或者距离有关
但是和深度值或者距离值差得太多了orz

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-12-2 20:56:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

用D3DXVec3Unproject把它转换到视坐标系或世界坐标系再算距离就好算了

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-2 21:10:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

我用的是opengl...........

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-12-2 21:21:00 | 显示全部楼层

Re:怎么把深度值转换为距离?

那可以用gluUnProject,是类似的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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