Webgl:最远的飞机能见度

时间:2015-12-06 13:08:44

标签: opengl-es 3d webgl

嗯,我有一个非常简单的例子:只是一个z坐标等于1的三角形(无视图或投影矩阵)。坐标是:

0.0,  0.6,  1.0
-0.5, -0.4,  1.0
0.5, -0.4,  1.0

所以三角形位于最远的平面上。 DEPTH_TEST已禁用。 三角形是可见的,因为-1 <= z <= 1。 但是当我启用DEPTH_TEST时:

gl.enable(gl.DEPTH_TEST);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

三角形不再可见。当我将所有z坐标更改为-1(因此它在最近的平面上)时,它再次变为可见。

那为什么在最远的飞机上看不到它? 1)是webgl bug 2)它是webgl / opengl功能吗? 3)如果它是一个特征,为什么它以这种方式工作?

1 个答案:

答案 0 :(得分:6)

glDepthFunc的初始值为GL_LESS,因此即使您将glClearDepthf设置为1.0,比较1.0&lt; 1.0产生错误,因此片段将被丢弃。

您可以尝试设置glDepthFunc(GL_LEQUAL)

请注意,您还应该了解浮点问题。比较确切的相等总是有问题的。即使你没有变换对象空间坐标并在顶点着色器中传递它们,z值也会从NDC范围[-1,1]变换到窗口空间范围[0,1](或者你设置为glDepthRangef)。但是,对于-1和1输入情况,这不应该是一个问题,因为中间结果应该可以精确表示而不会损失精度。