2011-01-27 62 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