Package com.ardor3d.scenegraph

Examples of com.ardor3d.scenegraph.Mesh


    public Mesh buildMeshTriangles(final Element colladaGeometry, final Element tris) {
        if (tris == null || tris.getChild("input") == null || tris.getChild("p") == null) {
            return null;
        }
        final Mesh triMesh = new Mesh(extractName(colladaGeometry, tris));
        triMesh.getMeshData().setIndexMode(IndexMode.Triangles);

        // Build and set RenderStates for our material
        _colladaMaterialUtils.applyMaterial(tris.getAttributeValue("material"), triMesh);

        final LinkedList<ColladaInputPipe> pipes = new LinkedList<ColladaInputPipe>();
        final int maxOffset = extractPipes(tris, pipes);
        final int interval = maxOffset + 1;

        // use interval & size of p array to determine buffer sizes.
        final int[] vals = _colladaDOMUtil.parseIntArray(tris.getChild("p"));
        final int numEntries = vals.length / interval;

        // Construct nio buffers for specified inputs.
        for (final ColladaInputPipe pipe : pipes) {
            pipe.setupBuffer(numEntries, triMesh.getMeshData(), _dataCache);
        }

        // Add to vert mapping
        final int[] indices = new int[numEntries];
        final MeshVertPairs mvp = new MeshVertPairs(triMesh, indices);
        _dataCache.getVertMappings().put(colladaGeometry, mvp);

        // go through the p entry
        // for each p, iterate using max offset
        final int[] currentVal = new int[interval];

        // Go through entries and add to buffers.
        for (int j = 0, max = numEntries; j < max; j++) {
            // add entry to buffers
            System.arraycopy(vals, j * interval, currentVal, 0, interval);
            final int rVal = processPipes(pipes, currentVal);
            if (rVal != Integer.MIN_VALUE) {
                indices[j] = rVal;
            }
        }

        if (_optimizeMeshes) {
            final VertMap map = GeometryTool.minimizeVerts(triMesh, _optimizeSettings);
            _dataCache.setMeshVertMap(triMesh, map);
        }

        triMesh.updateModelBound();

        return triMesh;
    }
View Full Code Here


public class GoogleEarthPlugin implements ColladaExtraPlugin {

