2

次のようなものを使用して、ホスト側のテクスチャを OpenGL にアップロードしています。

GLfloat * values = new [nRows * nCols];

// initialize values
for (int i = 0; i < nRows * nCols; ++i)
{
    values[i] = (i % 201 - 100) / 10.0f; // values from -10.0f .. + 10.0f
}

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, nRows, nCols, GL_LUMINANCE, GL_FLOAT, values);

しかし、glGetTexImage() を使用してテクスチャを読み戻すと、すべての値が [0..1] の範囲にクリップされていることがわかります。

まず、この動作が文書化されている場所を見つけることができません (OpenGL 2.1 用の Red Book を使用しています)。

第二に、この動作を変更して、値を変更せずに渡すことは可能ですか? GLSL シェーダーでスケーリングもクリップもされていないデータにアクセスしたいと考えています。

4

1 に答える 1

1

この動作が文書化されている場所が見つかりません

実際の仕様では、Pixel Rectangles の転送というタイトルの Pixel Rectangles に関するセクションにあります。

第二に、この動作を変更して、値を変更せずに渡すことは可能ですか?

はい。「スケーリングされていない、クランプされていない」データを使用する場合は、浮動小数点画像形式を使用する必要があります。テクスチャのフォーマットは、おそらく への呼び出しによって、そのストレージを作成したときに定義されますglTexImage2D。その関数の 3 番目のパラメーターは、形式を定義します。したがって、整数形式ではなく、適切な浮動小数点形式を使用してください。

于 2013-05-22T08:30:56.300 に答える