Package com.ardor3d.scenegraph

Examples of com.ardor3d.scenegraph.MeshData


    /**
     * Construct a new TextCaret
     */
    public TextCaret() {
        final MeshData md = _strip.getMeshData();
        md.setVertexBuffer(BufferUtils.createVector3Buffer(4));
        md.setIndices(BufferUtils.createIndexBufferData(new int[] { 0, 1, 3, 2 }, 3));
        md.setIndexMode(IndexMode.TriangleStrip);
        final float[] vals = new float[] { 0, 0, 0, //
                1, 0, 0, //
                1, 1, 0, //
                0, 1, 0 //
        };
        md.getVertexBuffer().put(vals);
        _strip.updateGeometricState(0);

        setCaretColor(ColorRGBA.BLACK);
    }
View Full Code Here


            vertexCount++;

            // Create each frame as a Mesh using glcommands if given
            final Mesh[] meshes = new Mesh[header.numFrames];
            MeshData mData;
            for (int i = 0; i < header.numFrames; i++) {
                final Md2Frame frame = frames[i];

                meshes[i] = new Mesh(frames[i].name);
                mData = meshes[i].getMeshData();
                mData.setIndexLengths(counts);
                mData.setIndexModes(modes);

                final FloatBufferData verts = new FloatBufferData(vertexCount * 3, 3);
                final FloatBufferData norms = new FloatBufferData(vertexCount * 3, 3);
                final FloatBufferData texs = new FloatBufferData(vertexCount * 3, 2);
                mData.setVertexCoords(verts);
                mData.setNormalCoords(norms);
                mData.setTextureCoords(texs, 0);

                // go through the triangle strips/fans and add them in
                // first the strips
                if (stripIndices.size() != 0) {
                    for (int maxJ = stripIndices.size(), j = 0; j < maxJ; j++) {
View Full Code Here

    @Override
    public void visit(final Spatial spatial) {
        if (spatial instanceof Mesh) {
            final Mesh mesh = (Mesh) spatial;
            final MeshData md = mesh.getMeshData();
            if (md.getTotalPrimitiveCount() < 1 || md.getVertexCount() < 3) {
                return;
            }
            for (final IndexMode mode : md.getIndexModes()) {
                if (mode != IndexMode.Triangles) {
                    return;
                }
            }

            final int[] indices;
            if (md.getIndices() == null) {
                indices = new int[md.getVertexCount()];
                for (int i = 0; i < indices.length; i++) {
                    indices[i] = i;
                }
            } else {
                indices = BufferUtils.getIntArray(md.getIndices());
            }
            PrimitiveGroup[] strips = generateStrips(indices, false);

            if (_reorderVertices) {
                final AtomicReference<int[]> newOrder = new AtomicReference<int[]>();
                strips = remapIndices(strips, newOrder, md.getVertexCount());

                // ask mesh to apply new vertex order
                mesh.reorderVertexData(newOrder.get());
            }

            // construct our new index buffer, modes and counts
            int indexCount = 0, j = 0, count = 0;
            for (final PrimitiveGroup group : strips) {
                if (group.getIndices().length > 0) {
                    count++;
                }
            }
            final int[] counts = new int[count];
            final IndexMode[] modes = new IndexMode[count];
            for (final PrimitiveGroup group : strips) {
                indexCount += group.getIndices().length;
                if (group.getIndices().length > 0) {
                    modes[j] = group.getType();
                    counts[j++] = group.getIndices().length;
                }
            }
            final IndexBufferData<?> newIndices = BufferUtils.createIndexBufferData(indexCount, md.getVertexCount());
            for (final PrimitiveGroup group : strips) {
                final IntBufferData data = new IntBufferData(group.getIndices().length);
                data.getBuffer().put(group.getIndices());
                data.rewind();
                newIndices.put(data);
View Full Code Here

        }));
    }

    private Mesh createMultiStripMesh() {
        final Mesh mesh = new Mesh();
        final MeshData meshData = mesh.getMeshData();

        final FloatBuffer vertexBuffer = BufferUtils.createVector3Buffer(totalSize);
        final FloatBuffer normalBuffer = BufferUtils.createVector3Buffer(totalSize);
        final FloatBuffer textureBuffer = BufferUtils.createVector2Buffer(totalSize);

        final IndexBufferData<?> indices = BufferUtils.createIndexBufferData((ySize - 1) * xSize * 2,
                vertexBuffer.capacity() - 1);
        final int[] indexLengths = new int[ySize - 1];

        for (int y = 0; y < ySize; y++) {
            for (int x = 0; x < xSize; x++) {
                vertexBuffer.put(x).put(y).put(0);
                normalBuffer.put(0).put(0).put(1);
                textureBuffer.put(x).put(y);
            }
        }

        for (int y = 0; y < ySize - 1; y++) {
            for (int x = 0; x < xSize; x++) {
                final int index = y * xSize + x;
                indices.put(index);
                indices.put(index + xSize);
            }
            indexLengths[y] = xSize * 2;
        }

        meshData.setVertexBuffer(vertexBuffer);
        meshData.setNormalBuffer(normalBuffer);
        meshData.setTextureBuffer(textureBuffer, 0);

        meshData.setIndices(indices);
        meshData.setIndexLengths(indexLengths);
        meshData.setIndexMode(IndexMode.TriangleStrip);

        return mesh;
    }
View Full Code Here

        return mesh;
    }

    private Mesh createDegenerateStripMesh() {
        final Mesh mesh = new Mesh();
        final MeshData meshData = mesh.getMeshData();

        final FloatBuffer vertexBuffer = BufferUtils.createVector3Buffer(totalSize);
        final FloatBuffer normalBuffer = BufferUtils.createVector3Buffer(totalSize);
        final FloatBuffer textureBuffer = BufferUtils.createVector2Buffer(totalSize);

        final IndexBufferData<?> indices = BufferUtils.createIndexBufferData((ySize - 1) * xSize * 2 + (ySize - 1) * 2,
                vertexBuffer.capacity() - 1);

        for (int y = 0; y < ySize; y++) {
            for (int x = 0; x < xSize; x++) {
                vertexBuffer.put(x).put(y).put(0);
                normalBuffer.put(0).put(0).put(1);
                textureBuffer.put(x).put(y);
            }
        }

        for (int y = 0; y < ySize - 1; y++) {
            for (int x = 0; x < xSize; x++) {
                final int index = y * xSize + x;
                indices.put(index);
                indices.put(index + xSize);
            }

            final int index = (y + 1) * xSize;
            indices.put(index + xSize - 1);
            indices.put(index);
        }

        meshData.setVertexBuffer(vertexBuffer);
        meshData.setNormalBuffer(normalBuffer);
        meshData.setTextureBuffer(textureBuffer, 0);

        meshData.setIndices(indices);
        meshData.setIndexMode(IndexMode.TriangleStrip);

        return mesh;
    }
View Full Code Here

    protected void initExample() {
        _canvas.setTitle("TestSharedMesh");

        _canvas.getCanvasRenderer().getCamera().setLocation(new Vector3(0, 0, 90));
        final Mesh mesh = new Mesh();
        final MeshData meshData = mesh.getMeshData();

        final FloatBuffer vertexBuffer = BufferUtils.createVector3Buffer(16);

        vertexBuffer.put(-30).put(0).put(0);
        vertexBuffer.put(-40).put(0).put(0);
        vertexBuffer.put(-40).put(10).put(0);
        vertexBuffer.put(-30).put(10).put(0);

        vertexBuffer.put(-10).put(0).put(0);
        vertexBuffer.put(-20).put(0).put(0);
        vertexBuffer.put(-20).put(10).put(0);
        vertexBuffer.put(-10).put(10).put(0);

        vertexBuffer.put(10).put(0).put(0);
        vertexBuffer.put(20).put(0).put(0);
        vertexBuffer.put(20).put(10).put(0);
        vertexBuffer.put(10).put(10).put(0);

        vertexBuffer.put(30).put(0).put(0);
        vertexBuffer.put(40).put(0).put(0);
        vertexBuffer.put(40).put(10).put(0);
        vertexBuffer.put(30).put(10).put(0);

        meshData.setVertexBuffer(vertexBuffer);

        final IndexBufferData<?> indices = BufferUtils.createIndexBufferData(18, vertexBuffer.capacity() - 1);

        // Strips
        indices.put(0).put(3).put(1).put(2);
        indices.put(4).put(7).put(5).put(6);

        // Quad
        indices.put(8).put(9).put(10).put(11);

        // Triangles
        indices.put(12).put(13).put(15);
        indices.put(13).put(14).put(15);

        meshData.setIndices(indices);

        // Setting sub primitive data
        final int[] indexLengths = new int[] { 4, 4, 4, 6 };
        meshData.setIndexLengths(indexLengths);

        final IndexMode[] indexModes = new IndexMode[] { IndexMode.TriangleStrip, IndexMode.TriangleStrip,
                IndexMode.Quads, IndexMode.Triangles };
        meshData.setIndexModes(indexModes);

        mesh.updateModelBound();

        _root.attachChild(mesh);
    }
View Full Code Here

            return;
        }
        updateCounter = 0;

        final int[] indexBuffer = new int[3];
        final MeshData sphereMD = sphere.getMeshData();
        final MeshData torusMD = torus.getMeshData();
        final FloatBuffer color1 = sphere.getMeshData().getColorBuffer();
        final FloatBuffer color2 = torus.getMeshData().getColorBuffer();

        if (oldData != null) {
            for (int j = 0; j < oldData.getSourcePrimitives().size(); j++) {
                final PrimitiveKey key = oldData.getSourcePrimitives().get(j);
                sphereMD.getPrimitiveIndices(key.getPrimitiveIndex(), key.getSection(), indexBuffer);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[0] % 3], color1, indexBuffer[0]);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[1] % 3], color1, indexBuffer[1]);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[2] % 3], color1, indexBuffer[2]);
            }

            for (int j = 0; j < oldData.getTargetPrimitives().size(); j++) {
                final PrimitiveKey key = oldData.getTargetPrimitives().get(j);
                torusMD.getPrimitiveIndices(key.getPrimitiveIndex(), key.getSection(), indexBuffer);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[0] % 3], color2, indexBuffer[0]);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[1] % 3], color2, indexBuffer[1]);
                BufferUtils.setInBuffer(colorSpread[indexBuffer[2] % 3], color2, indexBuffer[2]);
            }
        }

        results.clear();
        PickingUtil.findCollisions(torusNode, sphereNode, results);

        if (results.getNumber() > 0) {
            oldData = results.getCollisionData(0);
            for (int i = 0; i < oldData.getSourcePrimitives().size(); i++) {
                final PrimitiveKey key = oldData.getSourcePrimitives().get(i);
                sphereMD.getPrimitiveIndices(key.getPrimitiveIndex(), key.getSection(), indexBuffer);
                BufferUtils.setInBuffer(ColorRGBA.RED, color1, indexBuffer[0]);
                BufferUtils.setInBuffer(ColorRGBA.RED, color1, indexBuffer[1]);
                BufferUtils.setInBuffer(ColorRGBA.RED, color1, indexBuffer[2]);
            }

            for (int i = 0; i < oldData.getTargetPrimitives().size(); i++) {
                final PrimitiveKey key = oldData.getTargetPrimitives().get(i);
                torusMD.getPrimitiveIndices(key.getPrimitiveIndex(), key.getSection(), indexBuffer);
                BufferUtils.setInBuffer(ColorRGBA.BLUE, color2, indexBuffer[0]);
                BufferUtils.setInBuffer(ColorRGBA.BLUE, color2, indexBuffer[1]);
                BufferUtils.setInBuffer(ColorRGBA.BLUE, color2, indexBuffer[2]);
            }
        }
