我現在還在讀片段着色器像素和我有一些問題。 我知道gl_FragColor返回與vec4意義RGBA,4通道。 在那之後,我使用glReadPixels讀取FBO,它在數據gl_FragColor和glReadPixels
GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
這工作得很好,但它確實有速度問題寫。取而代之的是,我只想讀取RGB,所以忽略alpha通道。我試過了:
GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);
而不是這樣,但這並沒有工作。我想這是因爲gl_FragColor返回4個頻道,也許我應該在這之前做點什麼?實際上,因爲我返回的圖像(gl_FragColor)是灰度,我不喜歡的東西
float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);
那麼,有沒有用的,而不是使用前4個通道的方法glReadPixels任何有效的方法?任何建議?順便說一下,這是在opengl es 2.0代碼。
感謝您的回覆!我一定會盡快嘗試!但是,你能否給我更多關於屏外幀緩衝的想法或描述?我對圖形有一點新意,所以我不熟悉術語。也許鏈接教程?再次感謝! – user2168
幀緩衝區對象(FBO)基本上是您自己創建的輔助渲染目標。它可能包含一個顏色緩衝區,深度緩衝區,alpha緩衝區或任何東西。然後您可以繪製它(而不是「屏幕」,即主幀緩衝區),並以某種方式使用結果,例如作爲效果紋理,或者讀取像素(在您的情況下)。 – Kos
http://www.songho.ca/opengl/gl_fbo.html看起來像一個很好的實用教程,其中包含示例代碼(但對於OpenGL,它應該是+ - 在ES 2中是相同的)。在規範中也有一個閱讀(早些時候聯繫在一起;章節4.4.3)。 – Kos