【问题标题】:OpenGL Depth buffer in orthographic projection正交投影中的OpenGL深度缓冲区
【发布时间】:2014-07-02 12:44:34
【问题描述】:

如果我在 OpenGL 中使用正交投影,但仍然为我的对象设置不同的 z 值,它在深度缓冲区中是否仍然可见?

我的意思是,在颜色缓冲区中,一切看起来都很简单,而且距离很远。但是在哪里他们会以不同的色调“着色”?深度缓冲区是否“理解”正交投影中的深度?

【问题讨论】:

    标签: opengl depth-buffer


    【解决方案1】:

    深度缓冲区与投影矩阵无关。简而言之,z 缓冲区会记录给定点最接近的 Z 值。随着事物的绘制,它会查看当前值。如果新值小于现有值,则接受它并更新 z 缓冲区。如果该值大于当前值之后的值,则将其丢弃。深度缓冲区与颜色无关。我认为您可能会将混合与深度测试混淆。

    例如,假设您有两个四边形 A 和 B。

    A.z = - 1.0f;

    B.z = - 2.0f;

    如果您假设两个四边形在 Z 值之外具有相同的尺寸,那么您可以看到绘制两者是多么浪费。由于四边形 A 在四边形 B 的前面,因此绘制四边形 B 是一种浪费。深度缓冲区所做的是检查 zcords。在此示例中,如果您启用了深度测试并且深度缓冲区四边形 B 将永远不会被绘制,因为深度测试会显示它被四边形 A 遮挡。

    【讨论】:

    • 那么如果一个不隐藏另一个,在深度缓冲区中,一个更亮,另一个更暗(如果将其视为灰度)?
    • @tower120 这取决于很多因素。首先,覆盖对象的 alpha 值是多少?更重要的是,什么是混合测试启用以及正在使用什么混合功能?你需要先回答这些问题,然后我才能给你答案。
    • @tower120 对不起,我想我误解了你的问题。您是在问深度缓冲区将如何出现?根本不会有混合。整个对象将是相同的“灰色阴影”。我想你要问的是物体得到什么阴影。嗯,这是基于深度缓冲区的,但通常你越近你的颜色越深,而离你越远的灰色阴影越柔和(在深度缓冲区中)。
    • 对象(简单三角形)是完全不透明的。一个对象的 z = 1,另一个 z = 2。第一个三角形在深度缓冲区中的颜色/索引是否与第二个相同?
    • 否 - 因为我们的深度组件不同。
    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多