Search in sources :

Example 71 with Vector3

use of net.drewke.tdme.math.Vector3 in project tdme by andreasdr.

the class ModelHelper method prepareForIndexedRendering.

/**
	 * Prepares this group for indexed rendering
	 * @param groups
	 */
private static void prepareForIndexedRendering(HashMap<String, Group> groups) {
    // we need to prepare the group for indexed rendering
    for (Group group : groups.getValuesIterator()) {
        Vector3[] groupVertices = group.getVertices();
        Vector3[] groupNormals = group.getNormals();
        TextureCoordinate[] groupTextureCoordinates = group.getTextureCoordinates();
        Vector3[] groupTangents = group.getTangents();
        Vector3[] groupBitangents = group.getBitangents();
        int groupFaceCount = group.getFaceCount();
        int[] verticeMapping = new int[groupFaceCount * 3];
        Vector3[] indexedVertices = new Vector3[groupFaceCount * 3];
        Vector3[] indexedNormals = new Vector3[groupFaceCount * 3];
        TextureCoordinate[] indexedTextureCoordinates = groupTextureCoordinates != null ? new TextureCoordinate[groupFaceCount * 3] : null;
        Vector3[] indexedTangents = groupTangents != null ? new Vector3[groupFaceCount * 3] : null;
        Vector3[] indexedBitangents = groupBitangents != null ? new Vector3[groupFaceCount * 3] : null;
        // construct indexed vertex data suitable for GL
        int preparedIndices = 0;
        for (FacesEntity facesEntity : group.getFacesEntities()) {
            for (Face face : facesEntity.getFaces()) {
                int[] faceVertexIndices = face.getVertexIndices();
                int[] faceNormalIndices = face.getNormalIndices();
                int[] faceTextureIndices = face.getTextureCoordinateIndices();
                int[] faceTangentIndices = face.getTangentIndices();
                int[] faceBitangentIndices = face.getBitangentIndices();
                int[] indexedFaceVertexIndices = new int[3];
                for (int idx = 0; idx < 3; idx++) {
                    int groupVertexIndex = faceVertexIndices[idx];
                    int groupNormalIndex = faceNormalIndices[idx];
                    int groupTextureCoordinateIndex = faceTextureIndices != null ? faceTextureIndices[idx] : 0;
                    int groupTangentIndex = faceTangentIndices != null ? faceTangentIndices[idx] : 0;
                    int groupBitangentIndex = faceBitangentIndices != null ? faceBitangentIndices[idx] : 0;
                    Vector3 vertex = groupVertices[groupVertexIndex];
                    Vector3 normal = groupNormals[groupNormalIndex];
                    TextureCoordinate textureCoordinate = groupTextureCoordinates != null ? groupTextureCoordinates[groupTextureCoordinateIndex] : null;
                    Vector3 tangent = groupTangents != null ? groupTangents[groupTangentIndex] : null;
                    Vector3 bitangent = groupBitangents != null ? groupBitangents[groupBitangentIndex] : null;
                    // check for match
                    int newIndex = preparedIndices;
                    for (int i = 0; i < preparedIndices; i++) if (indexedVertices[i].equals(vertex) && indexedNormals[i].equals(normal) && (groupTextureCoordinates == null || indexedTextureCoordinates[i].equals(textureCoordinate)) && (groupTangents == null || indexedTangents[i].equals(tangent)) && (groupBitangents == null || indexedBitangents[i].equals(bitangent))) {
                        //
                        newIndex = i;
                        break;
                    }
                    if (newIndex == preparedIndices)
                        preparedIndices++;
                    verticeMapping[newIndex] = groupVertexIndex;
                    indexedVertices[newIndex] = vertex;
                    indexedNormals[newIndex] = normal;
                    if (groupTextureCoordinates != null)
                        indexedTextureCoordinates[newIndex] = textureCoordinate;
                    if (groupTangents != null)
                        indexedTangents[newIndex] = tangent;
                    if (groupBitangents != null)
                        indexedBitangents[newIndex] = bitangent;
                    indexedFaceVertexIndices[idx] = newIndex;
                }
                face.setIndexedRenderingIndices(indexedFaceVertexIndices);
            }
        }
        // remap skinning
        Skinning skinning = group.getSkinning();
        if (skinning != null) {
            prepareForIndexedRendering(skinning, verticeMapping, preparedIndices);
        }
        // realign vertex data to new size
        Vector3[] vertices = new Vector3[preparedIndices];
        System.arraycopy(indexedVertices, 0, vertices, 0, preparedIndices);
        group.setVertices(vertices);
        Vector3[] normals = new Vector3[preparedIndices];
        System.arraycopy(indexedNormals, 0, normals, 0, preparedIndices);
        group.setNormals(normals);
        if (groupTextureCoordinates != null) {
            TextureCoordinate[] textureCoordinates = new TextureCoordinate[preparedIndices];
            System.arraycopy(indexedTextureCoordinates, 0, textureCoordinates, 0, preparedIndices);
            group.setTextureCoordinates(textureCoordinates);
        }
        if (groupTangents != null && groupBitangents != null) {
            Vector3[] tangents = new Vector3[preparedIndices];
            System.arraycopy(indexedTangents, 0, tangents, 0, preparedIndices);
            group.setTangents(tangents);
            Vector3[] bitangents = new Vector3[preparedIndices];
            System.arraycopy(indexedBitangents, 0, bitangents, 0, preparedIndices);
            group.setBitangents(bitangents);
        }
        // process sub groups
        prepareForIndexedRendering(group.getSubGroups());
    }
}
Also used : Vector3(net.drewke.tdme.math.Vector3)

