Three.js如何旋转墙体克隆使最长墙垂直且相对位置不变以计算建筑占地面积
解决思路
你的问题核心是仅调整了墙体自身的旋转角度,没有同步旋转墙体的空间坐标,导致墙体相对位置错位。要保持整个建筑结构的相对关系不变,需要让所有克隆墙体的位置坐标和自身朝向同步绕Y轴旋转相同的角度,而非仅修改墙体自身的rotation属性。
具体实现步骤
- 保留你现有的
turn角度计算逻辑(将最长墙转至垂直的角度差) - 取消对
clones整体组的旋转赋值,改为遍历每个克隆墙体做同步变换,代码如下:
// 遍历所有克隆伪墙体 for(n=0;n<num;n++){ const cloneWall = clones.children[n]; // 1. 旋转墙体的位置坐标:绕Y轴旋转turn角度,保持相对位置不变 cloneWall.position.applyAxisAngle(new THREE.Vector3(0, 1, 0), turn); // 2. 同步旋转墙体自身的朝向 cloneWall.rotation.y += turn; }
- 变换完成后直接计算克隆组的boundingBox即可得到正确的占地面积:
const boundingBox = new THREE.Box3().setFromObject(clones); const size = boundingBox.getSize(new THREE.Vector3()); // 占地面积等于X轴长度乘以Z轴长度 const area = size.x * size.z; console.log('正确占地面积:', area);
注意事项
你现有创建克隆墙体的代码存在变量名笔误:定义的几何体和材质是cloneGeometry、cloneMaterial,但创建Mesh时用了未定义的pseudomursGeometry、pseudomursMaterial,需要修正避免运行报错。
内容的提问来源于stack exchange,提问作者Wolden
相关产品推荐
相关产品推荐