    @Override
    public boolean processExtra(final Element extra, final Object[] params) {
        if (params.length > 0 && params[0] instanceof Mesh) {
            final Mesh mesh = (Mesh) params[0];
            // should have a child: <technique profile="GOOGLEEARTH">
            final Element technique = extra.getChild("technique");
            if (technique != null) {
                final Attribute profile = technique.getAttribute("profile");
                if (profile != null && "GOOGLEEARTH".equalsIgnoreCase(profile.getValue())) {
                    for (final Element child : technique.getChildren()) {
                        // disable back face culling if it's been enabled.
                        if ("double_sided".equalsIgnoreCase(child.getName()) && "1".equals(child.getTextTrim())) {
                            final CullState cs = new CullState();
                            cs.setEnabled(false);
                            mesh.setRenderState(cs);
                        }
                    }
                    return true;
                }
            }
View Full Code Here

    protected void initializeParticles(final int numParticles) {

        if (_particleMesh != null) {
            detachChild(_particleMesh);
        }
        final Mesh mesh = new Mesh(getName() + "_mesh") {

            @Override
            public void updateWorldTransform(final boolean recurse) {
                ; // Do nothing.
            }

            @Override
            public void updateWorldBound(final boolean recurse) {
                super.updateWorldTransform(recurse);
                super.updateWorldBound(recurse);
            }
        };
        _particleMesh = mesh;
        attachChild(mesh);
        _particles = new Particle[numParticles];
        if (numParticles == 0) {
            return;
        }
        Vector2 sharedTextureData[];

        // setup texture coords and index mode
        final MeshData meshData = mesh.getMeshData();
        switch (getParticleType()) {
            case GeomMesh:
            case Triangle:
                sharedTextureData = new Vector2[] { new Vector2(2.0, 0.0), new Vector2(0.0, 2.0), new Vector2(0.0, 0.0) };
                meshData.setIndexMode(IndexMode.Triangles);
                break;
            case Quad:
                sharedTextureData = new Vector2[] { new Vector2(1.0, 0.0), new Vector2(1.0, 1.0),
                        new Vector2(0.0, 1.0), new Vector2(0.0, 0.0) };
                meshData.setIndexMode(IndexMode.Quads);
                break;
            default:
                throw new IllegalStateException(
                        "Particle Mesh may only have particle type of ParticleType.Quad, ParticleType.GeomMesh or ParticleType.Triangle");
        }

        final int verts = getVertsForParticleType(getParticleType());

        _geometryCoordinates = BufferUtils.createVector3Buffer(numParticles * verts);
        _appearanceColors = BufferUtils.createColorBuffer(numParticles * verts);

        meshData.setVertexBuffer(_geometryCoordinates);
        meshData.setColorBuffer(_appearanceColors);
        meshData.setTextureBuffer(BufferUtils.createVector2Buffer(numParticles * verts), 0);

        final Vector2 temp = Vector2.fetchTempInstance();
        for (int k = 0; k < numParticles; k++) {
            _particles[k] = new Particle(this);
            _particles[k].init();
            _particles[k].setStartIndex(k * verts);
            for (int a = verts - 1; a >= 0; a--) {
                final int ind = (k * verts) + a;
                if (_particleType == ParticleSystem.ParticleType.GeomMesh && _useMeshTexCoords) {
                    final MeshEmitter source = (MeshEmitter) getParticleEmitter();
                    final Mesh sourceMesh = source.getSource();
                    final int index = sourceMesh.getMeshData().getIndices() != null ? sourceMesh.getMeshData()
                            .getIndices().get(ind) : ind;
                    BufferUtils.populateFromBuffer(temp, sourceMesh.getMeshData().getTextureCoords(0).getBuffer(),
                            index);
                    BufferUtils.setInBuffer(temp, meshData.getTextureCoords(0).getBuffer(), ind);
                } else {
                    BufferUtils.setInBuffer(sharedTextureData[a], meshData.getTextureCoords(0).getBuffer(), ind);
                }
View Full Code Here

    public void initParticleLocation(final int index) {
        final Particle p = _particles[index];
        if (getParticleType() == ParticleType.GeomMesh && getParticleEmitter() instanceof MeshEmitter) {
            final MeshEmitter emitter = (MeshEmitter) getParticleEmitter();
            final Mesh mesh = emitter.getSource();

            // Update the triangle model on each new particle creation.
            final Vector3[] vertices = new Vector3[3];
            final MeshData mData = mesh.getMeshData();
            for (int x = 0; x < 3; x++) {
                vertices[x] = new Vector3();

                final int vertIndex = mData.getVertexIndex(index, x, 0);
                BufferUtils.populateFromBuffer(vertices[x], mData.getVertexBuffer(), mData.getIndices() != null ? mData
                        .getIndices().get(vertIndex) : vertIndex);
            }
            Triangle t = p.getTriangleModel();
            if (t == null) {
                t = new Triangle(vertices[0], vertices[1], vertices[2]);
            } else {
                t.setA(vertices[0]);
                t.setB(vertices[1]);
                t.setC(vertices[2]);
            }
            // turn the triangle corners into vector offsets from center
            for (int x = 0; x < 3; x++) {
                vertices[x].subtract(t.getCenter(), vertices[x]);
                t.set(x, vertices[x]);
            }
            p.setTriangleModel(t);
            mesh.localToWorld(t.getCenter(), p.getPosition());
            p.getPosition().multiplyLocal(getInvScale());

        } else if (getParticleEmitter() instanceof MeshEmitter) {
            final MeshEmitter emitter = (MeshEmitter) getParticleEmitter();
            final Mesh mesh = emitter.getSource();
            mesh.getMeshData().randomPointOnPrimitives(p.getPosition());
            mesh.localToWorld(p.getPosition(), p.getPosition());
            p.getPosition().multiplyLocal(getInvScale());
        } else {
            if (getParticleEmitter() != null) {
                getParticleEmitter().randomEmissionPoint(p.getPosition());
            } else {
View Full Code Here

TOP

Related Classes of com.ardor3d.scenegraph.Mesh

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.