【问题标题】:internal format related to texture2D() in GLSL and glTexImage2D() in OpenGL与 GLSL 中的 texture2D() 和 OpenGL 中的 glTexImage2D() 相关的内部格式
【发布时间】:2012-04-25 11:49:48
【问题描述】:

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

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

我在 glsl 中得到了 sampler2D 的 nonclampedvalue ,但没有钳制到 [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 中 sampler2D 的 clampedvalue 被钳制到 [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() 时传递给纹理?所有的规则是什么?

有人可以帮忙吗?

【问题讨论】:

    标签: opengl format textures


    【解决方案1】:

    当像这样调用 glTexImage2D 时我会在 glsl 中得到什么值(钳位或不钳位):

    这仅由"internal format" parameter 管理。规范化的内部格式是……规范化的。它们不存储浮点值;他们存储 integer 值,这些值被 解释为浮点数。最大整数值变为 1.0,最小值变为 0.0(如果是 SNORM 格式,则为 -1.0)。

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

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

    【讨论】:

    • 似乎在我的程序中调用的函数:glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, byteDataPtr); 给我一个限制为 [0, 1] 的值。正如我在internal format 中了解的那样,它不是介于 [0.0f, 255.0f] 之间的某个值吗?
    • @tlh1987:这就是我将您链接到像素传输页面的原因。 您提供了 [0, 1] 之间的 OpenGL 值。您说您的数据按 RGBA 顺序排列,并且每个值都是一个无符号字节。因此,您告诉 OpenGL 您的数据包含存储为标准化无符号字节的整数值。 OpenGL 所做的只是读取您的数据并按照您的描述对其进行解释,将其存储在可以存储更大数据的纹理中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多