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".