游戏开发论坛

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

请教D3D9中的DepthOfField (景深)的计算公式~~~原理

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-4-9 00:02:00 | 显示全部楼层 |阅读模式
关于D3D中的DepthOfField 的 FX文件中的这两句:
fBlurFactor = dot(float4(vViewPosition, 1.0), vFocalPlane)*fHyperfocalDistance;
Output.Diffuse.a = fBlurFactor * fBlurFactor;
实在不明白,
谁能讲一下是什么意思, 文档上说是计算点到面的距离~~~
有这方面的详细资料推荐一下

[em3]

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-4-9 10:46:00 | 显示全部楼层

Re:请教D3D9中的DepthOfField (景深)的计算公式~~~原理

基本原理就是 首先把深度渲染到一张图上。
然后根据深度值,决定这个像素的高司模糊程度。

非常简单地。/

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-4-9 10:54:00 | 显示全部楼层

Re:请教D3D9中的DepthOfField (景深)的计算公式~~~原理

dot(float4(vViewPosition, 1.0), vFocalPlane)计算点到面的距离
////就是这样啊,还有啥疑问,线代忘记了?。。

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2007-4-9 22:53:00 | 显示全部楼层

Re: 请教D3D9中的DepthOfField (景深)的计算公式~~~原理

问题是为什么要dot之后还要乘以一个值, 然后还要平方??
[em24] [em24]

1

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2007-4-9 23:21:00 | 显示全部楼层

Re: 请教D3D9中的DepthOfField (景深)的计算公式~~~原理

给定空间中任意一点(x1,y1,z1),到指定直线Ax+By+Cz+D=0的距离公式为:
distance = Abs( A*x1 + B*y1 + C*z1 + D) / Sqrt( A*A + B*B + C*C )
显然在景深算法中,只需找到体现点到聚焦平面远近的度量标准,而不需要实际求出准确距离,因此直接采用Abs( A*x1 + B*y1 + C*z1 + D)部分,即可,而该部分就是点和平面法线向量n( A , B , C )的点积。
至于最终的深度计算公式,可取决于实际数学建模的经典公式。因此后面的系数,以及上面远近度量因子是否取平方,都无关紧要,可根据实际画面效果来调整公式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-12 22:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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