首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >旋转后如何更新three.js中的网格顶点?

旋转后如何更新three.js中的网格顶点?
EN

Stack Overflow用户
提问于 2022-08-06 07:12:51
回答 1查看 101关注 0票数 0

我正在使用1.4.2 three.js版本。我旋转网格,并希望得到更新的顶点。这是我的代码:https://codepen.io/DYDOI-NSK/pen/mdxLpoB?editors=1012

这是我的代码:

我在37行有一个函数,允许我创建平面。

代码语言:javascript
运行
复制
/* 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函数的平面

代码语言:javascript
运行
复制
// Creating 2 planes
let planes = generatePlanes({
    name: 'centerPlane',
    count: 2,
    width: 30,
    height: 30,
}); 

在第63-67行,我描述了问题。我在旋转前后记录了plane.geometry.attributes.position.array(这里包含网格的顶点位置)。

代码语言:javascript
运行
复制
// 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);

日志结果:

代码语言:javascript
运行
复制
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

具有相同位置的顶点,我需要更新它们,但我不知道如何更新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-06 09:18:26

由于目标是计算两个平面之间的角度,一个比查看位置属性更好的解决方法是创建一个表示平面的向量,并将同样的旋转应用于向量。这里已经有了一个可靠的答案:https://stackoverflow.com/a/45309019/4536210

关于旋转时位置属性不发生变化的原因,是因为旋转适用于网格,而几何总是保持不变。位置属性表示几何的固有属性,表示其顶点在空间中的排列,它们从不通过转换对象来修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73257865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档