我有很多在三維空間排列的精靈,他們的父容器有旋轉應用。 我如何反轉精靈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