Package com.jme3.scene.mesh

Examples of com.jme3.scene.mesh.IndexBuffer


        generate(mesh, approxTangents, false);
    }

    private static  List<VertexData> processTriangles(Mesh mesh,
            int[] index, Vector3f[] v, Vector2f[] t, boolean splitMirrored) {
        IndexBuffer indexBuffer = mesh.getIndexBuffer();
        FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
        if (mesh.getBuffer(Type.TexCoord) == null) {
            throw new IllegalArgumentException("Can only generate tangents for "
                    + "meshes with texture coordinates");
        }
       
        FloatBuffer textureBuffer = (FloatBuffer) mesh.getBuffer(Type.TexCoord).getData();
       
        List<VertexData> vertices = initVertexData(vertexBuffer.limit() / 3);
       
        for (int i = 0; i < indexBuffer.size() / 3; i++) {
            for (int j = 0; j < 3; j++) {
                index[j] = indexBuffer.get(i * 3 + j);
                populateFromBuffer(v[j], vertexBuffer, index[j]);
                populateFromBuffer(t[j], textureBuffer, index[j]);
            }
           
            TriangleData triData = processTriangle(index, v, t);
View Full Code Here


        }
    }
   
    private static List<VertexData> processTriangleStrip(Mesh mesh,
            int[] index, Vector3f[] v, Vector2f[] t) {
        IndexBuffer indexBuffer = mesh.getIndexBuffer();
        FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
        FloatBuffer textureBuffer = (FloatBuffer) mesh.getBuffer(Type.TexCoord).getData();
       
        List<VertexData> vertices = initVertexData(vertexBuffer.limit() / 3);
       
        index[0] = indexBuffer.get(0);
        index[1] = indexBuffer.get(1);
       
        populateFromBuffer(v[0], vertexBuffer, index[0]);
        populateFromBuffer(v[1], vertexBuffer, index[1]);
       
        populateFromBuffer(t[0], textureBuffer, index[0]);
        populateFromBuffer(t[1], textureBuffer, index[1]);
       
        for (int i = 2; i < indexBuffer.size(); i++) {
            index[2] = indexBuffer.get(i);
            BufferUtils.populateFromBuffer(v[2], vertexBuffer, index[2]);
            BufferUtils.populateFromBuffer(t[2], textureBuffer, index[2]);
           
            boolean isDegenerate = isDegenerateTriangle(v[0], v[1], v[2]);
            TriangleData triData = processTriangle(index, v, t);
View Full Code Here

        return vertices;
    }
   
    private static List<VertexData> processTriangleFan(Mesh mesh,
            int[] index, Vector3f[] v, Vector2f[] t) {
        IndexBuffer indexBuffer = mesh.getIndexBuffer();
        FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData();
        FloatBuffer textureBuffer = (FloatBuffer) mesh.getBuffer(Type.TexCoord).getData();
       
        List<VertexData> vertices = initVertexData(vertexBuffer.limit() / 3);
       
        index[0] = indexBuffer.get(0);
        index[1] = indexBuffer.get(1);
       
        populateFromBuffer(v[0], vertexBuffer, index[0]);
        populateFromBuffer(v[1], vertexBuffer, index[1]);
       
        populateFromBuffer(t[0], textureBuffer, index[0]);
        populateFromBuffer(t[1], textureBuffer, index[1]);
       
        for (int i = 2; i < vertexBuffer.limit() / 3; i++) {
            index[2] = indexBuffer.get(i);
            populateFromBuffer(v[2], vertexBuffer, index[2]);
            populateFromBuffer(t[2], textureBuffer, index[2]);
           
            TriangleData triData = processTriangle(index, v, t);
            if (triData != null) {
View Full Code Here

     */
    private IndexBuffer generateIndexes(int bevelShapeVertexCount, int bevelRepeats, boolean smooth) {
        int putIndex = 0;
        if (smooth) {
            int indexBufferSize = (bevelRepeats - 1) * (bevelShapeVertexCount - 1) * 6;
            IndexBuffer result = IndexBuffer.createIndexBuffer(indexBufferSize, indexBufferSize);

            for (int i = 0; i < bevelRepeats - 1; ++i) {
                for (int j = 0; j < bevelShapeVertexCount - 1; ++j) {
                    result.put(putIndex++, i * bevelShapeVertexCount + j);
                    result.put(putIndex++, i * bevelShapeVertexCount + j + 1);
                    result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j);

                    result.put(putIndex++, i * bevelShapeVertexCount + j + 1);
                    result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j + 1);
                    result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j);
                }
            }
            return result;
        } else {
            // every pair of bevel vertices belongs to two triangles
            // we have the same amount of pairs as the amount of vertices in bevel
            // so the amount of triangles is: bevelShapeVertexCount * 2 * (bevelRepeats - 1)
            // and this gives the amount of vertices in non smooth shape as below ...
            int indexBufferSize = bevelShapeVertexCount * bevelRepeats * 6;// 6 = 2 * 3 where 2 is stated above and 3 is the count of vertices for each triangle
            IndexBuffer result = IndexBuffer.createIndexBuffer(indexBufferSize, indexBufferSize);
            for (int i = 0; i < indexBufferSize; ++i) {
                result.put(putIndex++, i);
            }
            return result;
        }
    }
View Full Code Here

                }

                if (Type.Index.ordinal() == bufType) {
                    int components = compsForBuf[bufType];

                    IndexBuffer inIdx = inMesh.getIndicesAsList();
                    IndexBuffer outIdx = outMesh.getIndexBuffer();

                    for (int tri = 0; tri < geomTriCount; tri++) {
                        for (int comp = 0; comp < components; comp++) {
                            int idx = inIdx.get(tri * components + comp) + globalVertIndex;
                            outIdx.put((globalTriIndex + tri) * components + comp, idx);
                        }
                    }
                } else if (Type.Position.ordinal() == bufType) {
                    FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly();
                    FloatBuffer outPos = (FloatBuffer) outBuf.getData();
View Full Code Here

        this.numVertices = mesh.getVertexCount();
        this.vertexStride = 12; // 3 verts * 4 bytes per.
        this.numTriangles = mesh.getTriangleCount();
        this.triangleIndexStride = 12; // 3 index entries * 4 bytes each.

        IndexBuffer indices = mesh.getIndicesAsList();
        FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
        vertices.rewind();

        int verticesLength = mesh.getVertexCount() * 3;
        for (int i = 0; i < verticesLength; i++) {
            float tempFloat = vertices.get();
            vertexBase.putFloat(tempFloat);
        }

        int indicesLength = mesh.getTriangleCount() * 3;
        for (int i = 0; i < indicesLength; i++) {
            triangleIndexBase.putInt(indices.get(i));
        }
        vertices.rewind();
        vertices.clear();

        this.createShape(true);
View Full Code Here

        if (hasTexCoord){
            tcBuf = BufferUtils.createFloatBuffer(vertIndexMap.size() * 2);
            m.setBuffer(VertexBuffer.Type.TexCoord, 2, tcBuf);
        }

        IndexBuffer indexBuf = null;
        if (vertIndexMap.size() >= 65536){
            // too many verticies: use intbuffer instead of shortbuffer
            IntBuffer ib = BufferUtils.createIntBuffer(newFaces.size() * 3);
            m.setBuffer(VertexBuffer.Type.Index, 3, ib);
            indexBuf = new IndexIntBuffer(ib);
        }else{
            ShortBuffer sb = BufferUtils.createShortBuffer(newFaces.size() * 3);
            m.setBuffer(VertexBuffer.Type.Index, 3, sb);
            indexBuf = new IndexShortBuffer(sb);
        }

        int numFaces = newFaces.size();
        for (int i = 0; i < numFaces; i++){
            Face f = newFaces.get(i);
            if (f.verticies.length != 3)
                continue;

            Vertex v0 = f.verticies[0];
            Vertex v1 = f.verticies[1];
            Vertex v2 = f.verticies[2];

            posBuf.position(v0.index * 3);
            posBuf.put(v0.v.x).put(v0.v.y).put(v0.v.z);
            posBuf.position(v1.index * 3);
            posBuf.put(v1.v.x).put(v1.v.y).put(v1.v.z);
            posBuf.position(v2.index * 3);
            posBuf.put(v2.v.x).put(v2.v.y).put(v2.v.z);

            if (normBuf != null){
                if (v0.vn != null){
                    normBuf.position(v0.index * 3);
                    normBuf.put(v0.vn.x).put(v0.vn.y).put(v0.vn.z);
                    normBuf.position(v1.index * 3);
                    normBuf.put(v1.vn.x).put(v1.vn.y).put(v1.vn.z);
                    normBuf.position(v2.index * 3);
                    normBuf.put(v2.vn.x).put(v2.vn.y).put(v2.vn.z);
                }
            }

            if (tcBuf != null){
                if (v0.vt != null){
                    tcBuf.position(v0.index * 2);
                    tcBuf.put(v0.vt.x).put(v0.vt.y);
                    tcBuf.position(v1.index * 2);
                    tcBuf.put(v1.vt.x).put(v1.vt.y);
                    tcBuf.position(v2.index * 2);
                    tcBuf.put(v2.vt.x).put(v2.vt.y);
                }
            }

            int index = i * 3; // current face * 3 = current index
            indexBuf.put(index,   v0.index);
            indexBuf.put(index+1, v1.index);
            indexBuf.put(index+2, v2.index);
        }

        m.setBuffer(VertexBuffer.Type.Position, 3, posBuf);
        // index buffer and others were set on creation

View Full Code Here

    public Mesh createMesh(Vector3f scale, Vector2f tcScale, Vector2f tcOffset, float offsetAmount, int totalSize, boolean center, int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod) {
        FloatBuffer pb = writeVertexArray(null, scale, center);
        FloatBuffer texb = writeTexCoordArray(null, tcOffset, tcScale, offsetAmount, totalSize);
        FloatBuffer nb = writeNormalArray(null, scale);
        Buffer ib;
        IndexBuffer idxB = writeIndexArrayLodDiff(lod, rightLod, topLod, leftLod, bottomLod, totalSize);
        if (idxB.getBuffer() instanceof IntBuffer)
            ib = (IntBuffer)idxB.getBuffer();
        else
            ib = (ShortBuffer)idxB.getBuffer();
        FloatBuffer bb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
        FloatBuffer tanb = BufferUtils.createFloatBuffer(getWidth() * getHeight() * 3);
        writeTangentArray(nb, tanb, bb, texb, scale);
        Mesh m = new Mesh();
        m.setMode(Mode.TriangleStrip);
View Full Code Here

    public IndexBuffer writeIndexArrayLodDiff(int lod, boolean rightLod, boolean topLod, boolean leftLod, boolean bottomLod, int totalSize) {

       
        int numIndexes = calculateNumIndexesLodDiff(lod);
       
        IndexBuffer ib = IndexBuffer.createIndexBuffer(numIndexes, numIndexes);
        VerboseBuffer buffer = new VerboseBuffer(ib);


        // generate center squares minus the edges
        //System.out.println("for (x="+lod+"; x<"+(getWidth()-(2*lod))+"; x+="+lod+")");
View Full Code Here

    public IndexBuffer writeIndexArrayLodVariable(int lod, int rightLod, int topLod, int leftLod, int bottomLod, int totalSize) {

        int numIndexes = calculateNumIndexesLodDiff(lod);
       
        IndexBuffer ib = IndexBuffer.createIndexBuffer(numIndexes, numIndexes);
        VerboseBuffer buffer = new VerboseBuffer(ib);


        // generate center squares minus the edges
        //System.out.println("for (x="+lod+"; x<"+(getWidth()-(2*lod))+"; x+="+lod+")");
View Full Code Here

TOP

Related Classes of com.jme3.scene.mesh.IndexBuffer

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.