OpenGL-特定深度的像素颜色

问题描述 投票:0回答:2

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

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

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

我在Java和JOGL中使用Eclipse。

java opengl jogl glreadpixels
2个回答
1
投票

您不是第一个因这种误解而堕落的人,所以我说这是最直截了当的方法:OpenGL不能那样工作。 OpenGL never(!)处理对象或任何复杂的场景。 OpenGL唯一了解的是帧缓冲区,着色器和单个三角形。每当您绘制通常由三角形组成的对象时,OpenGL一次只会看到每个三角形。一旦将某些内容提取到帧缓冲区中,之前丢失的内容都会丢失。

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


4
投票

这在OpenGL上下文中无法完成-您将需要某种场景图或其他空间分区方案,以与应用程序的数据结构协同工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.