Package com.jme3.math

Examples of com.jme3.math.Transform


         */
    }
   
    @Override
    public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
        Transform ownerTransform = this.getOwnerTransform(ownerSpace);
       
        ownerTransform.getRotation().toAngles(angles);
        // make sure that the rotations are always in range [0, 2PI)
        // TODO: same comment as in constructor
        /*
         * for (int i = 0; i < 3; ++i) { int multFactor =
         * (int)Math.abs(angles[i] / FastMath.TWO_PI) ; if(angles[i] < 0) {
         * angles[i] += FastMath.TWO_PI * (multFactor + 1); } else { angles[i]
         * -= FastMath.TWO_PI * multFactor; } }
         */
        if ((flag & LIMIT_XROT) != 0) {
            float difference = 0.0f;
            if (angles[0] < limits[0][0]) {
                difference = (angles[0] - limits[0][0]) * influence;
            } else if (angles[0] > limits[0][1]) {
                difference = (angles[0] - limits[0][1]) * influence;
            }
            angles[0] -= difference;
        }
        if ((flag & LIMIT_YROT) != 0) {
            float difference = 0.0f;
            if (angles[1] < limits[1][0]) {
                difference = (angles[1] - limits[1][0]) * influence;
            } else if (angles[1] > limits[1][1]) {
                difference = (angles[1] - limits[1][1]) * influence;
            }
            angles[1] -= difference;
        }
        if ((flag & LIMIT_ZROT) != 0) {
            float difference = 0.0f;
            if (angles[2] < limits[2][0]) {
                difference = (angles[2] - limits[2][0]) * influence;
            } else if (angles[2] > limits[2][1]) {
                difference = (angles[2] - limits[2][1]) * influence;
            }
            angles[2] -= difference;
        }
        ownerTransform.getRotation().fromAngles(angles);
       
        this.applyOwnerTransform(ownerTransform, ownerSpace);
    }
View Full Code Here


        }
    }
   
    @Override
    public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
        Transform ownerTransform = this.getOwnerTransform(ownerSpace);
       
        Vector3f ownerScale = ownerTransform.getScale();
        Vector3f targetScale = targetTransform.getScale();

        Vector3f offset = Vector3f.ZERO;
        if ((flag & LOCLIKE_OFFSET) != 0) {// we add the original scale to the
                                           // copied scale
View Full Code Here

            for (int i = 0; i < boneContexts.length; ++i) {
                Bone bone = boneContexts[i].getBone();

                bone.updateWorldVectors();
                Transform boneWorldTransform = constraintHelper.getTransform(boneContexts[i].getArmatureObjectOMA(), bone.getName(), Space.CONSTRAINT_SPACE_WORLD);

                Vector3f head = boneWorldTransform.getTranslation();
                Vector3f tail = head.add(bone.getModelSpaceRotation().mult(Vector3f.UNIT_Y.mult(boneContexts[i].getLength())));

                Vector3f vectorA = tail.subtract(head);
                float a = vectorA.length();
                vectorA.normalizeLocal();

                Vector3f vectorC = targetTransform.getTranslation().subtract(head);
                float c = vectorC.length();
                vectorC.normalizeLocal();

                b -= a;
                float theta = 0;

                if (c >= a + b) {
                    theta = vectorA.angleBetween(vectorC);
                } else if (c <= FastMath.abs(a - b) && i < boneContexts.length - 1) {
                    theta = vectorA.angleBetween(vectorC) - FastMath.HALF_PI;
                } else {
                    theta = vectorA.angleBetween(vectorC) - FastMath.acos(-(b * b - a * a - c * c) / (2 * a * c));
                }
               
                theta *= influence;

                if (theta != 0) {
                    Vector3f vectorR = vectorA.cross(vectorC);
                    boneWorldRotation.fromAngleAxis(theta, vectorR);
                    boneWorldTransform.getRotation().multLocal(boneWorldRotation);
                    constraintHelper.applyTransform(boneContexts[i].getArmatureObjectOMA(), bone.getName(), Space.CONSTRAINT_SPACE_WORLD, boneWorldTransform);
                }

                bone.updateWorldVectors();
                alteredOmas.add(boneContexts[i].getBoneOma());
View Full Code Here

                tempVars.tempMat42.invertLocal();
            }
            m = m.multLocal(tempVars.tempMat42);
            tempVars.release();

            targetTransform = new Transform(m.toTranslationVector(), m.toRotationQuat(), m.toScaleVector());
        }
        this.applyOwnerTransform(targetTransform, ownerSpace);
    }
