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

标签 c# 3d xna xna-4.0

好的,在我的 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/

相关文章:

silverlight - Windows 手机 7 : List of api-features

c# - 需要帮助将我的 XNA PC 游戏转换为 Xbox 360

c# - 启动vg dev,是什么语言?

c# - 下划线箭头 (_ => ...) 这是什么?

java GUI 3d 立方体各面着色

c# - 如何避免在应用程序处于事件状态和下载文件时阻塞屏幕?

Matlab 的 slice() 函数不能按预期工作

python - python中的3D多模态医学图像配准

c# - Asp.net-mvc : Calling Session_Start in global. asax

c# - sendgrid 中的替换问题