Example: 2D Coordinates from a 3D Object

March 18, 2008 – 1:23 pm

[source:javascript]
package {

import caurina.transitions.Tweener;

import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

[SWF(width="640", height="480", backgroundColor="0xFFFFFF")]
public class TwoDCoordinates extends Sprite
{

private var viewport:Viewport3D;
private var scene:Scene3D;
private var camera:FreeCamera3D;
private var renderer:BasicRenderEngine;

private var boringSprite:Sprite;

private var spriteMaterial:MovieMaterial;

private var awesomePlane:Plane;

public function TwoDCoordinates()
{
init();
}

private function init():void
{
viewport = new Viewport3D(640,480);
addChild(viewport);

scene = new Scene3D();
camera = new FreeCamera3D();
renderer = new BasicRenderEngine();

createBoringSprite();
createMaterials();
createObjects();

tween3DStuff();

addEventListeners();
}

private function createBoringSprite():void
{
boringSprite = new Sprite();
boringSprite.graphics.beginFill(0×00cc00);
boringSprite.graphics.drawRect(0,0,50,50);

var format:TextFormat = new TextFormat(”Arial”, 32, 0×000000);

var tf:TextField = new TextField();
tf.text = “2D”;
tf.setTextFormat(format);

boringSprite.addChild(tf);

addChild(boringSprite);
}

private function createMaterials():void
{
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xcc0000);
sprite.graphics.drawRect(0, 0, 600, 600);

var format:TextFormat = new TextFormat(”Verdana”, 144, 0×000000);

var tf:TextField = new TextField();
tf.text = “3D”;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.setTextFormat(format)
sprite.addChild(tf);

spriteMaterial = new MovieMaterial(sprite, true);
spriteMaterial.smooth = true;
}

private function createObjects():void
{
awesomePlane = new Plane(spriteMaterial);
scene.addChild(awesomePlane);
}

private function tween3DStuff():void
{
Tweener.addTween(awesomePlane,
{
x:Math.random() * 1500 - 750,
y:Math.random() * 1500 - 750,
z:Math.random() * 750,

onComplete:tween2DStuff,

time:1
});
}

private function tween2DStuff():void
{
Tweener.addTween(boringSprite,
{
x:awesomePlane.screen.x + viewport.width/2,
y:awesomePlane.screen.y + viewport.height/2,

/*Alternatively, you can get the x and y
from the individual vertices of the plane:
awesomePlane.geometry.vertices[vertexIndex].vertex3DInstance.x
*/

onComplete:tween3DStuff,

time:1
});
}

private function addEventListeners():void
{
addEventListener(Event.ENTER_FRAME, render);
}

private function render(e:Event):void
{
renderer.renderScene(scene, camera, viewport);
}
}
}
[/source]

  1. 7 Responses to “Example: 2D Coordinates from a 3D Object”

  2. Thanks, now i know that DisplayObject3D have .screen property!

    By Exey on Mar 18, 2008

  3. Thanks!!!!! Been looking for this

    By Andrew on Mar 19, 2008

  4. Does this actually work regardless of camera angle, etc? DisplayObject3D.screen is an object of type Number3D, which suggests that the x and y are relative to 3D, not 2D, space …

    By Joshua Mostafa on Apr 4, 2008

  5. This isn’t working on the latest version of Great White. It seems that the screen property isn’t being populated. I got it to work by changing DisplayObject3D.calculateScreenCoords() to a public function and calling it manually. I wonder if it’s going to get fixed?

    By Travis Nelson on Apr 29, 2008

  6. thanks travis,
    i’m also using great white (2.0 alpha) and i could solve the problem in the same way. i would be great though, if the screen coordinates would be populated again in a future release.

    By Markus Lerner on Apr 29, 2008

  7. Hi,
    Is there a way of getting the screen coordinates of an object ( a cube) with Papervision 1.5 ?
    Thank you.

    By jo3549 on Jun 3, 2008

  1. 1 Trackback(s)

  2. Apr 2, 2008: David Ehlers » Blog Archive » Another great Papervision 3d Resource

Post a Comment