为什么不是由float4而不是int4或byte4组成的颜色向量?

时间:2017-07-31 13:25:15

标签: fusetools

RBG值是0-255整数,那么为什么选择float4作为矢量数据类型?

在我看来,字节将是Fuse中颜色的理想数据类型。

2 个答案:

答案 0 :(得分:1)

在某些上下文中,RGB值仅为1字节(0-255)值。常用的色彩空间很多,使用多于或少于1个字节来重复颜色(例如紧凑的8位和16位色彩空间,或每个通道使用16位甚至32位的HDR色彩空间)。在处理图像和GL纹理时,这些不仅仅是理论用途。

重要的是,每个值代表一系列值,从0,无强度到1,全强度,对于该通道。这就是使用float的原因:它是表示标准化范围的正确语义类型。它也恰好是Fuse的默认图形后端OpenGL用于表示颜色。

float具有连续值的优势,与具有离散增量的byte不同。这对插值很重要。考虑两种颜色之间的动画,具有线性渐变,改变不透明度或降低饱和度;所有这些都需要在连续的值范围内完成,例如float。

float也允许值大约为1,低于0.虽然这些值无法在最终显示中反映出来,但它们在计算过程中起作用。如果您按顺序进行多种颜色操作,则不希望过早地限制您的值。

不要担心内存带宽或存储空间等问题。实际存储的颜色值是占用内存的微小部分。

此外,Fuse支持颜色表示法的常用十六进制语法。您可以使用简单的#FAA表示浅红色,或#AB74FD80表示更精确的半透明颜色。

答案 1 :(得分:0)

首先,我假设浮动你的意思是一个4字节的值。

  • 四个花车占用了4倍的记忆力。这不仅对于空间很重要,而且由于内存带宽有限,因此移动内存所需的时间也很重要。
  • 您不能使用位掩码运算符并移动浮点数(嗯,您可以,但它并不常见)。
  • 大多数显示技术仅限于16M色,即24位RGB。即使你有一个12位或16位/通道显示技术,浮动仍然至少需要两倍的内存。
  • 并非所有平台都支持浮点运算。

我可能继续前进,但你明白了。