Hi,
   Seeing as your question follows two others that are similar, I decided to
give you a few short code clips.  The methods below are from a program where I
needed to periodically move the viewer to a new nearby location.  I did this by
keeping track of three parameters; a point where the viewer (camera)is at, the
point that the camera is looking towards, and a vector which defines the up
direction on the screen (initially new Vector3d(0.0d, 1.0d, 0.0d) ).   Note that
if I tilt the camera up or down, then the 'up vector' is no longer perpendicular
to the direction you are looking.  To correct that I cross the up vector with
the look direction which gives me a new left/right vector perpendicular to the
other two.  I then reverse the process and cross the left/right vector with the
look direction to give a corrected up dirction which is now perpendicular to the
view.  Note that there will be subtle differences between each of the methods
you implement for the different move/tilt options.
   Hope this helps some of you newer guys out there, but I suggest you take a
look at some of the graphic texts available.  To work in Java 3D you really need
to have at least a basic understanding of  coordinate systems, vectors and
matrix math.
        - Gary Graf

  /**
     * This method will change the views position (from point) and rotate it
     * about the look at point in such a manner that it appears the viewer is
     * moving perpendicularly left with respect to the object and field of view.

     *
     * @param stepSize - An integer which is the number of degress of rotation
     * about the view point (look at point) that the image will be moved.
     */
  public void moveLeft(int stepSize){
    double rotInRadians = -(stepSize * degreeToRadian);

      //Translate fromPoint to position relative to center of rotation (toPoint)

    fromPoint.sub(toPoint);

        //Move camera in orbit to left
    AxisAngle4d rotAxis = new AxisAngle4d(upDirection, rotInRadians);
    Matrix3d rotMatrix = new Matrix3d();
    rotMatrix.set(rotAxis);
    rotMatrix.transform(fromPoint);
    fromPoint.add(toPoint);

    positionCamera();
  } //end moveLeft()


    /**
     * This method will change the views position (look at point) and rotate it
     * about the viewer's position in such a manner that it appears the viewer
     * tilting his head up with respect to the object and field of view.
     *
     * @param stepSize - A float which is the number of degrees of rotation
     * about the viewer's position that the image will be moved.
     */
  public void tiltUp(float stepSize){
    Vector3d rightDir = new Vector3d();
    double rotInRadians = -(stepSize * degreeToRadian);

      //Find original look direction vector
    Vector3d lookDir = new Vector3d(fromPoint);
    lookDir.sub(toPoint);

      //Compute an orthagonal vector to later rebuild the up vector
    rightDir.cross(lookDir, upDirection);
    rightDir.normalize();

      //Translate fromPoint to position relative to center of rotation (toPoint)

    toPoint.sub(fromPoint);

      //Rotate the to point to effect the tilt
    AxisAngle4d rotAxis = new AxisAngle4d(rightDir, rotInRadians);
    Matrix3d rotMatrix = new Matrix3d();
    rotMatrix.set(rotAxis);
    rotMatrix.transform(toPoint);
    toPoint.add(fromPoint);

      //Compute new up vector
    lookDir = new Vector3d(fromPoint);
    lookDir.sub(toPoint);
    upDirection.cross(rightDir, lookDir);
    upDirection.normalize();

    positionCamera();
  } //end tiltUp()

    /**
     * This method moves the viewer's position to the most currently defined
     * from point and orients the view towards the targeted look point
     * (originally the object center).
     * the upper left corner of the view.
     */
  public void positionCamera(){
      //Set the camera to the new location
    Transform3D viewRotTrans = new Transform3D();

    viewRotTrans.lookAt(fromPoint, toPoint, upDirection);
    viewRotTrans.invert();

       //   Note:  viewTransGrp =
universe.getViewingPlatform().getViewPlatformTransform();
    viewTransGrp.setTransform(viewRotTrans);
  } //end positionCamera()



J�rgen Vansteelant wrote:

> Helo,
>
> can someone explain me the method lookAt(Point3d eye, Point3d center,
> Vector3d up)
> I think I might use it , but I have some problems with the vector parameter.
>
> If anyone has an example that uses this method ,please post it if you want!
>
> Thank you.
> Jurgen
>
> **** DISCLAIMER ****
> The contents of this e-mail are intended for the named addressee only.
> It contains information which may be confidential and which may also be
> privileged. Unless you are the named addressee (or authorised to receive
> for the addressee) you may not copy or use it, or disclose it to anyone
> else. If you received it in error please notify us immediately and then
> destroy it. Further, we make every effort to keep our network free from
> viruses. However, you do need to verify that this email and any attachments
> are free of viruses as we can take no responsibility for any computer virus
> which might be transferred by way of this e-mail.
>
> ===========================================================================
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff JAVA3D-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to