【问题标题】:Create Three.js Triangles from Vertices array with a function - three.js使用函数从 Vertices 数组创建 Three.js 三角形 - three.js
【发布时间】:2021-01-10 12:00:15
【问题描述】:

我是 JS,THREE.js 的新手,想创建一个函数:

  • 每 3 个值生成一个新顶点,
  • 每 3 个顶点,生成一个新的 THREE.Triangle(ta, tb, tc);
  • 将所有这些三角形记录在一个数组中
  • 求每个 Triangle.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,1,2 / 3,4,5 /6,7,8 它给出了 0,3,6,9 等。

【问题讨论】:

  • 你有什么问题?
  • 我编辑了上面的问题,谢谢!

标签: javascript arrays three.js


【解决方案1】:

我实际上能够通过 three.js Discourse here 找到解决方案。希望这可以帮助其他人!

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 2013-11-08
    • 1970-01-01
    • 2015-01-27
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多