View Full Code Here

            animControl = nodeWithAnimationControl.getControl(AnimControl.class);

            boneStartTransforms = new HashMap<Bone, Transform>();
            for (int i = 0; i < skeleton.getBoneCount(); ++i) {
                Bone bone = skeleton.getBone(i);
                boneStartTransforms.put(bone, new Transform(bone.getWorldBindPosition(), bone.getWorldBindRotation(), bone.getWorldBindScale()));
            }
        } else {
            if (rootNode && spatial.getParent() != null) {
                throw new IllegalStateException("Given spatial must be a root node!");
            }
View Full Code Here

            for (SimulationNode child : children) {
                child.reset();
            }
        } else if (skeleton != null) {
            for (Entry<Bone, Transform> entry : boneStartTransforms.entrySet()) {
                Transform t = entry.getValue();
                entry.getKey().setBindTransforms(t.getTranslation(), t.getRotation(), t.getScale());
            }
            skeleton.reset();
        }
    }
View Full Code Here

                        for (Entry<Integer, VirtualTrack> trackEntry : tracks.entrySet()) {
                            Integer boneIndex = trackEntry.getKey();
                            Bone bone = skeleton.getBone(boneIndex);

                            // take the initial transform of a bone and its virtual track
                            Transform previousTransform = previousTransforms.get(boneIndex);
                            VirtualTrack vTrack = trackEntry.getValue();

                            Vector3f bonePositionDifference = bone.getLocalPosition().subtract(previousTransform.getTranslation());
                            Quaternion boneRotationDifference = bone.getLocalRotation().mult(previousTransform.getRotation().inverse()).normalizeLocal();
                            Vector3f boneScaleDifference = bone.getLocalScale().divide(previousTransform.getScale());
                            if (frame > 0) {
                                bonePositionDifference = vTrack.translations.get(frame - 1).add(bonePositionDifference);
                                boneRotationDifference = vTrack.rotations.get(frame - 1).mult(boneRotationDifference);
                                boneScaleDifference = vTrack.scales.get(frame - 1).mult(boneScaleDifference);
                            }
                            vTrack.setTransform(frame, new Transform(bonePositionDifference, boneRotationDifference, boneScaleDifference));

                            previousTransform.setTranslation(bone.getLocalPosition());
                            previousTransform.setRotation(bone.getLocalRotation());
                            previousTransform.setScale(bone.getLocalScale());
                        }
                    }

                    for (Entry<Integer, VirtualTrack> trackEntry : tracks.entrySet()) {
                        Track newTrack = trackEntry.getValue().getAsBoneTrack(trackEntry.getKey());
View Full Code Here

     */
    private Map<Integer, Transform> getInitialTransforms() {
        Map<Integer, Transform> result = new HashMap<Integer, Transform>();
        for (int i = 0; i < skeleton.getBoneCount(); ++i) {
            Bone bone = skeleton.getBone(i);
            result.put(i, new Transform(bone.getLocalPosition(), bone.getLocalRotation(), bone.getLocalScale()));
        }
        return result;
    }
View Full Code Here

     * Applies the constraint to owner (and in some cases can alter other bones of the skeleton).
     * @param frame
     *            the frame of the animation
     */
    public void apply(int frame) {
        Transform targetTransform = targetOMA != null ? constraintHelper.getTransform(targetOMA, subtargetName, targetSpace) : null;
        constraintDefinition.bake(ownerSpace, targetSpace, targetTransform, ipo.calculateValue(frame));
    }
View Full Code Here

    }

    @Override
    public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
        if (volume != 1 && influence > 0) {
            Transform ownerTransform = this.getOwnerTransform(ownerSpace);
            switch (flag) {
                case FLAG_MASK_X:
                    ownerTransform.getScale().multLocal(1, volume, volume);
                    break;
                case FLAG_MASK_Y:
                    ownerTransform.getScale().multLocal(volume, 1, volume);
                    break;
                case FLAG_MASK_Z:
                    ownerTransform.getScale().multLocal(volume, volume, 1);
                    break;
                default:
                    throw new IllegalStateException("Unknown flag value: " + flag);
            }
            this.applyOwnerTransform(ownerTransform, ownerSpace);
View Full Code Here

TOP

Related Classes of com.jme3.math.Transform

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.