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

can I send an array of data as a vertex attribute?

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

这些纪元时间是整数,例如:
epochTimes = [1432314839, 1432314840, 1432314841];

自定义属性如下所示:

attributes = {

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

};

'f'真的有用吗?

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

有什么方法可以将值数组作为属性分配给顶点?

这些类型的属性分配是 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?