javascript - 旋转后如何使脸部正常?
问题描述
在开始之前,我意识到这是一个重复的问题。但是,对于另一个没有明确的答案,只是一种不适用于我的解决方法。
我正在使用three.js 构建一个魔方。为了创建逼真的旋转,我将它们围绕一个点旋转。我正在使用的功能在这里:
THREE.Object3D.prototype.rotateAroundWorldAxis = function () {
// rotate object around axis in world space (the axis passes through point)
// axis is assumed to be normalized
// assumes object does not have a rotated parent
var q = new THREE.Quaternion();
return function rotateAroundWorldAxis(point, axis, angle) {
q.setFromAxisAngle(axis, angle);
this.applyQuaternion(q);
this.position.sub(point);
this.position.applyQuaternion(q);
this.position.add(point);
return this;
}
}();
我还建立了一个手动函数来计算 3 个点的面部法线。我意识到three.js 有其中之一,这只是我的调试过程。它运行得很好,但是当我使用函数在魔方上旋转一个面时,内置的法线或我的函数都没有给出正确的方向,它们只是返回它们最初面对的方向。我的法线函数如下。
function computeNormal(p,face) {
let a=p.geometry.vertices[face.a]
let b=p.geometry.vertices[face.b]
let c=p.geometry.vertices[face.c]
let d=new THREE.Vector3(0,0,0)
d.crossVectors(b.sub(a),c.sub(a))
console.log(a,b,c,d)
return d.normalize()
}
感谢您提供任何帮助,如果您需要我的任何其他代码,我很乐意提供
解决方案
典型的我在发布后解决它!我刚刚意识到我们可以获得包含面部的部分的旋转并将其旋转添加到面部(或其他效果)。更新后的功能:
function computeNormal(p,face) {
let n=face.normal
let r=p.rotation
n.applyEuler(r)
console.log(n)
return n
}
推荐阅读
- javascript - 如何使用物化 css 网格或反应引导网格从 ReactJS 中的映射响应中显示每行中的 3 个项目?
- php - 将命令 cURL 转换为 PHP - 卡在传递 POSTFIELD 数据中
- java - 如何在 MVC C# 中加快我从 excel 文件到 sql 数据库的导入速度
- python - 如何在 python3 中使用请求进行身份验证以进行进一步解析?
- docker - 将 ngnix 入口控制器公开为 Daemon-set
- powershell - PowerShell 大写字母后的字符不正确
- reactjs - 将组件连接到 Redux 存储时出现问题
- java - 我需要投一些东西吗?
- python - 如何配置 Heroku 以从 GitHub 接收 webhook?
- flutter - 如何测试流是否在 Dart 的特定位置发出值?