Example 72 with Vector3

use of net.drewke.tdme.math.Vector3 in project tdme by andreasdr.

the class PhysicsTest2 method init.

/*
	 * (non-Javadoc)
	 * @see com.jogamp.opengl.GLEventListener#init(com.jogamp.opengl.GLAutoDrawable)
	 */
public void init(GLAutoDrawable drawable) {
    drawable.getGL().setSwapInterval(0);
    engine.init(drawable);
    Object3D entity;
    // cam
    Camera cam = engine.getCamera();
    // Test scenario serg
    cam.setZNear(0.1f);
    cam.setZFar(100.00f);
    cam.getLookFrom().set(0f, 30f, 30f);
    cam.getLookAt().set(0f, 0f, 0f);
    // lights
    Light light0 = engine.getLightAt(0);
    light0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getDiffuse().set(0.5f, 0.5f, 0.5f, 1f);
    light0.getSpecular().set(1f, 1f, 1f, 1f);
    light0.getPosition().set(0f, 20000f, 0f, 1f);
    light0.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light0.getPosition().getArray()));
    light0.setConstantAttenuation(0.5f);
    light0.setLinearAttenuation(0f);
    light0.setQuadraticAttenuation(0f);
    light0.setSpotExponent(0f);
    light0.setSpotCutOff(180f);
    light0.setEnabled(true);
    // ground
    OrientedBoundingBox ground = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(30f, 1f, 30f));
    Model groundModel = PrimitiveModel.createModel(ground, "ground_model");
    groundModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    groundModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    entity = new Object3D("ground", groundModel);
    entity.getTranslation().setY(-1f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("ground", true, RIGID_TYPEID_STANDARD, entity, ground, 0.5f);
    OrientedBoundingBox box = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(1f, 1f, 1f));
    Model boxModel = PrimitiveModel.createModel(box, "box_model");
    boxModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.5f, 0.5f, 1f);
    boxModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
    // boxes
    for (int i = 0; i < BOX_COUNT; i++) {
        entity = new Object3D("box" + i, boxModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(i * 2f + 1f);
        //entity.getTranslation().addX(i * 50f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("box" + i, true, RIGID_TYPEID_STANDARD, entity, box, 0f, 0.8f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
    }
}
Also used : OrientedBoundingBox(net.drewke.tdme.engine.primitives.OrientedBoundingBox) Light(net.drewke.tdme.engine.Light) Model(net.drewke.tdme.engine.model.Model) PrimitiveModel(net.drewke.tdme.engine.primitives.PrimitiveModel) Vector3(net.drewke.tdme.math.Vector3) Camera(net.drewke.tdme.engine.Camera) Object3D(net.drewke.tdme.engine.Object3D)

