为什么碰撞难以在图形引擎中有效计算?
从最古老的游戏到非常现代的游戏,您似乎仍然可以在某些摄像头位置看穿墙壁或经常看到地面。 为什么碰撞难以在图形引擎中有效计算? 它是否四舍五入/失去精度积累导致错误呈现的视图?
这显然不是实际的碰撞。 在这些情况下,相机的位置可能并不实际在墙壁或地面的“内部”,但它非常接近它。
在计算机3D图形中,相机具有近平面和远平面的概念。 只有位于这两个平面之间的几何图形才可见,其余的将被剪切。 如果您靠得太近并且正确对准相机,那么几何图形的某些部分可能会与近平面所定义的相机太靠近,从而导致几何图形无法呈现。
现在,这个近平面的距离可以由开发人员设置,它可以设置得非常短 - 足够短以确保不会发生这样的情况。 然而,用于在渲染期间确定哪些对象最接近相机的深度缓冲区或z缓冲区以及由此渲染哪些对象以及哪些不渲染的对象与近平面和远平面距离密切相关。
在图形硬件中,深度缓冲区使用每个像素的固定数量的比特来表示,例如32比特。 这32位必须足够准确地表示近平面和远平面之间的整个跨度。 它也不是线性的,但会更靠近相机使用更高的精度。 因此,选择非常小的近平面距离将大大降低深度缓冲区的总体精度。 在两个物体彼此非常接近的地方,这会导致整个场景中令人讨厌的闪烁。
您可以在这里阅读有关此问题的更多信息,以及此处的第12.040节。
这不是关于难度(当然,计算非凸对象的碰撞/剪裁并不容易),但是仍然只有~33ms来计算整个帧,所以必须作出一些妥协(碰撞网格不相同)像你真正看到的网状物)。 如果没有时间进行精确的解决方案(要满足所有条件 - 相机距离,必须看到的物体,避免碰撞),则必须回落到一些“简单”解决方案,如透过墙壁看。
链接地址: http://www.djcxy.com/p/10361.html上一篇: Why is collision difficult to effectively compute in graphics engines?
下一篇: How can I detect whether a directory is writeable in Ruby