Добрый день!
Использую five3d. Вторые сутки мучаюсь. Проблема, примерно, следующая:
Есть два Sprite3D, зеленый и красный. Красный находится внутри зеленого в точке (x: 150, y: 150). Зеленый спрайт повернут по X на 45 градусов. Есть обычный синий спрайт который находится на обычной сцене. Нужно установить синий спрайт в проекцию красного. Беру точку следующим образом:
Код AS3:
var p:Point = green.local3DToGlobal(new Vector3D(red.x, red.y, red.z));
blue.x = p.x;
blue.y = p.y;
Но, как видно из примера, координата рассчитывается не верно...
Либо я что-то не так делаю, либо, неужели, это невозможно средствами five3d? Буду очень рад любой подсказке... Может, кто-нибудь сталкивался?
Весь код:
Код AS3:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Matrix3D;
import flash.geom.Point;
import flash.geom.Vector3D;
import flash.utils.Timer;
import net.badimon.five3D.display.Scene3D;
import net.badimon.five3D.display.Shape3D;
import net.badimon.five3D.display.Sprite2D;
import net.badimon.five3D.display.Sprite3D;
public class Main extends Sprite {
public function Main():void {
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var scene3d:Scene3D = new Scene3D;
addChild(scene3d);
var green:Sprite3D = new Sprite3D;
green.graphics3D.beginFill(0x00ff00);
green.graphics3D.drawRect(0, 0, 300, 300);
green.graphics3D.endFill();
green.rotationX = -45;
scene3d.addChild(green);
var red:Sprite3D = new Sprite3D;
red.graphics3D.beginFill(0xff0000);
red.graphics3D.drawRect(-20, -20, 40, 40);
red.graphics3D.endFill();
green.addChild(red);
red.x = 150;
red.y = 150;
var blue:Sprite = new Sprite;
blue.graphics.beginFill(0x0000ff);
blue.graphics.drawRect(-10, -10, 20, 20);
blue.graphics.endFill();
addChild(blue);
var p:Point = green.local3DToGlobal(new Vector3D(red.x, red.y, red.z));
blue.x = p.x;
blue.y = p.y;
}
}
}