Il semble que si un objet d'affichage a une projection de perspective appliquée, appel localToGlobal vous donne les mauvaises coordonnées. Dans le code suivant, je dessine un rectangle, le tourne légèrement autour de son axe X, puis dessine un ovale à l'intérieur en utilisant les coordonnées dérivées de localToGlobal. Cela fonctionne bien, jusqu'à ce que j'essaie d'appliquer une projection en perspective, alors les coordonnées sont toutes fausses. Quelqu'un sait comment contourner ce problème?AS3: localToGlobal avec perspectiveProjection
var w:uint = 300, h:uint = 150;
var s:Sprite = new Sprite();
s.graphics.beginFill(0x000000);
s.graphics.drawRect(-w/2,0,w,h);
s.graphics.endFill();
s.x = 275; s.y = 200; s.z = 600;
s.rotationX = -45;
addChild(s);
var point00:Point = new Point(0,0);
var point0h:Point = new Point(0,h);
var midL:Point = new Point(-w/2,h/2);
var midR:Point = new Point(w/2,h/2);
/*var VP:PerspectiveProjection = new PerspectiveProjection();
VP.fieldOfView = 55;
var p:Point = new Point(275,100);
VP.projectionCenter = p;
s.transform.perspectiveProjection = VP;*/
var o:Shape = new Shape();
o.graphics.beginFill(0x00ff00);
o.graphics.drawEllipse(
s.localToGlobal(midL).x,
s.localToGlobal(point00).y,
s.localToGlobal(midR).x - s.localToGlobal(midL).x,
s.localToGlobal(point0h).y - s.localToGlobal(point00).y
);
addChild(o);
Voté comme prévu. La question est inutile et devrait être supprimée. L'utilisateur applique 2.5D (semblable à 3D) et pose la question au sujet de la méthode de LocalToGlobal qui est 2D seulement et ne produira jamais aucun résultat précis qui est pourquoi des méthodes comme local3DToGlobal sortent. – BotMaster
En fait, 'local3DToGlobal' a le même problème. OP signale que lorsque 'projectionCenter' est modifié, les résultats de' localToGlobal' ne correspondent pas. Je pense que c'est une question parfaitement valable. Je ne connais pas personnellement la réponse. – Aaron