gpt4 book ai didi

c# - 纹理/模型在远处闪烁 (3D)

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:20 25 4
gpt4 key购买 nike

好的,在我的 XNA 项目中,我添加了简单的着色器 + 模型加载代码,一切正常。我在 3Ds Max 中创建了一个非常简单的低细节模型。以 FBX 格式导出和导入 XNA。

问题是:如果我将简单的相机移到离这个模型一定距离的地方,它的一个组件就会开始闪烁。我尝试了另一个模型,也有同样的情况,一些组件开始闪烁,并且只有当我与模型保持一定距离时才会闪烁。

这种闪烁(或闪烁或..)只出现在有纹理的物体上(可能),看起来像: 在每一帧中,模型的随机部分/像素(或不那么随机)替换为模型或其组件后面的对象...:(

更新:现在我知道了——问题出在我的模型上(我检查了其他一些模型)。我不明白为什么但 Plane 对象会闪烁。也许问题不在 Plane 对象中。

enter image description here

最佳答案

这只是一个有根据的猜测,但是:您的远平面太远,或者您的近平面太近,或者两者兼而有之。

透视相机为您提供如下所示的可视区域:

View Frustum

您的 Z 缓冲区(深度缓冲区)覆盖了近平面和远平面之间的范围。典型的 Z 缓冲区可能具有 24 位精度,为您提供 224 可能的值。您的近平面和远平面相距越远,每个可能值必须涵盖的世界空间距离就越大。换句话说:您的 Z 缓冲区不太准确。

您看到的是“Z-fighting。这是 Z 缓冲区不够准确以区分两个给定像素的深度的地方。因此,您最终会得到本应被拒绝的像素,因为它们“落后于”已渲染的内容,而是绘制出来。

(或者,您的模型有一些共面或几乎共面的三角形 - 即表面靠得太近的三角形。同样的问题:Z 缓冲区中的精度不足以区分两个表面。)

如果尚未启用,您可能还希望启用背面剔除 (RasterizerState.CullCounterClockwise)。这会剔除背对相机的三角形,从而消除一种可能的 Z 冲突源。

关于c# - 纹理/模型在远处闪烁 (3D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com