flex,3d对象平移和旋转

时间:2011-03-28 11:11:08

标签: flex flex4

我需要沿着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;

1 个答案:

答案 0 :(得分:0)

等等,您是否正在实施自己的基本3D引擎?为什么不使用已经完成所有这些工作的许多开源替代品之一?与YogurtAlternativa(我的个人支持)或Away3d一样。

此外,仅仅从查看您的代码,我可以说你过度复杂化问题了。如果我是你,我会更多地研究向量而不是学位计算(相信我),并研究像Rob提到的矩阵。这也可能都是你的头脑(Fisix很难:P),所以我的建议是使用预制的3D引擎。