View Full Code Here

        }
    }

    private Mesh createMultiStrip() {
        final Mesh mesh = new Mesh();
        final MeshData meshData = mesh.getMeshData();

        final FloatBuffer vertexBuffer = BufferUtils.createVector3Buffer(16);

        vertexBuffer.put(-30).put(0).put(0);
        vertexBuffer.put(-40).put(0).put(0);
        vertexBuffer.put(-40).put(10).put(0);
        vertexBuffer.put(-30).put(10).put(0);

        vertexBuffer.put(-10).put(0).put(0);
        vertexBuffer.put(-20).put(0).put(0);
        vertexBuffer.put(-20).put(10).put(0);
        vertexBuffer.put(-10).put(10).put(0);

        vertexBuffer.put(10).put(0).put(0);
        vertexBuffer.put(20).put(0).put(0);
        vertexBuffer.put(20).put(10).put(0);
        vertexBuffer.put(10).put(10).put(0);

        vertexBuffer.put(30).put(0).put(0);
        vertexBuffer.put(40).put(0).put(0);
        vertexBuffer.put(40).put(10).put(0);
        vertexBuffer.put(30).put(10).put(0);

        meshData.setVertexBuffer(vertexBuffer);

        final IndexBufferData<?> indices = BufferUtils.createIndexBufferData(18, vertexBuffer.capacity() - 1);

        // Strips
        indices.put(0).put(3).put(1).put(2);
        indices.put(4).put(7).put(5).put(6);

        // Quad
        indices.put(8).put(9).put(10).put(11);

        // Triangles
        indices.put(12).put(13).put(15);
        indices.put(13).put(15).put(14);

        meshData.setIndices(indices);

        // Setting sub primitive data
        final int[] indexLengths = new int[] { 4, 4, 4, 6 };
        meshData.setIndexLengths(indexLengths);

        final IndexMode[] indexModes = new IndexMode[] { IndexMode.TriangleStrip, IndexMode.TriangleStrip,
                IndexMode.Quads, IndexMode.Triangles };
        meshData.setIndexModes(indexModes);

        final WireframeState ws = new WireframeState();
        mesh.setRenderState(ws);
        mesh.updateModelBound();
View Full Code Here

                    // copy hints across
                    skMesh.getSceneHints().set(sourceMesh.getSceneHints());

                    try {
                        // Use source mesh as bind pose data in the new SkinnedMesh
                        final MeshData bindPose = copyMeshData(sourceMesh.getMeshData());
                        skMesh.setBindPoseData(bindPose);

                        // Apply our BSM
                        if (!bindShapeMatrix.isIdentity()) {
                            bindPose.transformVertices(bindShapeMatrix);
                            if (bindPose.getNormalBuffer() != null) {
                                bindPose.transformNormals(bindShapeMatrix, true);
                            }
                        }

                        // TODO: This is only needed for CPU skinning... consider a way of making it optional.
                        // Copy bind pose to mesh data to setup for CPU skinning
                        final MeshData meshData = copyMeshData(skMesh.getBindPoseData());
                        meshData.getVertexCoords().setVboAccessMode(VBOAccessMode.StreamDraw);
                        if (meshData.getNormalCoords() != null) {
                            meshData.getNormalCoords().setVboAccessMode(VBOAccessMode.StreamDraw);
                        }
                        skMesh.setMeshData(meshData);
                    } catch (final IOException e) {
                        e.printStackTrace();
                        throw new ColladaException("Unable to copy skeleton bind pose data.", geometry);
View Full Code Here

            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);
                }
                BufferUtils.setInBuffer(_particles[k].getCurrentColor(), _appearanceColors, (ind));
            }

        }
View Full Code Here

TOP

Related Classes of com.ardor3d.scenegraph.MeshData

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.