1

GLSL の texture2D() と OpenGL の glTexImage2D() に関連する内部形式と混同しています (thirdeighthパラメータに注意してください):

glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, 
            GL_FLOAT, floatDataPtr);

nonclampedvalue[0、1]にクランプせずにglslでsampler2Dを取得しました:

vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1);

私が使用する場合:

glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, 
            GL_UNSIGNED_BYTE, byteDataPtr);

clampedvalue[0, 1] にクランプされた glsl の sampler2Dを取得しました。

vec4 clampedvalue = texuture2D(myunsignedbytetex2d, texcoord2);

だから私の質問はこれです:

  1. このようにglTexImage2Dを呼び出すと、glslでどのような値が得られますか(クランプされているか、クランプされていないか):

    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, 
           GL_FLOAT, floatDataPtr);
    
  2. このようにglTexImage2Dを呼び出すと、glslでどのような値が得られますか(クランプされているか、クランプされていないか):

    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
            GL_UNSIGNED_BYTE, byteDataPtr);
    
  3. OpenGLの公式サイトに詳しい情報が載っていないので、呼び出し時にテクスチャに渡されるデータの内部フォーマットや型(上記のGL_FLOATやGL_UNSIGNED_BYTEなど)が異なる場合、sampler2Dテクスチャでどのような値が返されるのかglTexImage2D()? すべてのルールは何ですか?

誰でも助けることができますか?

4

1 に答える 1

3

このようにglTexImage2Dを呼び出すと、glslでどのような値が得られますか(クランプされているか、クランプされていないか):

これは、 「内部形式」パラメーターによってのみ管理されます。正規化された内部形式は... 正規化されています。浮動小数点値は格納されません。float として解釈される整数値を格納します。整数値の最大値は 1.0 になり、最小値は 0.0 (SNORM 形式の場合は -1.0) になります。

OpenGLの公式サイトに詳細な情報が見つからないので

次回はもっとよく見てください。それはWikiにあります。テクスチャレンダバッファの作成に使用される「内部フォーマット」。最後の 3 つのパラメーターがピクセル転送操作を制御することも説明しています。つまり、データを画像にアップロードします。

于 2012-04-25T20:08:21.113 に答える