[Papervision3D] Bug in cameras.
neolf(liufeng)
neolf.box at gmail.com
Sat Nov 24 06:46:12 PST 2007
Sorry for my english,It's so poor.
^_^
I do some job in Pv3D and I found some bug.
I put two plane in the scenes.
cameras (x,y,z)=(0,0,0) and lookat Z axis.
A is 300×400 (x,y,z)=(0,0,600)
B is 600×800 (x,y,z)=(0,0,1200)
I think the A will caver up the B ,but I can see B's border.
the reason is the cameras is not in the (0,0,0),it's in the (0,0,
cameras.fouse)
and then I write this class to fix this bug.
if you want change cameras's rotation use :
camera.tilt(-m_x);
camera.pan(-m_y);
-------------------------------code----------------------------------
file: NeoCamera3D.as
package org.neolf.cameras
{
import org.papervision3d.core.Matrix3D;
import org.papervision3d.core.proto.CameraObject3D;
import org.papervision3d.objects.DisplayObject3D;
public class NeoCamera3D extends CameraObject3D
{
public function NeoCamera3D( zoom:Number=2, focus:Number=100,
initObject:Object=null )
{
super( zoom, focus, null);
this.z=focus;
trace(this.z+"|"+focus)
}
/**
* [internal-use] Transforms world coordinates into camera space.
*/
// TODO OPTIMIZE (LOW)
public override function transformView( transform:Matrix3D=null ):void
{
if( this._transformDirty ) updateTransform();
// Rotate Z
super.transformView();
}
/**
* Rotate the camera in its vertical plane.
* <p/>
* Tilting the camera results in a motion similar to someone nodding
their head "yes".
*
* @param angle Angle to tilt the camera.
*/
public override function tilt( angle:Number ):void
{
super.rotationY = -angle;
updatePosition();
}
/**
* Rotate the camera in its horizontal plane.
* <p/>
* Panning the camera results in a motion similar to someone shaking
their head "no".
*
* @param angle Angle to pan the camera.
*/
public override function pan( angle:Number ):void
{
super.rotationX = angle;
updatePosition();
}
/**
* Rotate the camera in its horizontal plane.
* <p/>
* set camera -->0,0,0.
*
* @param angle Angle to pan the camera.
*/
public function setZero():void
{
super.yaw(0); super.pitch(0); super.roll(0);
}
//
___________________________________________________________________________________________________
/**
* update the Camera Position
*
* @return void.
*/
public function updatePosition(): void
{
var dp3d:DisplayObject3D=DisplayObject3D.ZERO;
dp3d.rotationY=this.rotationY;
dp3d.rotationX=this.rotationX;
dp3d.moveForward(this.focus);
trace(dp3d.toString());
this.copyPosition(dp3d);
}
//
___________________________________________________________________________________________________
/**
* Returns a string value representing the three-dimensional position
values of the display object instance.
*
* @return A string.
*/
public override function toString(): String
{
return this.name + ': x:' + Math.round(this.x) + ' y:' + Math.round(
this.y) + ' z:' + Math.round(this.z);
}
}
}
------------------------------code end-----------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://osflash.org/pipermail/papervision3d_osflash.org/attachments/20071124/8eab6b2b/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NeoCamera3D.as
Type: application/octet-stream
Size: 4609 bytes
Desc: not available
Url : http://osflash.org/pipermail/papervision3d_osflash.org/attachments/20071124/8eab6b2b/attachment.obj
More information about the Papervision3D
mailing list