/** * Gets the triangle vertex indices at the given triangle index * and stores them into the given int array. * * @param index The index of the triangle. * Should be between 0 and {@link #getTriangleCount()}. * * @param indices Indices of the triangle's vertices */ public void getTriangle(int index, int[] indices){ IndexBuffer ib = getIndicesAsList(); // acquire triangle's vertex indices int vertIndex = index * 3; indices[0] = ib.get(vertIndex); indices[1] = ib.get(vertIndex+1); indices[2] = ib.get(vertIndex+2); }
public static void convertToList(Mesh mesh){ IndexBuffer inBuf = mesh.getIndicesAsList(); IndexBuffer outBuf = IndexBuffer.createIndexBuffer(mesh.getVertexCount(), inBuf.size()); for (int i = 0; i < inBuf.size(); i++){ outBuf.put(i, inBuf.get(i)); } mesh.clearBuffer(Type.Index); switch (mesh.getMode()){ case LineLoop: case LineStrip: mesh.setMode(Mode.Lines); break; case TriangleStrip: case TriangleFan: mesh.setMode(Mode.Triangles); break; default: break; } if (outBuf instanceof IndexIntBuffer){ mesh.setBuffer(Type.Index, 3, (IntBuffer)outBuf.getBuffer()); }else{ mesh.setBuffer(Type.Index, 3, (ShortBuffer)outBuf.getBuffer()); } }
@Override public int get(int i) { int superIdx = super.get(i); return ib.get(superIdx); }
private int getIndex(int face, int vert) { IndexBuffer index = mesh.getIndexBuffer(); int vertIndex = index.get(face * 3 + vert); return vertIndex; }
private void initTriList(FloatBuffer vb, IndexBuffer ib) { pointData = new float[numTris * 3 * 3]; int p = 0; for (int i = 0; i < numTris * 3; i += 3) { int vert = ib.get(i) * 3; pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert); vert = ib.get(i + 1) * 3; pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert); vert = ib.get(i + 2) * 3; pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert++); pointData[p++] = vb.get(vert); } triIndices = new int[numTris]; for (int i = 0; i < numTris; i++) { triIndices[i] = i; } }
/** * Gets the triangle vertex positions at the given triangle index * and stores them into the v1, v2, v3 arguments. * * @param index The index of the triangle. * Should be between 0 and {@link #getTriangleCount()}. * * @param v1 Vector to contain first vertex position * @param v2 Vector to contain second vertex position * @param v3 Vector to contain third vertex position */ public void getTriangle(int index, Vector3f v1, Vector3f v2, Vector3f v3){ VertexBuffer pb = getBuffer(Type.Position); IndexBuffer ib = getIndicesAsList(); if (pb != null && pb.getFormat() == Format.Float && pb.getNumComponents() == 3){ FloatBuffer fpb = (FloatBuffer) pb.getData(); // aquire triangle's vertex indices int vertIndex = index * 3; int vert1 = ib.get(vertIndex); int vert2 = ib.get(vertIndex+1); int vert3 = ib.get(vertIndex+2); BufferUtils.populateFromBuffer(v1, fpb, vert1); BufferUtils.populateFromBuffer(v2, fpb, vert2); BufferUtils.populateFromBuffer(v3, fpb, vert3); }else{ throw new UnsupportedOperationException("Position buffer not set or " + " has incompatible format"); } }
index[j] = indexBuffer.get(i * 3 + j); populateFromBuffer(v[j], vertexBuffer, index[j]); populateFromBuffer(t[j], textureBuffer, index[j]);
public static synchronized IndexedMesh convert(Mesh mesh) { IndexedMesh jBulletIndexedMesh = new IndexedMesh(); jBulletIndexedMesh.triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4); jBulletIndexedMesh.vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4); IndexBuffer indices = mesh.getIndicesAsList(); FloatBuffer vertices = mesh.getFloatBuffer(Type.Position); vertices.rewind(); int verticesLength = mesh.getVertexCount() * 3; jBulletIndexedMesh.numVertices = mesh.getVertexCount(); jBulletIndexedMesh.vertexStride = 12; //3 verts * 4 bytes per. for (int i = 0; i < verticesLength; i++) { float tempFloat = vertices.get(); jBulletIndexedMesh.vertexBase.putFloat(tempFloat); } int indicesLength = mesh.getTriangleCount() * 3; jBulletIndexedMesh.numTriangles = mesh.getTriangleCount(); jBulletIndexedMesh.triangleIndexStride = 12; //3 index entries * 4 bytes each. for (int i = 0; i < indicesLength; i++) { jBulletIndexedMesh.triangleIndexBase.putInt(indices.get(i)); } vertices.rewind(); vertices.clear(); return jBulletIndexedMesh; }
private void createCollisionMesh(Mesh mesh) { triangleIndexBase = BufferUtils.createByteBuffer(mesh.getTriangleCount() * 3 * 4); vertexBase = BufferUtils.createByteBuffer(mesh.getVertexCount() * 3 * 4); // triangleIndexBase = ByteBuffer.allocate(mesh.getTriangleCount() * 3 * 4); // vertexBase = ByteBuffer.allocate(mesh.getVertexCount() * 3 * 4); numVertices = mesh.getVertexCount(); vertexStride = 12; //3 verts * 4 bytes per. numTriangles = mesh.getTriangleCount(); 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(); createShape(); }
private void createCollisionMesh(Mesh mesh) { this.triangleIndexBase = BufferUtils.createByteBuffer(mesh.getTriangleCount() * 3 * 4); this.vertexBase = BufferUtils.createByteBuffer(mesh.getVertexCount() * 3 * 4); 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(null); }
Matrix4f mat = offsetMatrices[ib.get(idxWeights++)];
Matrix4f mat = offsetMatrices[ib.get(idxWeights++)];
Matrix4f mat = offsetMatrices[ib.get(idxWeights++)];
Matrix4f mat = offsetMatrices[ib.get(idxWeights++)];
triangleIndexBase.putInt(indices.get(i));
for (int vIndex = 0; vIndex < numVertices; vIndex++) { for (int wIndex = 0; wIndex < 4; wIndex++) { int bIndex = boneIndexBuffer.get(); float weight = weightBuffer.get(); if (wIndex < maxNumWeights && bIndex == biByte && weight != 0f) {