使用函数Three.js从Vertices数组创建Three.js三角形



我是JS,THRE.JS的新手,想制作一个函数

  • 每3个值生成一个新顶点
  • 每3个顶点,生成一个新的THREE.Triangle(ta,tb,tc(
  • 在数组中记录所有这些三角形
  • 求每个三角形的总和。getArea((

以下是迄今为止我所拥有的:

// An empty Array to store all the Triangles
var triangles = [];
//  pos is an array that holds all the points/vertices -- there's 72 values total 
var pos = threeMesh1.geometry.attributes.position;

function makeTriangle(ta, tb, tc){

for (i = 0; i < pos.count; i++) {
// For *every 3 instances*, assign the values to ta, tb, tc,
ta = new THREE.Vector3( pos.getX(i), pos.getY(i), pos.getZ(i)); //posX(0),posY(0),posZ(0)
tb = new THREE.Vector3( pos.getX(i+=1), pos.getY(i+=1), pos.getZ(i+=1) );//posX(1),posY(1),posZ(1)
tc = new THREE.Vector3( pos.getX(i+=2), pos.getY(i+=2), pos.getZ(i+=2));//posX(2),posY(2),posZ(2)
//the next set should be i =(3,4,5) (6,7,8) (9,10,11), etc.
// Make a new triangle Object
tri = new THREE.Triangle(ta, tb, tc);

// Add new triangle to initial "triangles" array
triangles.push(tri);

}
}
makeTriangle(triangles);  
console.log(triangles); // returns [Triangle, Triangle, Triangle]

如何使for循环内的每3个实例工作?截至目前,为0,3,6,9等,而不是0,1,2/3,4,5/6,7,8

我实际上能够通过这里的three.js话语找到解决方案。希望这能帮助到其他人!

var triangles = [];
var pos = threeMesh1.geometry.attributes.position;
var a = new THREE.Vector3(); // for re-use
var b = new THREE.Vector3(); // for re-use
var c = new THREE.Vector3(); // for re-use
// var normals = [];
var faces = pos.count / 3; // count = 8 triangles
function makeTriangle() {
for (let i = 0; i < faces; i++){
var tri = new THREE.Triangle(); // for re-use
a.fromBufferAttribute(pos, i * 3 + 0);
b.fromBufferAttribute(pos, i * 3 + 1);
c.fromBufferAttribute(pos, i * 3 + 2);
tri.set(a, b, c);
//   let n = new THREE.Vector3();
//   tri.getNormal(n);
let area_sum = tri.getArea();
//   normals.push(n);
// Add new triangle to initial "triangles" array
triangles.push(tri);
console.log(area_sum);
}   

}  
makeTriangle(triangles);  
console.log(triangles); // returns [Triangle, Triangle, Triangle]

最新更新