2011-03-28 99 views
0

我需要在作为独立观察者的沿x,y或z的flex(旋转)对象之间移动。 相对于x,y的运动工作正常,但是当我沿着z轴走时,观察者的行为与对象的xyz系统分开,并且不直接对象,而是以对角线为例。 下面是一些试用代码 感谢您的帮助flex,3d物体平移和旋转

截图可以在这里找到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

不是你的问题的答案,但我强烈建议抓住一本关于3D图形的好书并阅读变换矩阵。从长远来看,它将为您节省很多麻烦。 – 2011-03-28 11:36:02

+0

我建议提供一些你想要它的截图以及它的实际内容。并且可能是一个可运行的应用程序,所以我们很容易测试。 @Rob琼脂你有任何书的建议? – JeffryHouser 2011-03-28 11:49:05

+0

@ www.Flextras.com Alan Watt的3D计算机图形学是我在研究这些概念时的首选,但是那是前一段时间:\ – 2011-03-28 12:06:53

回答

0

等待,你实现自己的基本的3D引擎?为什么不使用其中一个已经完成所有这些工作的开源代码?像Yogurt,Alternativa(我的个人偏好)或Away3d

另外,仅仅从查看你的代码,我可以说你过分复杂的问题了很多。如果我是你的话,我会更关注矢量,而不是用度数计算(相信我),然后研究像Rob提到的矩阵。这也可能都在你的头上(Fisix很难:P),所以我的建议是使用预制3d引擎。

+0

谢谢:)为了学习的缘故,我想尝试在不添加3d引擎的情况下实现此功能。所以回到几何。 – gabi 2011-03-28 16:07:38

+0

再次,不要使用几何。这不是物理学的工作原理。他们使用矢量。你可以尝试学习这种方式,但你已经走错了方向。你也应该尝试学习如何提高你的动作表现。你可能想看看其他引擎,因为它们是开源的,并且知道如何进行转换。 – 2011-03-28 16:11:49