Hi Josh,

thank you very much it exactly what I was searching for. Just another question:

What the floatEq function does??

Serge


Selon Justin Couch <[EMAIL PROTECTED]>:

> Serge Bernier wrote:
>
> > Hi all,
> >
> > does anyone know how to convert the scaleOrientation information in a
> VRML
> > file to a Transform3D from Java3D???
>
> Not directly. We do it as part of a large series of matrix multiplies
> for all the Transform fields to make the final matrix that we use for
> Java3d.
>
> Here's the complete code from inside our Transform node implementation:
>
>      /**
>       * Calculate transforms needed to handle VRML semantics
>       *  formula: T x C x R x SR x S x -SR x -C
>       */
>      private void updateTransform() {
>
>          //System.out.println(this);
>          tempVec.x = -vfCenter[0];
>          tempVec.y = -vfCenter[1];
>          tempVec.z = -vfCenter[2];
>
>          matrix.setIdentity();
>          matrix.setTranslation(tempVec);
>
>          float scaleVal = 1.0f;
>
>          if (floatEq(vfScale[0], vfScale[1]) &&
>              floatEq(vfScale[0], vfScale[2])) {
>
>              scaleVal = vfScale[0];
>              tempMtx1.set(scaleVal);
>              //System.out.println("S" + tempMtx1);
>
>          } else {
>              // non-uniform scale
>              //System.out.println("Non Uniform Scale");
>              tempAxis.x = vfScaleOrientation[0];
>              tempAxis.y = vfScaleOrientation[1];
>              tempAxis.z = vfScaleOrientation[2];
>              tempAxis.angle = -vfScaleOrientation[3];
>
>              double tempAxisNormalizer =
>                  1 / Math.sqrt(tempAxis.x * tempAxis.x +
>                                tempAxis.y * tempAxis.y +
>                                tempAxis.z * tempAxis.z);
>
>              tempAxis.x *= tempAxisNormalizer;
>              tempAxis.y *= tempAxisNormalizer;
>              tempAxis.z *= tempAxisNormalizer;
>
>              tempMtx1.set(tempAxis);
>              tempMtx2.mul(tempMtx1, matrix);
>
>              // Set the scale by individually setting each element
>              tempMtx1.setIdentity();
>              tempMtx1.m00 = vfScale[0];
>              tempMtx1.m11 = vfScale[1];
>              tempMtx1.m22 = vfScale[2];
>
>              matrix.mul(tempMtx1, tempMtx2);
>
>              tempAxis.x = vfScaleOrientation[0];
>              tempAxis.y = vfScaleOrientation[1];
>              tempAxis.z = vfScaleOrientation[2];
>              tempAxis.angle = vfScaleOrientation[3];
>              tempMtx1.set(tempAxis);
>          }
>
>          tempMtx2.mul(tempMtx1, matrix);
>
>          //System.out.println("Sx-C" + tempMtx2);
>          float magSq = vfRotation[0] * vfRotation[0] +
>                        vfRotation[1] * vfRotation[1] +
>                        vfRotation[2] * vfRotation[2];
>
>          if(magSq < ZEROEPS) {
>              tempAxis.x = 0;
>              tempAxis.y = 0;
>              tempAxis.z = 1;
>              tempAxis.angle = 0;
>          } else {
>              if ((magSq > 1.01) || (magSq < 0.99)) {
>
>                  float mag = (float)(1 / Math.sqrt(magSq));
>                  tempAxis.x = vfRotation[0] * mag;
>                  tempAxis.y = vfRotation[1] * mag;
>                  tempAxis.z = vfRotation[2] * mag;
>              } else {
>                  tempAxis.x = vfRotation[0];
>                  tempAxis.y = vfRotation[1];
>                  tempAxis.z = vfRotation[2];
>              }
>
>              tempAxis.angle = vfRotation[3];
>          }
>
>          tempMtx1.set(tempAxis);
>          //System.out.println("R" + tempMtx1);
>
>          matrix.mul(tempMtx1, tempMtx2);
>          //System.out.println("RxSx-C" + matrix);
>
>          tempVec.x = vfCenter[0];
>          tempVec.y = vfCenter[1];
>          tempVec.z = vfCenter[2];
>
>          tempMtx1.setIdentity();
>          tempMtx1.setTranslation(tempVec);
>          //System.out.println("C" + tempMtx1);
>
>          tempMtx2.mul(tempMtx1, matrix);
>          //System.out.println("CxRxSx-C" + tempMtx2);
>
>          tempVec.x = vfTranslation[0];
>          tempVec.y = vfTranslation[1];
>          tempVec.z = vfTranslation[2];
>
>          tempMtx1.setIdentity();
>          tempMtx1.setTranslation(tempVec);
>
>          matrix.mul(tempMtx1, tempMtx2);
>
>          transform.set(matrix);
>          implTG.setTransform(transform);
>      }
>
> --
> Justin Couch                         http://www.vlc.com.au/~justin/
> Java Architect & Bit Twiddler              http://www.yumetech.com/
> Author, Java 3D FAQ Maintainer                  http://www.j3d.org/
> -------------------------------------------------------------------
> "Look through the lens, and the light breaks down into many lights.
>   Turn it or move it, and a new set of arrangements appears... is it
>   a single light or many lights, lights that one must know how to
>   distinguish, recognise and appreciate? Is it one light with many
>   frames or one frame for many lights?"      -Subcomandante Marcos
> -------------------------------------------------------------------
>
> ===========================================================================
> 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