gpt4 book ai didi

opengl-es - Webgl:最远平面能见度

转载 作者:行者123 更新时间:2023-12-01 08:26:33 26 4
gpt4 key购买 nike

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

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 错误 2) 是 webgl/opengl 功能吗? 3) 如果它是一项功能,为什么它以这种方式工作?

最佳答案

glDepthFunc 的初始值是GL_LESS,所以即使你设置glClearDepthf到 1.0,比较 1.0 < 1.0 会产生错误,因此片段将被丢弃。

你可以尝试设置glDepthFunc(GL_LEQUAL)

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

关于opengl-es - Webgl:最远平面能见度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117758/

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