2

グラフィック エンジン (遅延レンダリング) に HDR を実装しており、画像の平均輝度 (RGBA16F) を計算する必要があります。ミップマップを生成してから、最小のミップマップ (1x1) を読み取ります。

glBindTexture(GL_TEXTURE_2D, hdrTex);
glGenerateMipmap(GL_TEXTURE_2D);
glGetTexImage(GL_TEXTURE_2D, level, GL_RGBA, GL_FLOAT, data);
glBindTexture(GL_TEXTURE_2D, 0);

glm::vec3 color = glm::vec3(data[0], data[1], data[2]);
float avgLum = glm::dot(color, glm::vec3(0.2125, 0.7154, 0.0721));

(カメラを動かしたときに) data[0]、data[1]、および data[2] に 1.#QNAN が含まれることがあることに気付きました。なんで ?それを修正する方法は?

4

1 に答える 1

-2

一部の OpenGL ドライバーでは、結果が次の命令で使用可能であることを確認するためglFinish()に、 の直後に呼び出す必要があります。glGetTexImage()

そうしないと、 から初期化されていない値を読み取る競合状態が発生しますdata[]

于 2013-09-09T15:13:31.597 に答える