内部格式与GLSL中的texture2D()和OpenGL中的glTexImage2D()相关

时间:2012-04-25 11:49:48

标签: opengl format textures

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

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

我在glsl中获得了nonclampedvalue 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);

我在glsl中得到clampedvalue 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官方网站上找不到详细信息,在sampler2D纹理中将返回什么值,具有不同的内部格式以及不同的类型(如上面提到的GL_FLOAT或GL_UNSIGNED_BYTE)调用glTexImage2D()时传递给纹理?什么是所有规则?

  4. 有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:3)

  

当像这样调用glTexImage2D(夹紧或未夹紧)时,我将在glsl中获得什么值:

这仅受"internal format" parameter的约束。规范化的内部格式是......标准化的。他们不存储浮点值;它们将整数值存储为解释为浮点值。最大整数值变为1.0,最小值变为0.0(如果它是SNORM格式,则为-1.0。)

  

我无法在OpenGL官方网站上找到详细信息

下次再努力了;它就在Wiki上。用于创建"internal format"texturesrenderbuffers。它甚至解释了最后三个参数控制pixel transfer operations:将数据上传到图像。