在在OpenGL GLSL和glTexImage2D()相关的Texture2D()的内部格式(in

2019-09-16 17:25发布

我很困惑,在GLSL和glTexImage2D()在OpenGL相关的Texture2D()的内部格式,当我使用(注意thirdeighth参数):

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

我得到了nonclampedvalue sampler2D在GLSL而不钳位到[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);

我得到了clampedvalue sampler2D在GLSL钳位至[0,1]:

vec4 clampedvalue = texuture2D(myunsignedbytetex2d, texcoord2);

所以我的问题是这样的:

  1. 我会得到什么样的价值在GLSL时调用glTexImage2D这样的(夹紧或不夹紧):

     glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, GL_FLOAT, floatDataPtr); 
  2. 我会得到什么样的价值在GLSL时调用glTexImage2D这样的(夹紧或不夹紧):

     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()? 什么是所有的规则?

有谁可以帮忙吗?

Answer 1:

我会得到什么样的价值在GLSL时调用glTexImage2D这样的(夹紧或不夹紧):

这只能由被统治者“内部格式”参数 。 标准化的内部格式...归。 他们不存储浮点值; 它们存储该被解释为浮点数数值。 最大整数值变成1.0和最小变为0.0(或-1.0如果它是一个SNORM格式)。

正如我无法找到在OpenGL官方网站的详细信息。

更努力在下一次; 它就在那里Wiki上。 该“内部格式”用于创建纹理和renderbuffers 。 它甚至解释说,最后三个参数控制像素传输操作 :将数据上传到图像。



文章来源: internal format related to texture2D() in GLSL and glTexImage2D() in OpenGL