2011-01-27 71 views
0

我从gluOrtho透视图中查看了OpenGL中的3D场景。在我的应用程序中,我正在查看一个体积为100x70x60mm的立方体(我拥有1000x700x600像素)的正面。在这个立方体的内部,我已经呈现了一个简单的蓝色球体,它正好位于中间,并“填充”立方体(半径300像素)。OpenGL - 特定深度处的像素颜色

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

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

任何帮助或建议赞赏

干杯 蒂姆

我使用Eclipse Java和JOGL

+0

在opengl 3D空间中没有什么叫'像素',它没有什么。只有屏幕具有矩形像素。 – jondinham 2011-08-30 18:23:16

回答

1

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

有基于光栅化的可分解渲染的场景进去的部分,深度剥离将是他们中的一个概念(如OpenGL是)算法。

4

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

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

+0

谢谢,那就是我所害怕的。可能会尝试Java3D,因为它使用了scence图形。更多的学习要完成! – 2011-01-27 13:12:17