gl_FragDataを介してビュースペースの位置を書き出そうとしています。
残念ながら、この値はクランプされているようです[0-1](または少なくとも私が読み返したときです)
それをクランプしない方法はありますか?
GL_RGBA16F、GL_RGBA32F などの浮動小数点テクスチャを使用するだけで、クランプされません。
http://www.opengl.org/wiki/Floating_point_and_mipmapping_and_filtering
私は(空の浮動小数点テクスチャを作成するために)使用します:
glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_FLOAT, NULL);
GL_ARB_color_buffer_float拡張機能を使用して浮動カラー バッファをセットアップできます。フラグメントは浮動小数点形式を使用して格納され、CLAMP_FRAGMENT_COLOR_ARB
スイッチを有効/無効にすることで結果をクランプ/クランプ解除できます ( を使用ClampColorARB
)。
これはテクスチャ ベースの手法ではありませんが、実際のカラー バッファを定義することに注意してください。残念ながら、このカラー バッファは通常のウィンドウ (オフスクリーン レンダリング) では表示できません。
GL_ARB_texture_float拡張機能を尊重してください。GL_ARB_color_buffer_float を使用すると、固定レンダリング パイプラインのクランプ動作を制御できます (頂点ステージとフラグメント ステージを分離します)。
ただし、カラー バッファーを定義しても、複数のカラー バッファーを持つことはできません。代わりに、浮動小数点テクスチャを使用すると、より複雑なフレーム バッファ オブジェクトをセットアップできます。
ただし、texture_float 拡張機能の次の説明に注意してください。
固定関数 GL の浮動小数点値はクランプされますか?
RESOLVED: This extension introduces texel values that can be outside [0, 1]. No clamping occurs to these values during texture filtering. For the fixed-function pipeline, the filtered texel is now clamped before it is used for texture environment blending. The ARB_color_buffer_float extension can be used to control this clamping. For the programmable pipelines, no clamping occurs.