tengo muchos sprites dispuestos en espacio 3D, y su contenedor principal tiene rotaciones aplicadas. ¿Cómo invierto la rotación 3D de los sprites, que siempre miran hacia la cámara (Actionscript 3)?¿Invertir la rotación en 3D para hacer que un objeto siempre mire hacia la cámara?
aquí hay un código para probarlo:
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
}
})
}
}
}
que supongo que tengo que hacer un poco de magia con las matrices rotation3D de los sprites ... he tratado de poner en práctica este script: http://ughzoid.wordpress.com/2011/02/03/papervision3d-sprite3d/, pero tuvo tanto éxito
Gracias por ayuda.
OK, la pregunta es: ¿cómo se obtiene la matriz "global" para cualquier objeto en particular, manipularlo como se describe, y luego volver a establecerlo en este sprite? ¡AFAIK, no puedes establecer una matriz de transformación "global" para un objeto, solo una "local"! ¿Podría el método "pointAt" Matrix3D resolver este problema? –
@BillKotsias: es su responsabilidad rastrear las matrices de transformación de los objetos en su escena. Por lo general, tiene algún tipo de jerarquía de transformación: 'view · t_1 · t_2 · t_3 ...'. Esta es su matriz de transformación "global". Ahora bien, si desea dibujar algún objeto en esta cadena de transformación, pero hacerlo frente a la cámara, tome esa matriz compuesta y cámbiela de la manera que describí. Efectivamente, esto solo traduce el objeto en el lugar correcto de la vista sin alejarlo de la "cámara". – datenwolf
No entiendo esto en absoluto. Solo escalaría el objeto y lo alejaría de la cámara, pero no "orientaría" el plano de modo que esté orientado hacia las cámaras (está orientado hacia la cámara ya que en la normalidad del plano es paralelo a la línea) desde el origen de la cámara al centro del avión). – user18490