作者NDark (溺於黑暗)
看板GameDesign
标题Re: [程式] 请教DirectX 後面的墙壁会透过去
时间Wed Dec 23 18:55:44 2009
※ 引述《chchwy (mat)》之铭言:
: 自问自答
: 虽然我不知道为什麽 不过这个问题跟near plane有关
: 似乎near plane太小 Z-Buffer就会失效
: 我自己实验near plane的距离
: 0.5 => Z-Buffer有开等於没开
: 1.0 => 状况大有改善,只剩墙壁边缘一小块有问题
: 1.5 => 问题完全消失
: 问题是解决了...不过为什麽 就有待高人指点了orz..
其实是z buffer解析度的问题.
想像成从near plane到far plane被分成固定的解析度0 ~ 1.0 (可以先想像它分成256段)
(其实靠近near plane的地方分到的解析度比较多)
当near与far相对於物体极端的大的时候.(也就是近的太近,远的太远)
(这是新手常犯的错误,以为range设大一点可以涵盖比较多)
物体的前後的深度就因为浮点数精度的关系被视为相等,(被放在256段里面的同一段)
会发生後面的三角面反比前面的三角面来的前面的错误结果.
通常会造成物体的闪烁(一下後面的三角面跳到前面,一下又躲回去)
(通常是多层正面的物体)
正确的做法之一是分析场景中的所有物体,适当的给予正确的near与far.
让所有的物体暨可以都看得见,又同时共享最大的深度资源.
正确的做法之二是使用z-bias这个功能,确保後画的比较靠近.(特殊状况会这样用)
--
"May the Balance be with U"(愿平衡与你同在)
视窗介面游戏设计教学(
http://0rz.tw/V28It ),讨论,分享。欢迎来信。
视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework)
游戏工具设计(Game App. Tool Design )
电脑图学架构及研究(Computer Graphics)论文代读(含投影片制作)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.77.176
1F:推 makuro:刚好最近有碰到这块 其实有第三个无脑解法 12/23 23:38
2F:→ makuro:把z buffer开大(深)一点 16 24 32bit就看个人怎麽抉择了 12/23 23:41
3F:推 chchwy:谢谢 的确我的场景far相当大 可能因为这样才会有问题 12/26 22:52