2012-03-12 30 views
0

我調查的碰撞檢測的一個簡單的遊戲,我正在開發一種可能的方法,但我現在不卡住framebuffer-。導入PNG紋理內存,但使用C++和OpenGL

我試圖紋理加載到內存中,但沒有到幀緩衝器和使用座標,從中讀取像素(具體而言,顏色)......我可以輕鬆讀取緩衝區的內容,並得到像素座標的顏色但我無法弄清楚如何在紋理上做到這一點,甚至有可能嗎?

任何幫助/引導/什麼研究或可能的功能將非常感激。

注:我使用OpenGL 2.0

回答

2

OpenGL是不是一個圖像處理,圖像也沒有訪問庫。這是一個繪圖API,因此它應該被處理。使用OpenGL讀回(整體)紋理是可能的(儘管不是很高效)。在OpenGL-ES上,沒有直接讀取紋理數據的方法。

你已經在一個普通的緩衝區中有整個紋理圖像?好,因爲這就是你想要的。回讀單個像素的顏色只是愚蠢的,因爲它會通過函數調用開銷堵塞CPU。

+0

我明白你在說什麼,但我並沒有說明這樣做只是在OpenGL,我說我使用OpenGL和C++中的PNG圖像加載作爲紋理 - 我不在乎我怎麼看紋理,無論是在C++還是OpenGL中,我都在尋求最好的方法,但感謝您的建議,我會銘記這一點,並嘗試考慮其他解決方案。 – trystan 2012-03-12 12:28:27

+1

@trystan:OpenGL不處理從文件加載圖像,所以無論您使用哪種方法將PNG加載到紋理中,都應該爲緩衝區提供紋理數據,因爲它也用於上載數據到OpenGL。我建議你從那裏獲取數據。 – datenwolf 2012-03-12 13:22:16

+0

@trystan那麼,就像datenwolf說的那樣,最好的方法是不使用OpenGL。只需從已有的CPU內存緩衝區中獲取像素值(因爲您已將文件中的圖像加載到CPU內存中,不是嗎?)。 – 2012-03-12 13:44:42

0

將png解碼爲常規緩衝區。 通過glGenTextures創建紋理; 通過glBindTexture綁定紋理; 通過glTexImage2D將圖像加載到紋理。

+0

我明白,但我怎麼去讀紋理的像素? glReadPixels只讀取幀緩衝區中的像素。謝謝 – trystan 2012-03-12 12:30:03

+0

@trystan:你爲什麼需要從紋理中讀取像素?你給紋理提供了它的數據;除非以後渲染到該紋理,否則它將具有相同的像素。所以如果你需要在CPU上創建紋理,那麼只需保留緩衝區。 – 2012-03-12 17:16:41

+0

我有多個紋理渲染到幀緩衝區,所以從幀緩衝區讀取是不好的,我需要從特定的紋理/圖像讀取,因爲這將用作碰撞檢測的參考,如果澄清任何東西? – trystan 2012-03-13 09:32:29