キューブマップを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次元画像として扱われ、私はここで答えを見つけ
おかげで、しかしglGet **テクスチャを**画像は、OpenGL 4.5の機能であり、私は4.3に固執する必要があります。 – Henkk
このページには、glGetTexImageとglGetTextureImageの両方に関する情報が含まれています。 glGetTexImageも同じように機能しないのですか? – bofjas
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