我有很多在三维空间排列的精灵,他们的父容器有旋转应用。 我如何反转精灵3D旋转,他们总是面对相机(Actionscript 3)?在3D中反转旋转,使对象始终面向相机?
继承人的代码进行测试:
package{
import flash.display.Sprite;
import flash.events.Event;
public class test extends Sprite{
var canvas:Sprite = new Sprite();
var sprites:Array = []
public function test(){
addChild(canvas)
for (var i:int=0;i<20;i++){
var sp:Sprite = new Sprite();
canvas.addChild(sp);
sp.graphics.beginFill(0xFF0000);
sp.graphics.drawCircle(0,0,4);
sp.x = Math.random()*400-200;
sp.y = Math.random()*400-200;
sp.z = Math.random()*400-200;
sprites.push(sp);
}
addEventListener(Event.ENTER_FRAME,function():void{
canvas.rotationX++;
canvas.rotationY = canvas.rotationY+Math.random()*2;
canvas.rotationZ++;
for (var i:int=0;i<20;i++){
//this is not working...
sprites[i].rotationX = -canvas.rotationX
sprites[i].rotationY = -canvas.rotationY
sprites[i].rotationZ = -canvas.rotationZ
}
})
}
}
}
我猜我必须做一些与魔法精灵的rotation3D矩阵... 我试图执行这个脚本:http://ughzoid.wordpress.com/2011/02/03/papervision3d-sprite3d/,但曾经如此成功
感谢您的帮助。
好的,问题是:你如何得到任何特定对象的“全局”矩阵,如你所描述的那样操纵它,然后将它设置回这个精灵? AFAIK,你不能设置一个“全局”转换矩阵到一个对象,只有一个“本地”的! “pointAt”Matrix3D方法能解决这个问题吗? – 2012-10-02 19:28:22
@BillKotsias:您有责任跟踪场景中物体的变换矩阵。你通常有某种转换层次:'view·t_1·t_2·t_3 ...'。这是你的“全局”转换矩阵。现在,如果你想在这个转换链中画一些物体,但是使它面对相机,你可以采用这种复合矩阵并按照我所描述的方式进行改变。实际上,这只是将视图中的对象转换为视图中的正确位置,而不会将其从“相机”中移开。 – datenwolf 2012-10-02 19:34:59
我完全不理解这一点。它只会缩放物体并将其移动一段距离,但它不会“定向”平面,使其面向相机(它面向相机,因为平面的法线与一条线平行从相机的原点到飞机的中心)。 – user18490 2015-01-17 13:55:25