Вот пример, демонстрирующий мою проблему ( в 73 строчке).
Как сделать плоскости _sat1 и _sat2 всегда смотрящими на камеру?
Код AS3:
package
{
import org.papervision3d.core.math.Number3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.shadematerials.GouraudMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
import flash.events.Event;
/**
* Class ContainedLoockAt ...
* @author Yuriy (Mur4ik) Kulkoff
* @version 0.1
* @date 27.08.2009
*/
public class ContainedLoockAt extends BasicView
{
private var _earth:Sphere;
private var _sat1:Satellite;
private var _sat2:Satellite;
public function ContainedLoockAt()
{
camera.zoom = 150;
var lite:PointLight3D = new PointLight3D();
_earth = new Sphere(new FlatShadeMaterial(lite, 0x0055FF, 0x000051), 90, 16, 12);
_earth.rotationZ = -23;
var matForSat1:ColorMaterial = new ColorMaterial(0xFFFF00);
matForSat1.doubleSided = true;
_sat1 = new Satellite(matForSat1, 20, 20, 110, 6);
_sat1.pivot = new DisplayObject3D();
_sat1.pivot.rotationZ = -45;
_sat1.pivot.addChild(_sat1);
var matForSat2:ColorMaterial = new ColorMaterial(0xFF0000);
matForSat2.doubleSided = true;
_sat2 = new Satellite(matForSat2, 15, 15, 120, 5);
_sat2.pivot = new DisplayObject3D();
_sat2.pivot.rotationZ = 45;
_sat2.pivot.addChild(_sat2);
scene.addChild(_earth);
scene.addChild(_sat1.pivot);
scene.addChild(_sat2.pivot);
startRendering();
}
private function orbitCameraTween():void
{
camera.x -= (camera.x - Math.sin(mouseX * 0.01) * 1000) / 8;
camera.y -= (camera.y - viewport.containerSprite.mouseY * 5) / 8;
camera.z -= (camera.z - Math.cos(mouseX * 0.01) * 1000) / 8;
}
protected override function onRenderTick(event:Event = null):void
{
_earth.yaw(.3);
_sat1.satelliteMove();
_sat2.satelliteMove();
// вот эти 2 строчки не дают никакого эффекта
_sat1.lookAt(camera);
_sat2.lookAt(camera);
orbitCameraTween();
renderer.renderScene(scene, camera, viewport);
}
}
}
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.core.proto.MaterialObject3D;
internal class Satellite extends Plane
{
public var pivot:DisplayObject3D;
private var _angle:Number;
public function Satellite(material:MaterialObject3D, w:int = 20, h:int = 20, distance:int = 150, speed:int = 1)
{
super(material, w, h);
this.x = distance;
_angle = (0.5 * speed) % 360;
}
public function satelliteMove():void
{
pivot.yaw(_angle);
}
}
Или вообще как любой объект, находящийся внутри другого объекта сделать всегда повернутым к камере?