OpenGL - 特定深度的像素颜色

时间:2011-01-27 00:20:30

标签: java opengl jogl glreadpixels

从gluOrtho视角看,我在OpenGL中渲染了一个3D场景。在我的应用程序中,我正在查看体积为100x70x60mm的立方体的正面(我有1000x700x600像素)。在这个立方体内部,我渲染了一个简单的蓝色球体,它恰好位于中间并“填充”立方体(半径为300像素)。

我现在想要读取立方体内特定点的像素颜色值(3D);即我想知道点(100,100,-200)是蓝色还是空白(黑色)。

glReadPixels只允许2D提取颜色,我已尝试使用DEPTH_COMPONENT但不确定这应该以字节形式返回什么?有没有办法将两者结合起来?我错过了什么吗?

任何帮助或建议表示赞赏

干杯 添

我正在使用Eclipse和Java和JOGL。

2 个答案:

答案 0 :(得分:4)

这不能在OpenGL环境中完成 - 您需要某种场景图或其他空间分区方案,与您的应用程序的数据结构协同工作。

原因很简单:帧缓冲区仅存储每个像素位置最靠近眼睛的片段的颜色和深度(假设正常的GL_LESS深度函数)。存储在Z缓冲区中的深度值用于确定每个后续片段是否比现有片段更靠近或远离眼睛,因此新片段是否应该替换旧片段。帧缓冲区仅存储深度测试的最新获胜者的颜色和深度值,而不是映射到该像素位置的整个片段集。实际上,如果是这种情况,就无法限制所需的图形内存量。

答案 1 :(得分:1)

你不是第一个因这种误解而陷入困境的人,所以我说这是最直接的方式:OpenGL不会这样做。 OpenGL从不(!)处理对象或任何复杂场景。 OpenGL唯一知道的是帧缓冲区,着色器和单个三角形。每当您绘制一个通常由三角形组成的对象时,OpenGL一次只能看到每个三角形。一旦有什么东西被画在帧缓冲区中,之前的任何东西都会丢失。

有基于光栅化器概念的算法(如OpenGL)将渲染的场景分解为其部分,深度剥离将是其中之一。