OpenGL纹理夹紧

时间:2017-04-13 14:36:24

标签: opengl

我已经阅读glTeximage2D上的documentation并且有点困惑,在这种情况下,OpenGL会将纹理值钳制到[0,1]。我在纹理中使用GL_RED作为格式,文档说:

  

format 确定数据中每个元素的组成。它可以   假设其中一个符号值:

     

GL_RED 每个元素都是一个红色组件。 GL将其转换为浮点并通过将0连接到绿色和蓝色以及将1连接到alpha来将其组装成RGBA元素。每个组件都被钳制到[0,1]范围内。

这基本上不是说OpenGL总是会压缩值而不管内部格式如何?

然而,当我将纹理上传为:

glTexImage2D(GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_FLOAT, data);

OpenGL以GL_R16F 内部格式 来限制我的数据。但是,如果我将内部格式更改为GL_R16,它们会被限制。文档在哪里根据内部格式说明有关钳位的内容?

1 个答案:

答案 0 :(得分:1)

OpenGL Wiki about Image Format 包含有关此内容的更多信息。

  

OpenGL具有用于编写其颜色格式枚举的特定语法。它看起来像这样:

GL_[components​][size​][type​]
     
      
  • :没有类型后缀表示无符号规范化整数格式。
  •   
  • _SNORM:签名的规范化整数格式。
  •   
  • F:浮点数。因此,GL_RGBA32F是一种浮点格式,其中每个组件都是32位IEEE浮点值。
  •   
  • I:签名的整数格式。因此GL_RGBA8I给出一个有符号整数格式,其中四个分量中的每一个都是[-128, 127]范围内的整数。
  •   
  • UI:无符号整数格式。对于整数大小,值从[0, MAX_INT]开始。
  •   

与像素相关传输OpenGL Wiki about Pixel Transfer 包括那个。

  

将数据传输到图像时,像素值将转换为浮点或整数值。如果图像格式已标准化,则写入的值将被钳制为[0,1]并进行标准化。如果图像格式是整数,则逐字复制整数输入值。