opengl 3.3 z-fighting 正交 2d View

标签 opengl graphics go opengl-es

我在使用 opengl 绘制简单的 2d 纹理四边形时遇到了 z fighting 的一些问题。症状是两个物体以相同的速度移动,一个在另一个上面,但周期性地一个可以看穿另一个,反之亦然 - 有点像“闪烁”。我认为这确实是 z 战斗。

我关闭了深度测试并且还有以下内容:

gl.Disable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)

我的 View 和正交矩阵如下:

我已经尝试将近距离和远距离设置得更大(比如 50000 的范围,但仍然没有帮助)

Projection := mathgl.Ortho(0.0, float32(width), float32(height), 0.0, -5.0, 5.0)




View := mathgl.LookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)

与我的 opengl 过程的唯一区别是,我不是为每个单独的对象调用 drawelements,而是将所有顶点、uvs( Sprite 图集)、平移、旋转等打包到一个大包中发送到顶点着色器。

有没有人对 2d z 战斗有补救措施?

编辑:

我正在添加一些图片来进一步描述场景:

img1

img2

这些图像彼此相隔几秒钟拍摄。它们只是从左向右移动的纹理。当他们移动时;你从图像中看到,一个 Sprite 快速地重叠另一个 Sprite ,反之亦然。

另请注意,我的图像( Sprite )是具有透明背景的 png。

最佳答案

如果您如代码片段所示禁用了深度测试,那绝对不是深度战斗。

“我将所有顶点、uvs( Sprite 图集)、平移、旋转等打包到一个大包中发送到顶点着色器。” - 您需要查看添加 Sprite 的顺序。也许由于某种原因它不一致。

关于opengl 3.3 z-fighting 正交 2d View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041914/

相关文章:

opengl - 如何在openGL中划分窗口?

c++ - 如何在 C++ 中使用 QAbstractOpenGLFunctions?

c++ - SFML & OpenGL(glew) 为什么我的程序在绘制到新窗口时失败?

c++ - 窗口聚焦时 Opengl 程序不循环

python - 通过离散预滤波消除曲线锯齿

c# - 如何使用一些多边形裁剪算法找到多边形的总面积和质心?

java - 添加java 2d组件后如何刷新JFrame

select - 选择{}是做什么的?

xml - Golang xml.Unmarshal 任意元素

json - 在 golang 中将结构与其 json 逻辑分开?