我需要沿着x,y或z作为独立的观察者在flex中移动(旋转)对象。 相对于x,y的运动工作正常,但是当我沿着z轴行进时,观察者的行为与物体的xyz系统分开,并且不是直接到物体而是在对角线上。 这是一些试用代码 谢谢你的帮助
可在此处找到屏幕截图http://i.stack.imgur.com/jyuhN.png
var dx1:Number=Math.cos(degToRad(currentZRotation))*xDiff;
var dy1:Number=-Math.sin(degToRad(currentZRotation))*xDiff;
var dy2:Number=Math.cos(degToRad(currentZRotation))*yDiff;
var dx2:Number=Math.sin(degToRad(currentZRotation))*yDiff;
xDiff=dx1+dx2;
yDiff=dy1+dy2;
var xyx:Number=Math.cos(degToRad(currentYRotation))*xDiff;
var aux:Number=Math.sin(degToRad(currentYRotation))*xDiff;
var xxy:Number=Math.sin(degToRad(currentXRotation))*aux;
var xxz:Number=Math.cos(degToRad(currentXRotation))*aux;
var yxz:Number=-Math.sin(degToRad(currentXRotation))*yDiff;
var yxy:Number=Math.cos(degToRad(currentXRotation))*yDiff;
var zyz:Number=0;
var zxy:Number=0;
var zyx:Number=0;
zxy=sign(Math.cos(degToRad(currentYRotation)))*Math.sin(degToRad(currentXRotation))*zDiff;
aux=Math.cos(degToRad(currentXRotation))*zDiff;
zyx=-sign(Math.cos(degToRad(currentXRotation)))*Math.sin(degToRad(currentYRotation))*aux;
zyz=Math.cos(degToRad(currentYRotation))*aux;
currentX += xyx+zyx;
currentY += yxy+zxy+xxy;
currentZ += zyz+xxz+yxz;
答案 0 :(得分:0)
等等,您是否正在实施自己的基本3D引擎?为什么不使用已经完成所有这些工作的许多开源替代品之一?与Yogurt,Alternativa(我的个人支持)或Away3d一样。
此外,仅仅从查看您的代码,我可以说你过度复杂化问题了。如果我是你,我会更多地研究向量而不是学位计算(相信我),并研究像Rob提到的矩阵。这也可能都是你的头脑(Fisix很难:P),所以我的建议是使用预制的3D引擎。