[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