当前位置:  开发笔记 > 编程语言 > 正文

Webgl:最远的飞机能见度

如何解决《Webgl:最远的飞机能见度》经验,为你挑选了1个好方法。

好吧,我有一个非常简单的例子:只是一个三角形,其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> derhass..:

glDepthFuncis 的初始值GL_LESS,因此即使设置glClearDepthf为1.0,比较1.0 <1.0也会产生错误,因此片段将被丢弃.

你可以尝试设置glDepthFunc(GL_LEQUAL).

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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有