三.js一个物体可以同时旋转和移动吗?
three.js can an object be rotated and moved at the same time
您好,感谢您抽出宝贵时间。我正在尝试移动一个对象并同时旋转它。在执行这两个动作时,对象不规则地移动。我读过旋转以某种方式改变轴。这是真的吗?这是代码。我尝试使用世界轴和对象轴进行旋转,但遇到了同样的问题。
var rotObjectMatrix;
function rotateAroundObjectAxis(object, axis, radians) {
rotObjectMatrix = new THREE.Matrix4();
rotObjectMatrix.makeRotationAxis(axis.normalize(), radians);
object.matrix.multiply(rotObjectMatrix);
object.rotation.setFromRotationMatrix(object.matrix);
}
var rotWorldMatrix;
// Rotate an object around an arbitrary axis in world space
function rotateAroundWorldAxis(object, axis, radians) {
rotWorldMatrix = new THREE.Matrix4();
rotWorldMatrix.makeRotationAxis(axis.normalize(), radians);
rotWorldMatrix.multiply(object.matrix);
object.matrix = rotWorldMatrix;
object.rotation.setFromRotationMatrix(object.matrix);
}
function spriteAI2() {
//var ranTen = Math.floor((Math.random()*7)+2);
var xAxis = new THREE.Vector3(1,0,0);
var yAxis = new THREE.Vector3(0,1,0);
var zAxis = new THREE.Vector3(0,0,1);
rotateAroundObjectAxis(meshSprite, zAxis, Math.PI / 180);
if (meshSprite.position.x > 30 && meshSprite.position.x <= 450) {
meshSprite.translateX( -6 );
} else if (meshSprite.position.y > 30 && meshSprite.position.y <= 250) {
meshSprite.translateY( -6);
} else if (meshSprite.position.z > 30 && meshSprite.position.z <= 350) {
meshSprite.translateZ( -6 );
} else if (meshSprite.position.x < -30 && meshSprite.position.x >= -450) {
meshSprite.translateX( 6 );
} else if (meshSprite.position.y < -30 && meshSprite.position.y >= -250) {
meshSprite.translateY( 6 );
} else if (meshSprite.position.z < -30 && meshSprite.position.z >= -350) {
meshSprite.translateZ( 6 );
} else if (meshSprite.position.x < 31 && meshSprite.position.y < 31 && meshSprite.position.z < 31 && meshSprite.position.x > -31 && meshSprite.position.y > -31 && meshSprite.position.z > -31) {
var locX = Math.floor((Math.random()*450)+1);
locX *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
var locY = Math.floor((Math.random()*250)+1);
locY *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
var locZ = Math.floor((Math.random()*350)+1);
locZ *= Math.floor(Math.random()*2) == 1 ? 1 : -1;
scene.remove(meshSprite);
//texture.dispose();
c2ImgMaterial.dispose();
meshSprite.position.set( locX, locY, locZ );
scene.add( meshSprite );
//c2Sprite.clone;
}
}
我已经找到了问题的根源。似乎在三个.js对象可以本地或全局移动。就我而言,我使用的是本地版本。
meshSprite.translateX(-6); // Local
var delta = clock.getDelta(); // Global
var moveDistance = 125 * delta; // 200 pixels per second
meshSprite.position.x += moveDistance;
切换到全局运动形式后,旋转时没有冲突。可以在以下 URL 中找到更广泛的解释。http://stemkoski.github.io/Three.js/Mesh-Movement.html
相关文章:
- 使用KineticJS变换(移动/缩放/旋转)形状
- 如何水平移动旋转的画布
- 如何使我的功能360度旋转并上下移动
- 猫头鹰旋转木马-自动高度移动问题
- 如何在Javascript中移动元素的旋转点
- 如何旋转rect,并且它仍然根据其旋转沿正确的方向移动
- 用户键入时旋转的内容可编辑移动
- 在 HTML5 画布中沿路径旋转移动对象
- 三.js一个物体可以同时旋转和移动吗?
- 如何锁定在类固醇中旋转的场景.js - AppGyver移动应用程序
- 想要使用 html5 的画布优化捕获的图像调整大小和旋转的代码,现在在移动设备上发出内存不足警告
- 如何在phase.js中移动时旋转汽车
- OWL旋转木马移动+/-5张幻灯片
- 我可以使用旋转功能绕时钟移动一条线吗
- Three.js-鼠标移动时沿(0,0,0)旋转对象
- 使用JavaScript和setTimeout旋转HTML元素以模拟不断移动的对象
- IE10中鼠标移动时的图像旋转
- 在HTML画布中移动旋转对象
- 在JQuery不工作的情况下旋转和移动
- 变换:旋转移动视图