我对GLSL中的texture2D()和OpenGL中的glTexImage2D()相关的内部格式感到困惑,当我使用时(注意third
和eighth
参数):
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);
所以我的问题是:
当像这样调用glTexImage2D(夹紧或未夹紧)时,我将在glsl中获得什么值:
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
GL_FLOAT, floatDataPtr);
当像这样调用glTexImage2D(夹紧或未夹紧)时,我将在glsl中获得什么值:
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
GL_UNSIGNED_BYTE, byteDataPtr);
由于我在OpenGL官方网站上找不到详细信息,在sampler2D纹理中将返回什么值,具有不同的内部格式以及不同的类型(如上面提到的GL_FLOAT或GL_UNSIGNED_BYTE)调用glTexImage2D()时传递给纹理?什么是所有规则?
有人可以提供帮助吗?
答案 0 :(得分:3)
当像这样调用glTexImage2D(夹紧或未夹紧)时,我将在glsl中获得什么值:
这仅受"internal format" parameter的约束。规范化的内部格式是......标准化的。他们不存储浮点值;它们将整数值存储为解释为浮点值。最大整数值变为1.0,最小值变为0.0(如果它是SNORM格式,则为-1.0。)
我无法在OpenGL官方网站上找到详细信息
下次再努力了;它就在Wiki上。用于创建"internal format"和textures的renderbuffers。它甚至解释了最后三个参数控制pixel transfer operations:将数据上传到图像。