大佬教程收集整理的这篇文章主要介绍了三.js ellipse.setRotationFromAxisAngle 消除了现有的四元数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在开发一个 Three.Js 项目。
其中一项任务是围绕局部x轴和z轴为rx和rz旋转椭圆强>度;然后沿全局轴 (0,1,0) 旋转 ry 度。 我的代码是这样的:
function createOrbit(ax,xRadius,yRadius,rx,ry,rz){
const curve = new THREE.EllipseCurve(
ax,// ax,aY
xRadius,// xRadius,yRadius
0,2 * Math.PI,// aStartAngle,aEndAngle
false,// aClockwise
0 // aRotation
);
const points = curve.getPoints( 50 );
const geometry = new THREE.bufferGeometry().setFromPoints( points );
const material = new THREE.lineBasicMaterial( { color : 0xffff00 } );
// Create the final object to add to the scene
const ellipse = new THREE.line( geometry,material );
ellipse.rotation.x += rx;
ellipse.rotation.z += rz;
yax = new THREE.Vector3(0,0);
ellipse.setRotationFromAxisAngle(yax,ry);
return ellipse;
}
然而,我发现函数ellipse.setRotationFromAxisAngle(yax,ry)
会消除现有的并重新引入一组由
ellipse.rotation.x += rx;
ellipse.rotation.z += rz;
有什么建议可以解决这个问题吗?
是的,发生这种情况是因为任何名为 .set()
的方法自然会覆盖之前的状态。您需要做的是访问 Quaternion
(这是一个计算所有旋转的数学对象)并将其乘以@R_673_10062@:
ellipse.rotation.x += rx;
ellipse.rotation.z += rz;
// Create new rotation object
const yQuaternion = new THREE.Quaternion();
yQuaternion.setFromAxisAngle(yax,ry);
// Multiply the ellipse's rotation with the y-axis rotation
ellipse.quaternion.multiply(yQuaternion);
您可以在此处阅读有关四元数的更多信息:https://threejs.org/docs/#api/en/math/Quaternion
以上是大佬教程为你收集整理的三.js ellipse.setRotationFromAxisAngle 消除了现有的四元数全部内容,希望文章能够帮你解决三.js ellipse.setRotationFromAxisAngle 消除了现有的四元数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。