【发布时间】:2020-12-01 08:05:23
【问题描述】:
假设我从名为 oldGeom 的 THREE.Geometry 生成了一个 THREE.BufferGeometry,如下所示:
// using WebGLRenderer
var geometry = new THREE.BufferGeometry();
var indices = new Uint16Array(oldGeom.vertices.length);
var vertices = new Float32Array(oldGeom.vertices.length * 3);
for (var i = 0; i < oldGeom.vertices.length; i++) {
indices[i] = i;
vertices[i * 3 + 0] = oldGeom.vertices[i].x;
vertices[i * 3 + 1] = oldGeom.vertices[i].y;
vertices[i * 3 + 2] = oldGeom.vertices[i].z;
}
geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
geometry.setIndex(new THREE.BufferAttribute(indices, 1));
希望我有索引权。此时,如何使用索引添加人脸?我打算遍历oldGeom 的面孔以将它们全部添加到此处,但我找不到任何有关此的文档。谢谢!
类似于this question,但具有索引几何。
【问题讨论】:
-
您使用 BufferGeometry 有什么原因吗?当您受到严重的性能限制并且需要挤出一些额外的优化时,通常应该保留它,即使那样您最好知道自己在做什么。除此之外,我不清楚这个问题。您是否在问如何在 BufferGeometry 上重新创建原始几何图形的三角形?或者您是在问如何将全新的面添加到
oldGeom中不存在的 BufferGeometry?顺便说一句,BufferGeometry 有一个从 Geometry 克隆的便捷方法,那么为什么不使用它呢? -
感谢您的评论!是的——我正在使用 BufferGeometry,以便我可以根据 WestLangley 对this question 的建议,通过利用
.setDrawRange(...)动态添加新顶点。这也是为什么我不能使用.fromGeometry(...)来构建这个 BufferGeometry 的原因——我希望缓冲区大于原始几何的大小(抱歉,我没有用更大的缓冲区编写上面的代码!)跨度> -
无论如何,重新表述我的问题:我只是想知道有人会如何在索引的 BufferGeometry 中定义一个三角形。是否有一些数组可以填充顶点索引来定义我的脸?
-
感谢@JCD,如果我能澄清更多,请告诉我
-
好的,我一直在阅读源代码,我要问这两个非常愚蠢的问题——索引是面索引还是顶点索引?并且这些面是由位置属性中的相邻三重奏定义的吗?
标签: javascript three.js