防止THREE

时间:2015-06-22 22:02:31

标签: three.js

在THREE中,您可以指定具有给定数据类型和格式的DataTexture。我的着色器管道基于一些用户控制的制服将原始值标准化

对于Float32Array,它非常简单:

data = new Float32Array(...)
texture = new THREE.DataTexture(data, columns, rows, THREE.LuminanceFormat, THREE.FloatType)

并且,在着色器中,调配值具有非标准化值。但是,如果我使用:

data = new Uint8Array(...)
texture = new THREE.DataTexture(data, columns, rows, THREE.LuminanceFormat, THREE.UnsignedByteType);

然后将纹理在0.0和1.0之间归一化,作为管道的输入。不是我所期待的。有没有办法防止这种行为?

以下是一个示例jsfiddle,演示了对意外情况的快速测试(至少对我而言):http://jsfiddle.net/VsWb9/3796/

three.js r.71

1 个答案:

答案 0 :(得分:0)

为了将来参考,目前在WebGL中无法实现。它需要使用 GL_RED_INTEGER 和不受支持的 usampler2d

来自the internalformat of Texture的评论还描述了GL内部格式的问题。

  

就此而言,GL_LUMINANCE的格式表明你已经过去了   浮点数据或规范化整数数据(类型说   它是规范化的整数数据)。当然,因为没有   GL_LUMINANCE_INTEGER(你怎么说你传递整数   数据,与整数内部格式一起使用),你无法真正使用   像这样的亮度数据。

     

使用GL_RED_INTEGER作为格式,使用GL_R8UI作为内部格式   如果你真的想在纹理中使用8位无符号整数。注意   整数纹理支持需要OpenGL 3.x级硬件。

     

话虽如此,您不能将sampler2D与整数纹理一起使用。如果   您正在使用使用无符号整数纹理格式的纹理,   你必须使用usampler2D。