【发布时间】:2011-06-06 12:36:31
【问题描述】:
我知道如何通过简单地首先渲染最近的平面来加速 3d 渲染。
但是我如何在 2d 模式下利用这种方法呢?我不能使用深度测试,因为它们都在同一个 z 级别。
所以我在想当我不需要渲染“下面”图层的不可见部分时是否可以加快速度。这可能吗?
请注意,我在 3d 模式下渲染,可能同时存在 3d 对象和 2d 对象。所以我不能只切换到 2d 渲染,我总是对所有东西使用 3d 坐标。而且我可以随心所欲地旋转相机,因此不能接受特定于相机的技巧。
编辑: 我尝试了 Ville 建议的方法:
(http://img815.imageshack.us/img815/7857/zfighting.png)
但正如你所见,它会导致 z-fighting。
我用来渲染的代码在这里:
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_POLYGON_OFFSET_FILL);
glColor4f(1,0,0,1);
DrawQuad(0, 0, 10, 10);
glColor4f(0,0,1,1);
DrawQuad(5, 5, 15, 15);
glDepthFunc(GL_LEQUAL);
【问题讨论】:
-
深度测试(使用默认模式 GL_LESS)即使您的所有 2d 对象都在同一个 z 水平上,仍然可以工作。像素不会更新两次。
-
@Ville,这会导致 z-fight。查看我发布的图片。
-
你说得对,我以为你的意思是 2d 对象 HUD 样式,但不明白你也打算围绕 2d 对象旋转相机。为此,我会首先像 derkyjadex 建议的那样以正交模式渲染纹理。
-
@Ville,渲染到纹理不会是矫枉过正...?我特别想找到比我使用 atm 的方法更快的方法:只是禁用深度测试。但我希望我可以优化一下,因为它确实绘制了一些永远不可见的无用像素......
标签: c++ opengl 3d rendering 2d