我正在使用1.4.2 three.js版本。我旋转网格,并希望得到更新的顶点。这是我的代码:https://codepen.io/DYDOI-NSK/pen/mdxLpoB?editors=1012
这是我的代码:
我在37行有一个函数,允许我创建平面。
/* generatePlanes - function that create planes.
* @param data - config for creating planes, must contain name,
* count of creating planes, width and height.
* @return planeHolder - array with created planes.
*/
let generatePlanes = (data) => {
let planeHolder = [];
for (let i = 0; i < data.count; i++) {
let geometry = new THREE.PlaneGeometry( data.width, data.height );
let material = new THREE.MeshBasicMaterial( {color: new THREE.Color('#cea6a6'), side: THREE.DoubleSide} );
let plane = new THREE.Mesh( geometry, material );
plane.name = data.name;
plane.isConnected = false;
planeHolder.push(plane);
}
return planeHolder;
} 我在53行创建了两个具有generatePlanes函数的平面
// Creating 2 planes
let planes = generatePlanes({
name: 'centerPlane',
count: 2,
width: 30,
height: 30,
}); 在第63-67行,我描述了问题。我在旋转前后记录了plane.geometry.attributes.position.array(这里包含网格的顶点位置)。
// Check verticies before rotating
console.log(planes[0].geometry.attributes.position.array);
// Rotate first plane with rotateX method
planes[0].rotateX(Math.PI / 4);
// Check verticies after rotating
console.log(planes[0].geometry.attributes.position.array);日志结果:
Before rotation:
Float32Array(12)
0: -15
1: 15
2: 0
3: 15
4: 15
5: 0
6: -15
7: -15
8: 0
9: 15
10: -15
11: 0
After rotation:
Float32Array(12)
0: -15
1: 15
2: 0
3: 15
4: 15
5: 0
6: -15
7: -15
8: 0
9: 15
10: -15
11: 0具有相同位置的顶点,我需要更新它们,但我不知道如何更新。
发布于 2022-08-06 09:18:26
由于目标是计算两个平面之间的角度,一个比查看位置属性更好的解决方法是创建一个表示平面的向量,并将同样的旋转应用于向量。这里已经有了一个可靠的答案:https://stackoverflow.com/a/45309019/4536210
关于旋转时位置属性不发生变化的原因,是因为旋转适用于网格,而几何总是保持不变。位置属性表示几何的固有属性,表示其顶点在空间中的排列,它们从不通过转换对象来修改。
https://stackoverflow.com/questions/73257865
复制相似问题