matrix - 三,更新对象的矩阵不会改变它的位置和旋转参数
问题描述
我想在创建时为对象设置一个变换矩阵,然后通过位置、旋转和缩放来控制它,但是虽然更改矩阵确实会更改世界空间中的对象,但它的位置参数仍然保持为 0、0、0。
let mesh = new THREE.Mesh(
new THREE.BoxGeometry(),
new THREE.MeshPhongMaterial({color:0xf15728})
)
this.scene.add(mesh)
let pos = new THREE.Vector3().setFromMatrixPosition(m)
mesh.matrixAutoUpdate = false
mesh.matrix.copy(m)
// ***************//
mesh.updateMatrix()
// ***************//
console.log("mesh.position", mesh.position)
console.log("pos", pos)
pos
这是两者的值的输出mesh.position
解决方案
更新对象matrix
不会更新其位置或旋转字段,默认情况下,three.js 将在渲染之前根据 、 和 值更新矩阵position
(rotation
您scale
已通过设置matrixAutoUpdate
为 false 禁用)。
如果您想从矩阵初始化对象转换,可以使用Matrix4.decompose函数,如下所示:
// m is the initial local matrix transform
m.decompose(
mesh.position,
mesh.quaternion,
mesh.scale,
);
此外,如果您保留,则无论何时更改、或值,您都必须在渲染之前mesh.matrixAutoUpdate = false
调用。mesh.updateMatrix()
position
rotation
scale
您可以在此处阅读有关矩阵变换如何工作的更多信息。
推荐阅读
- docker-compose - 如何在 Ansible 的 docker_compose 任务中查找目录并迭代使用?
- reactjs - 做出反应。子组件正在改变父组件
- python - 如何使用 numpy 数组值在 Keras 模型中输入张量?
- javascript - 编辑器扩展 onDidCloseTerminal() 导致编辑器冻结
- rundeck - Rundeck 多个作业执行,排队或丢弃?
- delphi - 仅右键单击以选择 VirtualTreeView 中的节点?
- javascript - 如何使用按钮同时添加和删除图像?
- jquery - 未经身份验证的 api laravel 子域
- xodus - 关于xodus的一些问题
- python - 查找并计算两个数组之间的共同 1(TRUE) 和 0(FALSE)