Search in sources :

Example 16 with Line

use of com.jme3.scene.shape.Line in project jmonkeyengine by jMonkeyEngine.

the class OBJLoader method readVector2.

protected Vector2f readVector2() {
    Vector2f v = new Vector2f();
    String line = scan.nextLine().trim();
    String[] split = line.split("\\s+");
    v.setX(Float.parseFloat(split[0].trim()));
    v.setY(Float.parseFloat(split[1].trim()));
    return v;
}
Also used : Vector2f(com.jme3.math.Vector2f)

Example 17 with Line

use of com.jme3.scene.shape.Line in project jmonkeyengine by jMonkeyEngine.

the class TestAndroidSensors method simpleInitApp.

@Override
public void simpleInitApp() {
    if (enableFlyByCameraRotation) {
        flyCam.setEnabled(true);
    } else {
        flyCam.setEnabled(false);
    }
    Mesh lineX = new Line(Vector3f.ZERO, Vector3f.ZERO.add(Vector3f.UNIT_X.mult(3)));
    Mesh lineY = new Line(Vector3f.ZERO, Vector3f.ZERO.add(Vector3f.UNIT_Y.mult(3)));
    Mesh lineZ = new Line(Vector3f.ZERO, Vector3f.ZERO.add(Vector3f.UNIT_Z.mult(3)));
    Geometry geoX = new Geometry("X", lineX);
    Material matX = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    matX.setColor("Color", ColorRGBA.Red);
    matX.getAdditionalRenderState().setLineWidth(30);
    geoX.setMaterial(matX);
    rootNode.attachChild(geoX);
    Geometry geoY = new Geometry("Y", lineY);
    Material matY = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    matY.setColor("Color", ColorRGBA.Green);
    matY.getAdditionalRenderState().setLineWidth(30);
    geoY.setMaterial(matY);
    rootNode.attachChild(geoY);
    Geometry geoZ = new Geometry("Z", lineZ);
    Material matZ = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    matZ.setColor("Color", ColorRGBA.Blue);
    matZ.getAdditionalRenderState().setLineWidth(30);
    geoZ.setMaterial(matZ);
    rootNode.attachChild(geoZ);
    Box b = new Box(1, 1, 1);
    geomZero = new Geometry("Box", b);
    Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat.setColor("Color", ColorRGBA.Yellow);
    Texture tex_ml = assetManager.loadTexture("Interface/Logo/Monkey.jpg");
    mat.setTexture("ColorMap", tex_ml);
    geomZero.setMaterial(mat);
    geomZero.setLocalTranslation(Vector3f.ZERO);
    geomZero.setLocalRotation(Quaternion.IDENTITY);
    rootNode.attachChild(geomZero);
    // Touch (aka MouseInput.BUTTON_LEFT) is used to record the starting
    // orientation when using absolute rotations
    inputManager.addMapping("MouseClick", new MouseButtonTrigger(MouseInput.BUTTON_LEFT));
    inputManager.addListener(this, "MouseClick");
    Joystick[] joysticks = inputManager.getJoysticks();
    if (joysticks == null || joysticks.length < 1) {
        logger.log(Level.INFO, "Cannot find any joysticks!");
    } else {
        // Joysticks return a value of 0 to 1 based on how far the stick is
        // push on the axis. This value is then scaled based on how long
        // during the frame the joystick axis has been in that position.
        // If the joystick is push all the way for the whole frame,
        // then the value in onAnalog is equal to tpf.
        // If the joystick is push 1/2 way for the entire frame, then the
        // onAnalog value is 1/2 tpf.
        // Similarly, if the joystick is pushed to the maximum during a frame
        // the value in onAnalog will also be scaled.
        // For Android sensors, rotating the device 90deg is the same as
        // pushing an actual joystick axis to the maximum.
        logger.log(Level.INFO, "Number of joysticks: {0}", joysticks.length);
        JoystickAxis axis;
        for (Joystick joystick : joysticks) {
            // Get and display all axes in joystick.
            List<JoystickAxis> axes = joystick.getAxes();
            for (JoystickAxis joystickAxis : axes) {
                logger.log(Level.INFO, "{0} axis scan Name: {1}, LogicalId: {2}, AxisId: {3}", new Object[] { joystick.getName(), joystickAxis.getName(), joystickAxis.getLogicalId(), joystickAxis.getAxisId() });
            }
            // Get specific axis based on LogicalId of the JoystickAxis
            // If found, map axis
            axis = joystick.getAxis(SensorJoystickAxis.ORIENTATION_X);
            if (axis != null) {
                axis.assignAxis(ORIENTATION_X_PLUS, ORIENTATION_X_MINUS);
                inputManager.addListener(this, ORIENTATION_X_PLUS, ORIENTATION_X_MINUS);
                logger.log(Level.INFO, "Found {0} Joystick, assigning mapping for X axis: {1}, with max value: {2}", new Object[] { joystick.toString(), axis.toString(), ((SensorJoystickAxis) axis).getMaxRawValue() });
            }
            axis = joystick.getAxis(SensorJoystickAxis.ORIENTATION_Y);
            if (axis != null) {
                axis.assignAxis(ORIENTATION_Y_PLUS, ORIENTATION_Y_MINUS);
                inputManager.addListener(this, ORIENTATION_Y_PLUS, ORIENTATION_Y_MINUS);
                logger.log(Level.INFO, "Found {0} Joystick, assigning mapping for Y axis: {1}, with max value: {2}", new Object[] { joystick.toString(), axis.toString(), ((SensorJoystickAxis) axis).getMaxRawValue() });
            }
            axis = joystick.getAxis(SensorJoystickAxis.ORIENTATION_Z);
            if (axis != null) {
                axis.assignAxis(ORIENTATION_Z_PLUS, ORIENTATION_Z_MINUS);
                inputManager.addListener(this, ORIENTATION_Z_PLUS, ORIENTATION_Z_MINUS);
                logger.log(Level.INFO, "Found {0} Joystick, assigning mapping for Z axis: {1}, with max value: {2}", new Object[] { joystick.toString(), axis.toString(), ((SensorJoystickAxis) axis).getMaxRawValue() });
            }
            joystickMap.put(joystick.getJoyId(), joystick);
        }
    }
}
Also used : Line(com.jme3.scene.shape.Line) Geometry(com.jme3.scene.Geometry) Joystick(com.jme3.input.Joystick) Mesh(com.jme3.scene.Mesh) Material(com.jme3.material.Material) Box(com.jme3.scene.shape.Box) MouseButtonTrigger(com.jme3.input.controls.MouseButtonTrigger) SensorJoystickAxis(com.jme3.input.SensorJoystickAxis) JoystickAxis(com.jme3.input.JoystickAxis) Texture(com.jme3.texture.Texture)