Example 73 with Vector3

use of net.drewke.tdme.math.Vector3 in project tdme by andreasdr.

the class PhysicsTest3 method init.

/*
	 * (non-Javadoc)
	 * @see com.jogamp.opengl.GLEventListener#init(com.jogamp.opengl.GLAutoDrawable)
	 */
public void init(GLAutoDrawable drawable) {
    drawable.getGL().setSwapInterval(0);
    engine.init(drawable);
    Object3D entity;
    // cam
    Camera cam = engine.getCamera();
    cam.setZNear(0.10f);
    cam.setZFar(50.00f);
    cam.getLookFrom().set(0f, 4f * 2.5f, -6f * 2.5f);
    cam.getLookAt().set(0f, 0.0f, 0f);
    cam.computeUpVector(cam.getLookFrom(), cam.getLookAt(), cam.getUpVector());
    // lights
    Light light0 = engine.getLightAt(0);
    light0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getDiffuse().set(0.5f, 0.5f, 0.5f, 1f);
    light0.getSpecular().set(1f, 1f, 1f, 1f);
    light0.getPosition().set(0f, 20000f, 0f, 1f);
    light0.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light0.getPosition().getArray()));
    light0.setConstantAttenuation(0.5f);
    light0.setLinearAttenuation(0f);
    light0.setQuadraticAttenuation(0f);
    light0.setSpotExponent(0f);
    light0.setSpotCutOff(180f);
    light0.setEnabled(true);
    // side
    OrientedBoundingBox side = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(1f, 16f, 8f));
    Model sideModel = PrimitiveModel.createModel(side, "side_model");
    sideModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    sideModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    // far
    OrientedBoundingBox nearFar = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(8f, 16f, 1f));
    Model nearFarModel = PrimitiveModel.createModel(nearFar, "far_model");
    nearFarModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
    nearFarModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
    // far
    entity = new Object3D("far", nearFarModel);
    entity.getTranslation().addZ(+9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("far", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
    // near
    entity = new Object3D("near", nearFarModel);
    entity.getTranslation().addZ(-9f);
    entity.getEffectColorMul().set(1f, 1f, 1f, 0f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("near", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
    // side left
    entity = new Object3D("sideright", sideModel);
    entity.getTranslation().addX(-9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("sideright", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
    // side right
    entity = new Object3D("sideleft", sideModel);
    entity.getTranslation().addX(9f);
    entity.update();
    engine.addEntity(entity);
    world.addStaticRigidBody("sideleft", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
    // box
    OrientedBoundingBox box = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.6f, 0.6f, 0.6f));
    Model boxModel = PrimitiveModel.createModel(box, "box_model");
    boxModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.5f, 0.5f, 1f);
    boxModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
    // boxes
    for (int i = 0; i < BOX_COUNT; i++) {
        entity = new Object3D("box" + i, boxModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(10f + i * 3.0f);
        entity.getTranslation().addX(-2f + i * 0.1f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("box" + i, true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
    }
    // stack
    for (int i = 0; i < BOXSTACK_COUNT; i++) {
        entity = new Object3D("box" + (BOX_COUNT + i), boxModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(1.6f + (i * 1.2f));
        entity.getTranslation().addX(+3f);
        entity.getTranslation().addZ(-5f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("box" + (BOX_COUNT + i), true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
    }
    // sphere
    Sphere sphere = new Sphere(new Vector3(0f, 0f, 0f), 0.4f);
    Model sphereModel = PrimitiveModel.createModel(sphere, "sphere_model");
    sphereModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.5f, 0.8f, 0.8f, 1f);
    sphereModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(0f, 1f, 1f, 1f);
    // spheres
    for (int i = 0; i < SPHERE_COUNT; i++) {
        entity = new Object3D("sphere" + i, sphereModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(12f + (i * 1f));
        entity.getTranslation().addX(0.45f * i - 3f);
        entity.getTranslation().addZ(0.1f * i - 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("sphere" + i, true, RIGID_TYPEID_STANDARD, entity, sphere, 0.75f, 0.4f, 10f, RigidBody.computeInertiaMatrix(sphere, 10f, 1f, 1f, 1f));
    }
    // sphere
    Capsule capsule = new Capsule(new Vector3(0f, 0.5f, 0f), new Vector3(0f, -0.5f, 0f), 0.25f);
    Model capsuleModel = PrimitiveModel.createModel(capsule, "capsule_model");
    capsuleModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.0f, 0.8f, 1f);
    capsuleModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 1f, 1f);
    //
    for (int i = 0; i < CAPSULE_COUNT; i++) {
        entity = new Object3D("capsule" + i, capsuleModel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(14f + (i * 2f));
        entity.getTranslation().addX((i * 0.5f));
        // entity.getPivot().set(capsule.getCenter());
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("capsule" + i, true, RIGID_TYPEID_STANDARD, entity, capsule, 0.0f, 0.4f, 3f, RigidBody.computeInertiaMatrix(capsule, 3f, 1f, 1f, 1f));
    }
    // sphere
    //Capsule capsuleBig = new Capsule(
    //	new Vector3(0f,+1f,0f),
    //	new Vector3(0f,-1f,0f),
    //	0.5f
    //);
    OrientedBoundingBox capsuleBig = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.5f, 1f, 0.5f));
    Model capsuleBigModel = PrimitiveModel.createModel(capsuleBig, "capsulebig_model");
    capsuleBigModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(1f, 0.8f, 0.8f, 1f);
    capsuleBigModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
    System.out.println(capsuleBig.getCenter());
    //
    entity = new Object3D("capsulebig1", capsuleBigModel);
    entity.setDynamicShadowingEnabled(true);
    entity.getTranslation().addY(5f);
    entity.getTranslation().addX(-2f);
    entity.update();
    engine.addEntity(entity);
    world.addRigidBody("capsulebig1", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 80f, RigidBody.getNoRotationInertiaMatrix());
    //
    entity = new Object3D("capsulebig2", capsuleBigModel);
    entity.setDynamicShadowingEnabled(true);
    entity.getTranslation().addY(5f);
    entity.getTranslation().addX(+2f);
    entity.update();
    engine.addEntity(entity);
    world.addRigidBody("capsulebig2", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 100f, RigidBody.getNoRotationInertiaMatrix());
    //
    try {
        Model _terrainModel = DAEReader.read("resources/tests/environment/terrain_test", "terrain_test.dae");
        _terrainModel.getImportTransformationsMatrix().scale(1.5f);
        entity = new Object3D("terrain", _terrainModel);
        entity.getTranslation().setY(-4f);
        entity.update();
        engine.addEntity(entity);
        ArrayList<ConvexMesh> groundConvexMeshes = new ArrayList<ConvexMesh>();
        ConvexMesh.createTerrainConvexMeshes(new Object3DModel(_terrainModel), groundConvexMeshes);
        for (int i = 0; i < groundConvexMeshes.size(); i++) {
            world.addStaticRigidBody("ground" + i, true, RIGID_TYPEID_STANDARD, entity, groundConvexMeshes.get(i), 0.5f);
        }
        // load barrel, set up bounding volume
        Model _barrel = DAEReader.read("resources/tests/models/barrel", "barrel.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh barrelBoundingVolume = new ConvexMesh(new Object3DModel(_barrel));
        // set up barrel 1 in 3d engine
        entity = new Object3D("barrel1", _barrel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(+4f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("barrel1", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
        // set up barrel 2 in 3d engine
        entity = new Object3D("barrel2", _barrel);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(+6f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("barrel2", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
        // load cone, set up bounding volume
        Model _cone = DAEReader.read("resources/tests/models/cone", "cone.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh coneBoundingVolume = new ConvexMesh(new Object3DModel(_cone));
        // set up cone 1 in 3d engine
        entity = new Object3D("cone1", _cone);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-4f);
        entity.getScale().set(3f, 3f, 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("cone1", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
        // set up cone 1 in 3d engine
        entity = new Object3D("cone2", _cone);
        entity.setDynamicShadowingEnabled(true);
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-5f);
        entity.getScale().set(3f, 3f, 3f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("cone2", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
        // load cone, set up bounding volume
        Model _tire = DAEReader.read("resources/tests/models/tire", "tire.dae");
        // _barrel.getImportTransformationsMatrix().scale(2f);
        ConvexMesh tireBoundingVolume = new ConvexMesh(new Object3DModel(_tire));
        // set up tire 1 in 3d engine
        entity = new Object3D("tire1", _tire);
        entity.setDynamicShadowingEnabled(true);
        entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-4f);
        entity.getTranslation().addZ(-2f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("tire1", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
        // set up tire 1 in 3d engine
        entity = new Object3D("tire2", _tire);
        entity.setDynamicShadowingEnabled(true);
        entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
        entity.getTranslation().addY(5f);
        entity.getTranslation().addX(-6f);
        entity.getTranslation().addZ(-2f);
        entity.getScale().set(2f, 2f, 2f);
        entity.update();
        engine.addEntity(entity);
        world.addRigidBody("tire2", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : ArrayList(java.util.ArrayList) Vector3(net.drewke.tdme.math.Vector3) Capsule(net.drewke.tdme.engine.primitives.Capsule) ConvexMesh(net.drewke.tdme.engine.primitives.ConvexMesh) Object3DModel(net.drewke.tdme.engine.Object3DModel) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D) Sphere(net.drewke.tdme.engine.primitives.Sphere) OrientedBoundingBox(net.drewke.tdme.engine.primitives.OrientedBoundingBox) Light(net.drewke.tdme.engine.Light) Model(net.drewke.tdme.engine.model.Model) PrimitiveModel(net.drewke.tdme.engine.primitives.PrimitiveModel) Object3DModel(net.drewke.tdme.engine.Object3DModel) Camera(net.drewke.tdme.engine.Camera)

Example 74 with Vector3

use of net.drewke.tdme.math.Vector3 in project tdme by andreasdr.

the class EngineTest method createWallModel.

/**
	 * Create wall model
	 * @return
	 */
private Model createWallModel() {
    // wall model
    Model wall = new Model("wall", "wall", UpVector.Y_UP, RotationOrder.XYZ, null);
    // wall material
    Material wallMaterial = new Material("wall");
    wall.getMaterials().put("wall", wallMaterial);
    //	group
    Group wallGroup = new Group(wall, null, "wall", "wall");
    //	faces entity
    //		far plane
    FacesEntity groupFacesEntityFarPlane = new FacesEntity(wallGroup, "wall");
    wallMaterial.getAmbientColor().set(1f, 1f, 1f, 1f);
    wallMaterial.getDiffuseColor().set(1f, 1f, 1f, 1f);
    groupFacesEntityFarPlane.setMaterial(wallMaterial);
    //	faces entity 
    ArrayList<FacesEntity> groupFacesEntities = new ArrayList<FacesEntity>();
    groupFacesEntities.add(groupFacesEntityFarPlane);
    //	vertices
    ArrayList<Vector3> vertices = new ArrayList<Vector3>();
    // left, near, far plane
    vertices.add(new Vector3(-4f, 0f, +4f));
    // left, far, far plane
    vertices.add(new Vector3(-4f, +4f, +4f));
    // right far, far plane
    vertices.add(new Vector3(+4f, +4f, +4f));
    // right, near, far plane
    vertices.add(new Vector3(+4f, 0f, +4f));
    //	normals
    ArrayList<Vector3> normals = new ArrayList<Vector3>();
    //		far plane
    normals.add(new Vector3(0f, 0f, -1f));
    // texture coordinates
    ArrayList<TextureCoordinate> textureCoordinates = new ArrayList<TextureCoordinate>();
    textureCoordinates.add(new TextureCoordinate(0f, 0f));
    textureCoordinates.add(new TextureCoordinate(0f, 1f));
    textureCoordinates.add(new TextureCoordinate(1f, 1f));
    textureCoordinates.add(new TextureCoordinate(1f, 0f));
    //	faces ground far plane
    ArrayList<Face> facesFarPlane = new ArrayList<Face>();
    facesFarPlane.add(new Face(wallGroup, 0, 1, 2, 0, 0, 0, 0, 1, 2));
    facesFarPlane.add(new Face(wallGroup, 2, 3, 0, 0, 0, 0, 2, 3, 0));
    // set up faces entity
    groupFacesEntityFarPlane.setFaces(facesFarPlane);
    // setup ground group
    wallGroup.setVertices(vertices);
    wallGroup.setNormals(normals);
    wallGroup.setTextureCoordinates(textureCoordinates);
    wallGroup.setFacesEntities(groupFacesEntities);
    // determine features
    wallGroup.determineFeatures();
    // register group
    wall.getGroups().put("wall", wallGroup);
    wall.getSubGroups().put("wall", wallGroup);
    // prepare for indexed rendering
    ModelHelper.prepareForIndexedRendering(wall);
    //
    return wall;
}
Also used : FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Group(net.drewke.tdme.engine.model.Group) Model(net.drewke.tdme.engine.model.Model) Object3DModel(net.drewke.tdme.engine.Object3DModel) PrimitiveModel(net.drewke.tdme.engine.primitives.PrimitiveModel) ArrayList(java.util.ArrayList) Material(net.drewke.tdme.engine.model.Material) Vector3(net.drewke.tdme.math.Vector3) TextureCoordinate(net.drewke.tdme.engine.model.TextureCoordinate) Face(net.drewke.tdme.engine.model.Face)

Example 75 with Vector3

use of net.drewke.tdme.math.Vector3 in project tdme by andreasdr.

the class LevelEditorView method placeObject.

/**
	 * Places selected model on given object
	 */
public void placeObject(Entity selectedObject) {
    if (selectedEntity != null && selectedObject != null) {
        // get selected level entity if it is one
        LevelEditorObject selectedLevelEditorObject = level.getObjectById(selectedObject.getId());
        // create level entity
        Transformations levelEditorObjectTransformations = new Transformations();
        // take translation of selected object as base
        levelEditorObjectTransformations.getTranslation().set(selectedObject.getTranslation());
        Vector3 centerSelectedObject = selectedObject.getBoundingBox().getMin().clone().add(selectedObject.getBoundingBox().getMax()).scale(0.5f);
        // compute center of selected model
        Vector3 centerNewObject = selectedEntity.getModel() != null ? selectedEntity.getModel().getBoundingBox().getCenter().clone() : new Vector3(0f, 0f, 0f);
        // put new object on middle of selected object
        levelEditorObjectTransformations.getTranslation().add(centerNewObject.clone().add(centerSelectedObject));
        // set on selected object / y
        if (selectedLevelEditorObject == null || selectedLevelEditorObject.getEntity().getType() == EntityType.PARTICLESYSTEM || selectedEntity.getType() == EntityType.PARTICLESYSTEM) {
            levelEditorObjectTransformations.getTranslation().setY(gridY + (selectedEntity.getModel() != null ? -selectedEntity.getModel().getBoundingBox().getMin().getY() : 0f));
        } else {
            // create transformed level editor object bounding box
            BoundingVolume bv = selectedLevelEditorObject.getEntity().getModel().getBoundingBox().clone();
            bv.fromBoundingVolumeWithTransformations(selectedLevelEditorObject.getEntity().getModel().getBoundingBox(), selectedLevelEditorObject.getTransformations());
            //
            levelEditorObjectTransformations.getTranslation().setY(bv.computeDimensionOnAxis(new Vector3(0f, 1f, 0f)) / 2 + bv.getCenter().getY() + -selectedEntity.getModel().getBoundingBox().getMin().getY());
        }
        // standard scale
        levelEditorObjectTransformations.getScale().set(new Vector3(1f, 1f, 1f));
        // standard rotations
        levelEditorObjectTransformations.getPivot().set(selectedEntity.getPivot());
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis0()));
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis1()));
        levelEditorObjectTransformations.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis2()));
        levelEditorObjectTransformations.update();
        // check if entity already exists
        for (int i = 0; i < level.getObjectCount(); i++) {
            LevelEditorObject levelEditorObject = level.getObjectAt(i);
            if (levelEditorObject.getEntity() == selectedEntity && levelEditorObject.getTransformations().getTranslation().equals(levelEditorObjectTransformations.getTranslation())) {
                // we already have a object with selected model on this translation
                return;
            }
        }
        // create new level editor object
        LevelEditorObject levelEditorObject = new LevelEditorObject(selectedEntity.getName() + "_" + level.allocateObjectId(), "", levelEditorObjectTransformations, selectedEntity);
        //	add to level
        level.addObject(levelEditorObject);
        // add model to 3d engine
        if (levelEditorObject.getEntity().getModel() != null) {
            Object3D object = new Object3D(levelEditorObject.getId(), levelEditorObject.getEntity().getModel());
            object.fromTransformations(levelEditorObjectTransformations);
            object.setPickable(true);
            engine.addEntity(object);
        }
        // add particle system to 3d engine
        if (levelEditorObject.getEntity().getType() == EntityType.PARTICLESYSTEM) {
            Entity object = Level.createParticleSystem(levelEditorObject.getEntity().getParticleSystem(), levelEditorObject.getId(), false);
            object.fromTransformations(levelEditorObjectTransformations);
            object.setPickable(true);
            engine.addEntity(object);
        }
        // add to objects listbox
        levelEditorScreenController.setObjectListbox(level.getObjectIdsIterator());
    }
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) BoundingVolume(net.drewke.tdme.engine.primitives.BoundingVolume) Transformations(net.drewke.tdme.engine.Transformations) Vector3(net.drewke.tdme.math.Vector3) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D)

Aggregations

Vector3 (net.drewke.tdme.math.Vector3)75 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)20 Model (net.drewke.tdme.engine.model.Model)20 LevelEditorEntity (net.drewke.tdme.tools.shared.model.LevelEditorEntity)14 ArrayList (java.util.ArrayList)13 Rotation (net.drewke.tdme.engine.Rotation)12 Face (net.drewke.tdme.engine.model.Face)12 BoundingBox (net.drewke.tdme.engine.primitives.BoundingBox)11 Material (net.drewke.tdme.engine.model.Material)10 BoundingVolume (net.drewke.tdme.engine.primitives.BoundingVolume)10 Group (net.drewke.tdme.engine.model.Group)9 PrimitiveModel (net.drewke.tdme.engine.primitives.PrimitiveModel)9 Entity (net.drewke.tdme.engine.Entity)8 Object3D (net.drewke.tdme.engine.Object3D)8 LevelEditorObject (net.drewke.tdme.tools.shared.model.LevelEditorObject)8 File (java.io.File)7 IOException (java.io.IOException)7 Transformations (net.drewke.tdme.engine.Transformations)7 OrientedBoundingBox (net.drewke.tdme.engine.primitives.OrientedBoundingBox)7 Camera (net.drewke.tdme.engine.Camera)6