diff -r dc7c549001d5 -r 85266cc22c7f javauis/m3g_qt/javasrc/javax/microedition/m3g/Transform.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/m3g_qt/javasrc/javax/microedition/m3g/Transform.java Fri Jun 11 13:33:44 2010 +0300 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +package javax.microedition.m3g; + +public class Transform +{ + //------------------------------------------------------------------ + // Static data + //------------------------------------------------------------------ + + //------------------------------------------------------------------ + // Instance data + //------------------------------------------------------------------ + + // Check size from m3g_math.h Matrix + byte[] matrix = new byte[72]; + + //------------------------------------------------------------------ + // Constructor(s) + //------------------------------------------------------------------ + + public Transform() + { + if (!Platform.uiThreadAvailable()) + { + throw new Error("UI thread not initialized"); + } + setIdentity(); + } + + /** + */ + public Transform(Transform other) + { + if (!Platform.uiThreadAvailable()) + { + throw new Error("UI thread not initialized"); + } + set(other); + } + + //------------------------------------------------------------------ + // Public methods + //------------------------------------------------------------------ + + public void setIdentity() + { + _setIdentity(matrix); + } + + public void set(Transform transform) + { + System.arraycopy(transform.matrix, 0, + this.matrix, 0, + this.matrix.length); + } + + public void set(float[] matrix) + { + _setMatrix(this.matrix, matrix); + } + + public void get(float[] matrix) + { + _getMatrix(this.matrix, matrix); + } + + public void invert() + { + _invert(matrix); + } + + public void transpose() + { + _transpose(matrix); + } + + public void postMultiply(Transform transform) + { + _mul(this.matrix, this.matrix, transform.matrix); + } + + public void postScale(float sx, float sy, float sz) + { + _scale(matrix, sx, sy , sz); + } + + /** + */ + public void postRotate(float angle, float ax, float ay, float az) + { + _rotate(matrix, angle, ax, ay, az); + } + + /** + */ + public void postRotateQuat(float qx, float qy, float qz, float qw) + { + _rotateQuat(matrix, qx, qy, qz, qw); + } + + /** + */ + public void postTranslate(float tx, float ty, float tz) + { + _translate(matrix, tx, ty, tz); + } + + /** + */ + public void transform(float[] v) + { + if ((v.length % 4) != 0) + { + throw new IllegalArgumentException(); + } + + if (v.length != 0) + { + _transformTable(matrix, v); + } + } + + /** + */ + public void transform(VertexArray in, float[] out, boolean W) + { + if (in == null || out == null) + { + throw new NullPointerException(); + } + + _transformArray(matrix, in.handle, out, W); + } + + //------------------------------------------------------------------ + // Private methods + //------------------------------------------------------------------ + + // Native methods + private static native void _mul(byte[] prod, byte[] left, byte[] right); + private static native void _setIdentity(byte[] matrix); + private static native void _setMatrix(byte[] matrix, float[] srcMatrix); + private static native void _getMatrix(byte[] matrix, float[] dstMatrix); + private static native void _invert(byte[] matrix); + private static native void _transpose(byte[] matrix); + private static native void _rotate(byte[] matrix, float angle, float ax, float ay, float az); + private static native void _rotateQuat(byte[] matrix, float qx, float qy, float qz, float qw); + private static native void _scale(byte[] matrix, float sx, float sy, float sz); + private static native void _translate(byte[] matrix, float tx, float ty, float tz); + private static native void _transformTable(byte[] matrix, float[] v); + private static native void _transformArray(byte[] matrix, int handle, float[] out, boolean W); +}