Example 18 with Line

use of com.jme3.scene.shape.Line in project jmonkeyengine by jMonkeyEngine.

the class BoneEnvelope method isInEnvelope.

/**
     * The method verifies if the given point is inside the envelope.
     * @param point
     *            the point in 3D space (MUST be in a world coordinate space)
     * @return <b>true</b> if the point is inside the envelope and <b>false</b> otherwise
     */
public boolean isInEnvelope(Vector3f point) {
    Vector3f v = tail.subtract(head);
    float boneLength = v.length();
    v.normalizeLocal();
    // computing a plane that contains 'point' and v is its normal vector
    // the plane's equation is: Ax + By + Cz + D = 0, where v = [A, B, C]
    float D = -v.dot(point);
    // computing a point where a line that contains head and tail crosses the plane
    float temp = -(v.dot(head) + D) / v.dot(v);
    Vector3f p = head.add(v.x * temp, v.y * temp, v.z * temp);
    // determining if the point p is on the same or other side of head than the tail point
    Vector3f headToPointOnLineVector = p.subtract(head);
    float headToPointLength = headToPointOnLineVector.length();
    // the length of v is already = 1; cosinus should be either 1, 0 or -1
    float cosinus = headToPointOnLineVector.dot(v) / headToPointLength;
    if (cosinus < 0 && headToPointLength > boneHeadRadius || headToPointLength > boneLength + boneTailRadius) {
        // the point is outside the anvelope
        return false;
    }
    // now check if the point is inside and envelope
    float pointDistanceFromLine = point.subtract(p).length(), maximumDistance = 0;
    if (cosinus < 0) {
        // checking if the distance from p to point is inside the half sphere defined by head envelope
        // compute the distance from the line to the half sphere border
        maximumDistance = boneHeadRadius;
    } else if (headToPointLength < boneLength) {
        // compute the maximum available distance
        if (boneTailRadius > boneHeadRadius) {
            // compute the distance from head to p
            float headToPDistance = p.subtract(head).length();
            // from tangens function we have
            float x = headToPDistance * ((boneTailRadius - boneHeadRadius) / boneLength);
            maximumDistance = x + boneHeadRadius;
        } else if (boneTailRadius < boneHeadRadius) {
            // compute the distance from head to p
            float tailToPDistance = p.subtract(tail).length();
            // from tangens function we have
            float x = tailToPDistance * ((boneHeadRadius - boneTailRadius) / boneLength);
            maximumDistance = x + boneTailRadius;
        } else {
            maximumDistance = boneTailRadius;
        }
    } else {
        // checking if the distance from p to point is inside the half sphere defined by tail envelope
        maximumDistance = boneTailRadius;
    }
    return pointDistanceFromLine <= maximumDistance + distance;
}
Also used : Vector3f(com.jme3.math.Vector3f)

