我可以发送一个数据数组作为顶点属性吗?

时间:2015-05-22 17:24:31

标签: three.js glsl webgl shader

我有一个PointCloud,我用它来显示一些与时间相关的数据点。对于PointCloud.Geometry中的每个顶点,我想分配一个属于纪元时间数组的属性。

这些纪元时代是一般的,例如: epochTimes = [1432314839, 1432314840, 1432314841];

自定义属性如下所示:

attributes = {

    epochTimes: {   type: 'f', value: [] }

};

'f'实际上会有效吗?

我看到了一些有趣的统一类型in the wiki,特别是uIntArray,即iv1。使用该数据类型作为属性时出错。它可能只保留给制服。

有没有办法可以将值数组作为属性分配给顶点?

1 个答案:

答案 0 :(得分:0)

这些属性赋值是Three.js特定的。如果您的数组中总是有三次,则可以使用vec3类型。

attributes = {
     epochTimes: {   type: 'iv3', value: null } // 'iv3' specifies that attribute type is ivec3, like as 'f' specifies that it would be float type in the shader
};

有关更多代码和完整示例,请查看http://threejs.org/examples/webgl_buffergeometry_custom_attributes_particles.html

您可以尝试绑定其数据实际编码为纪元时间的纹理,并在片段着色器中使用该纹理。

要回答你的问题,你可以将一组数据发送到顶点着色器 - 没有。 (相关主题 - Is it possible for a vertex attribute to be an array in GLSL-ES 2.0?