Итак у меня получилось выбирать точку на 3Д объектах.

Код AS3:
package
{
import flash.events.Event;
import org.papervision3d.core.utils.Mouse3D;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.view.BasicView;
import org.papervision3d.view.layer.ViewportLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
public class Mouse3DFloor extends BasicView
{
private var mouse3D:Mouse3D;
private var follower:Plane;
public function Mouse3DFloor()
{
var h:headerContainer = new headerContainer();
h.header.text = "Following mouse position on a plane";
addChild(h);
viewport.interactive = true;
Mouse3D.enabled = true;
mouse3D = viewport.interactiveSceneManager.mouse3D;
var wireframeMaterial:WireframeMaterial = new WireframeMaterial(0x444444);
var colorMaterial:ColorMaterial = new ColorMaterial(0xdddddd);
var redColorMaterial:CompositeMaterial = new CompositeMaterial();
redColorMaterial.addMaterial(wireframeMaterial);
redColorMaterial.addMaterial(colorMaterial);
//var redColorMaterial:ColorMaterial = new ColorMaterial(0xcc0000);
redColorMaterial.interactive = true;
//10, 10 represent the number of segments in the plane
//var floor:Plane = new Plane(redColorMaterial, 2000, 2000, 10, 10);
var floor:Cylinder = new Cylinder(redColorMaterial,400,2800,20,10);
floor.x=-500;
//floor.rotationX = 90;
var sphere:Sphere = new Sphere(redColorMaterial, 400, 18, 18);
sphere.z=1900;
scene.addChild(sphere);
var greenColorMaterial:ColorMaterial = new ColorMaterial(0x00cc00);
follower = new Plane(greenColorMaterial, 300, 300);
follower.rotationX = 90;
scene.addChild(floor);
scene.addChild(follower);
camera.y = 1000;
camera.lookAt(sphere);
var floorViewportLayer:ViewportLayer = new ViewportLayer(viewport, floor);
var followerViewportLayer:ViewportLayer = new ViewportLayer(viewport, follower);
viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
floorViewportLayer.layerIndex = 0;
followerViewportLayer.layerIndex = 1;
viewport.containerSprite.addLayer(floorViewportLayer);
viewport.containerSprite.addLayer(followerViewportLayer);
startRendering();
}
override protected function onRenderTick(event:Event=null):void
{
follower.x += (mouse3D.x - follower.x) * 1;
follower.y += (mouse3D.y - follower.y) * 1;
follower.z += (mouse3D.z - follower.z) * 1;
//follower.copyTransform(mouse3D);
renderer.renderScene(scene, camera, viewport);
}
}
}
РЕЗУЛЬТАТ НА ПЕРВОЙ ФЛЭШКЕ Mouse3DFloor1.swf
Теперь осталось правильно ориентировать плоскость. Т.е. она должна поварачиваться в направлении нормали в точке.
Включаю: follower.copyTransform(mouse3D);
И получается какая то фигня.
РЕЗУЛЬТАТ НА ВТОРОЙ ФЛЭШКЕ Mouse3DFloor2.swf
Такое ощущение, что плоскость ориентируется относительно какой то невидимой сферы в центре.