javascript - 在 Three.js 中控制自定义几何图形的缩放
问题描述
我有一个自定义对象,它是两个网格的减法。这种减法创建了一个类似框架的对象。
createFrame (x, y, z) {
const frameMesh = new THREE.Mesh(new THREE.BoxGeometry(1,1,1));
frameMesh.scale.set(x, y, z);
const smallerFrameMesh = frameMesh.clone()
smallerFrameMesh.scale.set(x - 4, y - 4, z);
// subtraction
const frameGeometry = fromCSG(toCSG(frameGeometry).subtract(toCSG(smallerFrameMesh)));
const frame = new THREE.Mesh(frameGeometry, new THREE.MeshStandardMaterial(0xffffff));
frame.geometry.computeVertexNormals();
frame.userData.isFrame = true;
return frame;
}
现在,只要大小发生变化,我就会动态地缩放这个框架。问题是.scale
只使用让我的对象拉伸,而我希望它保持框架的宽度(在这种情况下为 4)。
是否可以指定对象应该如何缩放(比如编写我自己的缩放函数实现)或者是否有一个属性/方法可以使用它会导致保留“空白”与“对象”部分?先感谢您。
解决方案
该scale()
方法通过将每个顶点的位置相乘来平等地变换每个顶点。因此,如果框架的内边缘位于 处x=6
,外缘位于 处x=10
,则将其缩放 2 将为您提供 inner: x=12
,outer: x=20
,使框架宽度为 8 个单位。
为了缓解这种情况,您可以将框架分成 4 个不同的框:顶部、底部、左侧和右侧。当您想在 x 轴上缩放它时,您可以拉伸顶部和底部,并简单地移动左右边缘。这样你就可以保持 4 的厚度:
当您想在 y 轴上进行缩放时,可以进行逆操作。您拉伸左右框,然后移动顶部和底部,使它们对齐。
推荐阅读
- javascript - 读取 csv 文件会引发错误 fs.readFileSync) 不是函数
- javascript - 使用 HTML 和 JavaScript 创建 Linux 终端主题网站
- python - 删除逗号或撇号前面的空格 - Python
- javascript - 附加选项以选择框取决于从数组中提取的部分
- python - 使用 Python 更新 SQL - 绑定数量不正确
- python - 如何找到整数变量的长度
- google-chrome-devtools - Chrome 开发者工具中缺少“安全”标签
- javascript - 如何在箭头函数中获取值
- laravel - 我是 Laravel 的新手。我得到了这个项目,但我不知道为什么它不显示图片
- django - 如何使用 django 在数据库中上传图像?