2016-04-27 7 views
3

キューブマップをCPUに読み込むのに問題があります。 glTexImage2Dコールでキューブマップにデータを渡すと、このデータを問題なく読み取ることができます。しかし、私がキューブマップにレンダリングするとき、キューブマップの正のx側だけが分かりやすいデータを含んでいます。それ以外は0です(初期化されていません)。OpenGLでglGetTexImageでキューブマップからCPUにデータを読み取る方法は?

レイヤードレンダリングを使用してキューブマップにレンダリングし、その後、シェーダでサンプリングしてキューブマップの内容をチェックしました。私がそこに着くのは正しいです。しかし、glGetTexImageは私がそれが思ったように動作していないようです。

により示唆されるように、私はglGetTexImageを呼び出すときに何フレームバッファがバインドされていない:www.gamedev.com

アム私はこの間違っていますか?誰かがここで間違っているかもしれない何かを手がかりにしていますか?

glGenTextures(1, &c_cubemap); 
glBindTexture(GL_TEXTURE_CUBE_MAP, c_cubemap); 

// load data ... 

auto width = positiveX->width; 
auto height = positiveX->height; 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB16F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ...); 

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_REPEAT); 

// Here, the rendering takes place. 

auto size = width * height * 3; 
auto bufferPositiveX = new float[size]; 
auto bufferNegativeX = new float[size]; 
auto bufferPositiveY = new float[size]; 
auto bufferNegativeY = new float[size]; 
auto bufferPositiveZ = new float[size]; 
auto bufferNegativeZ = new float[size]; 

glBindTexture(GL_TEXTURE_CUBE_MAP, c_cubemap); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, GL_FLOAT, bufferPositiveX); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, GL_FLOAT, bufferNegativeX); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, GL_FLOAT, bufferPositiveY); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, GL_FLOAT, bufferNegativeY); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, GL_FLOAT, bufferPositiveZ); 
glGetTexImage(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, GL_FLOAT, bufferNegativeZ); 
glBindTexture(GL_TEXTURE_CUBE_MAP, 0); 

私はNVIDIAのGeForce GTX 780で働いています。ドライバのバージョンは364.72です。 https://www.opengl.org/sdk/docs/man/html/glGetTexImage.xhtml

それは言う:glGetTextureImageは、キューブマップテクスチャオブジェクトに対して使用されている場合 」、テクスチャが6、どこの深さの3次元画像として扱われ、私はここで答えを見つけ

答えて

1

キューブマップの面が以下の表に示す順序で、画像レイヤとして注文されます:」

Layer number Cube Map Face 
0    GL_TEXTURE_CUBE_MAP_POSITIVE_X 
1    GL_TEXTURE_CUBE_MAP_NEGATIVE_X 
2    GL_TEXTURE_CUBE_MAP_POSITIVE_Y 
3    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 
4    GL_TEXTURE_CUBE_MAP_POSITIVE_Z 
5    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 
+0

おかげで、しかしglGet **テクスチャを**画像は、OpenGL 4.5の機能であり、私は4.3に固執する必要があります。 – Henkk

+1

このページには、glGetTexImageとglGetTextureImageの両方に関する情報が含まれています。 glGetTexImageも同じように機能しないのですか? – bofjas

+2

glGetTexImageでGL_TEXTURE_CUBE_MAPを使用すると、OpenGLはINVALID_ENUMエラーを生成します。 GL_TEXTURE_CUBE_MAPは、glGetTexImageのターゲットとしてサポートされていません。 GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_NEGATIVE_Xなどがあります。しかし、彼らは記述された動作を引き起こします。私はこの行動を別の場所でも再現しました。 – Henkk

関連する問題