1

我对与 GLSL 中的 texture2D() 和 OpenGL 中的 glTexImage2D() 相关的内部格式感到困惑,当我使用时(注意thirdeighth参数):

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

我在nonclampedvalueglsl 中得到了 sampler2D ,而没有钳制到 [0, 1]:

vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1);

当我使用:

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

我将clampedvalueglsl 中的 sampler2D 夹在 [0, 1] 上:

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 中获得什么值(夹紧或不夹紧):

这仅由“内部格式”参数控制。规范化的内部格式是……规范化的。它们不存储浮点值;它们存储被解释为浮点数的数值。最大整数值变为 1.0,最小值变为 0.0(如果是 SNORM 格式,则为 -1.0)。

由于我在OpenGL官方网站上找不到详细信息

下次再仔细看看;它就在 Wiki 上。用于创建纹理渲染缓冲区“内部格式”。它甚至解释了最后三个参数控制像素传输操作:将数据上传到图像。

于 2012-04-25T20:08:21.113 回答