Ok, I browsed through the Camera3D source in Papervision. Here is the implementation for orbit:
/**
* Orbits the camera around the specified target. If no target is specified the
* camera's #target property is used. If this camera's #target property equals null
* the camera orbits the origin (0, 0, 0).
*
* @param pitch Rotation around X=axis (looking up or down).
* @param yaw Rotation around Y-axis (looking left or right).
* @param useDegrees Whether to use degrees for pitch and yaw (defaults to 'true').
* @param target An optional target to orbit around.
*/
public override function orbit(pitch:Number, yaw:Number, useDegrees:Boolean=true, target:DisplayObject3D=null):void
{
target = target || _target;
target = target || DisplayObject3D.ZERO;
if(useDegrees)
{
pitch *= (Math.PI/180);
yaw *= (Math.PI/180);
}
// Number3D.sub
var dx :Number = target.world.n14 - this.x;
var dy :Number = target.world.n24 - this.y;
var dz :Number = target.world.n34 - this.z;
// Number3D.modulo
var distance :Number = Math.sqrt(dx*dx+dy*dy+dz*dz);
// Rotations
var rx :Number = Math.cos(yaw) * Math.sin(pitch);
var rz :Number = Math.sin(yaw) * Math.sin(pitch);
var ry :Number = Math.cos(pitch);
// Move to specified location
this.x = target.world.n14 + (rx * distance);
this.y = target.world.n24 + (ry * distance);
this.z = target.world.n34 + (rz * distance);
this.lookAt(target);
}
You could implement this as a helper function for the object you want to keep still. I believe the only camera specific code involved in this function would be the lookAt() function.
You can then add this before the camera.orbit() in the mouseMove handler and it should stay still with your camera.