Example 19 with Line

use of com.jme3.scene.shape.Line in project jmonkeyengine by jMonkeyEngine.

the class CurvesHelper method transformBevel.

/**
     * The method transforms the bevel along the curve.
     * 
     * @param bevel
     *            the bevel to be transformed
     * @param prevPos
     *            previous curve point
     * @param currPos
     *            current curve point (here the center of the new bevel will be
     *            set)
     * @param nextPos
     *            next curve point
     * @return points of transformed bevel
     */
protected Vector3f[] transformBevel(Vector3f[] bevel, Vector3f prevPos, Vector3f currPos, Vector3f nextPos) {
    bevel = bevel.clone();
    // currPos and directionVector define the line in 3D space
    Vector3f directionVector = prevPos != null ? currPos.subtract(prevPos) : nextPos.subtract(currPos);
    directionVector.normalizeLocal();
    // plane is described by equation: Ax + By + Cz + D = 0 where planeNormal = [A, B, C] and D = -(Ax + By + Cz)
    Vector3f planeNormal = null;
    if (prevPos != null) {
        planeNormal = currPos.subtract(prevPos).normalizeLocal();
        if (nextPos != null) {
            planeNormal.addLocal(nextPos.subtract(currPos).normalizeLocal()).normalizeLocal();
        }
    } else {
        planeNormal = nextPos.subtract(currPos).normalizeLocal();
    }
    // D = -(Ax + By + Cz)
    float D = -planeNormal.dot(currPos);
    // now we need to compute paralell cast of each bevel point on the plane, the leading line is already known
    // parametric equation of a line: x = px + vx * t; y = py + vy * t; z = pz + vz * t
    // where p = currPos and v = directionVector
    // using x, y and z in plane equation we get value of 't' that will allow us to compute the point where plane and line cross
    float temp = planeNormal.dot(directionVector);
    for (int i = 0; i < bevel.length; ++i) {
        float t = -(planeNormal.dot(bevel[i]) + D) / temp;
        if (fixUpAxis) {
            bevel[i] = new Vector3f(bevel[i].x + directionVector.x * t, bevel[i].y + directionVector.y * t, bevel[i].z + directionVector.z * t);
        } else {
            bevel[i] = new Vector3f(bevel[i].x + directionVector.x * t, -bevel[i].z + directionVector.z * t, bevel[i].y + directionVector.y * t);
        }
    }
    return bevel;
}
Also used : Vector3f(com.jme3.math.Vector3f)

Example 20 with Line

use of com.jme3.scene.shape.Line in project jmonkeyengine by jMonkeyEngine.

the class BasicProfiler method createMesh.

protected final void createMesh() {
    if (mesh == null) {
        mesh = new Mesh();
        mesh.setMode(Mesh.Mode.Lines);
    }
    mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3));
    FloatBuffer cb = BufferUtils.createFloatBuffer(size * 4 * 4);
    for (int i = 0; i < size; i++) {
        // For each index we add 4 colors, one for each line
        // endpoint for two layers.
        cb.put(0.5f).put(0.5f).put(0).put(1);
        cb.put(1).put(1).put(0).put(1);
        cb.put(0).put(0.5f).put(0.5f).put(1);
        cb.put(0).put(1).put(1).put(1);
    }
    mesh.setBuffer(Type.Color, 4, cb);
}
Also used : Mesh(com.jme3.scene.Mesh) FloatBuffer(java.nio.FloatBuffer)

Aggregations

Vector3f (com.jme3.math.Vector3f)8 Material (com.jme3.material.Material)5 Geometry (com.jme3.scene.Geometry)5 Statement (com.jme3.util.blockparser.Statement)4 IOException (java.io.IOException)4 IndexBuffer (com.jme3.scene.mesh.IndexBuffer)3 FloatBuffer (java.nio.FloatBuffer)3 AssetLoadException (com.jme3.asset.AssetLoadException)2 ShaderNodeDefinitionKey (com.jme3.asset.ShaderNodeDefinitionKey)2 Vector2f (com.jme3.math.Vector2f)2 Mesh (com.jme3.scene.Mesh)2 Box (com.jme3.scene.shape.Box)2 Curve (com.jme3.scene.shape.Curve)2 Line (com.jme3.scene.shape.Line)2 Texture (com.jme3.texture.Texture)2 BufferedReader (java.io.BufferedReader)2 InputStream (java.io.InputStream)2 InputStreamReader (java.io.InputStreamReader)2 ArrayList (java.util.ArrayList)2 AssetInfo (com.jme3.asset.AssetInfo)1