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

与GLSL中的texture2D()和OpenGL中的glTexImage2D()相关的内部格式,opengl,format,textures,Opengl,Format,Textures,当我使用时(注意third和third参数),我对GLSL中与texture2D()相关的内部格式和OpenGL中与glTexImage2D()相关的内部格式感到困惑: 我得到了glsl中sampler2D的nonchampedValue,但没有钳制到[0,1]: vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1); vec4 clampedvalue = texuture2D(myunsignedbytetex2d, tex

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

我得到了glsl中sampler2D的
nonchampedValue
,但没有钳制到[0,1]:

vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1);
vec4 clampedvalue = texuture2D(myunsignedbytetex2d, texcoord2);
当我使用:

glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA, 
            GL_UNSIGNED_BYTE, byteDataPtr);
我将glsl中sampler2D的
clampedvalue
钳制为[0,1]:

vec4 nonclampedvalue = texture2D(my16floattex2d, texcoord1);
vec4 clampedvalue = texuture2D(myunsignedbytetex2d, texcoord2);
所以我的问题是:

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

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

  • 由于我在OpenGL官方网站上找不到详细信息,在调用glTexImage2D()时,sampler2D纹理中会返回什么值,该纹理具有不同的内部格式以及传递给纹理的数据的不同类型(如上面提到的GL_浮点或GL_无符号字节)?所有的规则是什么

  • 有人能帮忙吗

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

    这仅受以下条件的约束:。规范化的内部格式是。。。正常化。它们不存储浮点值;它们存储解释为浮点数的整数值。最大整数值变为1.0,最小值变为0.0(如果是Snort格式,则为-1.0)

    因为我在OpenGL官方网站上找不到详细的信息

    下次再仔细看看;就在维基上。用于创建和编辑的。它甚至解释了最后三个参数:上传数据到图像

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

    这仅受以下条件的约束:。规范化的内部格式是。。。正常化。它们不存储浮点值;它们存储解释为浮点数的整数值。最大整数值变为1.0,最小值变为0.0(如果是Snort格式,则为-1.0)

    因为我在OpenGL官方网站上找不到详细的信息


    下次再仔细看看;就在维基上。用于创建和编辑的。它甚至解释了最后三个参数控制:将数据上传到图像。

    在我的程序中,似乎调用了函数:
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA16F_ARB,WINDOW_SIZE,WINDOW_SIZE,0,GL_RGBA,GL_UNSIGNED_BYTE,byteDataPtr)给我一个钳制为[0,1]的值。正如我在中所理解的,它不是在[0.0f,255.0f]之间的某个值吗?@tlh1987:这就是我将您链接到像素传输页面的原因。您给出的OpenGL值介于[0,1]之间。您说过数据是按RGBA顺序排列的,每个值都是一个无符号字节。因此,您告诉OpenGL,您的数据包含存储为规范化无符号字节的整数值。OpenGL所做的一切就是读取数据并按照您所描述的方式对其进行解释,将其存储在可以存储更大数据的纹理中。在我的程序中,似乎调用了以下函数:
    glTexImage2D(GL_texture_2D,0,GL_RGBA16F_ARB,WINDOW_SIZE,WINDOW_SIZE,0,GL_RGBA,GL_UNSIGNED_BYTE,byteDataPtr)给我一个钳制为[0,1]的值。正如我在中所理解的,它不是在[0.0f,255.0f]之间的某个值吗?@tlh1987:这就是我将您链接到像素传输页面的原因。您给出的OpenGL值介于[0,1]之间。您说过数据是按RGBA顺序排列的,每个值都是一个无符号字节。因此,您告诉OpenGL,您的数据包含存储为规范化无符号字节的整数值。OpenGL所做的只是读取数据并按照您所描述的方式进行解释,将其存储在可以存储更大数据的纹理中。
    
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA16F_ARB, WINDOW_SIZE, WINDOW_SIZE, 0, GL_RGBA,
            GL_UNSIGNED_BYTE, byteDataPtr);