public Mesh createMesh(Vector3f scale, Vector2f tcScale, boolean center){ FloatBuffer pb = writeVertexArray(null, scale, center); FloatBuffer tb = writeTexCoordArray(null, Vector2f.ZERO, tcScale); FloatBuffer nb = writeNormalArray(null, scale); IntBuffer ib = writeIndexArray(null); Mesh m = new Mesh(); m.setBuffer(Type.Position, 3, pb); m.setBuffer(Type.Normal, 3, nb); m.setBuffer(Type.TexCoord, 2, tb); m.setBuffer(Type.Index, 3, ib); m.setStatic(); m.updateBound(); return m; }
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()); } }
/** * Called by the Renderer when a mesh has been drawn. */ public void onMeshDrawn(Mesh mesh, int lod, int count){ if( !enabled ) return; numObjects += 1; numTriangles += mesh.getTriangleCount(lod) * count; numVertices += mesh.getVertexCount() * count; }
public MikkTSpaceImpl(Mesh mesh) { this.mesh = mesh; //replacing any existing tangent buffer, if you came here you want them new. mesh.clearBuffer(VertexBuffer.Type.Tangent); FloatBuffer fb = BufferUtils.createFloatBuffer(mesh.getVertexCount() * 4); mesh.setBuffer(VertexBuffer.Type.Tangent, 4, fb); }
public WrappedIndexBuffer(Mesh mesh){ super(mesh.getVertexCount(), mesh.getMode()); this.ib = mesh.getIndexBuffer(); switch (meshMode){ case Points: numIndices = mesh.getTriangleCount(); break; case Lines: case LineLoop: case LineStrip: numIndices = mesh.getTriangleCount() * 2; break; case Triangles: case TriangleStrip: case TriangleFan: numIndices = mesh.getTriangleCount() * 3; break; default: throw new UnsupportedOperationException(); } }
Mesh jmeMesh = new Mesh(); jmeMesh.setMode(Mesh.Mode.Triangles); if (inspectionVertex.pos != null) { posBuf = BufferUtils.createVector3Buffer(vertices.size()); jmeMesh.setBuffer(VertexBuffer.Type.Position, 3, posBuf); jmeMesh.setBuffer(VertexBuffer.Type.Normal, 3, normBuf); jmeMesh.setBuffer(VertexBuffer.Type.Tangent, 4, tangBuf); jmeMesh.setBuffer(VertexBuffer.Type.TexCoord, 2, uv0Buf); jmeMesh.setBuffer(VertexBuffer.Type.TexCoord2, 2, uv1Buf); jmeMesh.setBuffer(VertexBuffer.Type.Color, 4, colorBuf); jmeMesh.getBuffer(VertexBuffer.Type.Color).setNormalized(true); jmeMesh.setBuffer(VertexBuffer.Type.BoneIndex, 4, boneIndices); jmeMesh.setBuffer(VertexBuffer.Type.BoneWeight, 4, boneWeights); jmeMesh.setBuffer(weightsHW); jmeMesh.setBuffer(indicesHW); jmeMesh.setBuffer(VertexBuffer.Type.Index, 3, ib); indexBuf = new IndexIntBuffer(ib); } else { ShortBuffer sb = BufferUtils.createShortBuffer(indexes.size()); jmeMesh.setBuffer(VertexBuffer.Type.Index, 3, sb);
totalVerts += geom.getVertexCount(); totalTris += geom.getTriangleCount(); totalLodLevels = Math.min(totalLodLevels, geom.getMesh().getNumLodLevels()); switch (geom.getMesh().getMode()) { case Points: listMode = Mode.Points; for (VertexBuffer vb : geom.getMesh().getBufferList().getArray()) { int currentCompsForBuf = compsForBuf[vb.getBufferType().ordinal()]; if (vb.getBufferType() != Type.Index && currentCompsForBuf != 0 && currentCompsForBuf != vb.getNumComponents()) { maxWeights = Math.max(maxWeights, geom.getMesh().getMaxNumWeights()); outMesh.setMaxNumWeights(maxWeights); outMesh.setMode(mode); if (totalVerts >= 65536) { vb.setupData(Usage.Static, compsForBuf[i], formatForBuf[i], data); vb.setNormalized(normForBuf[i]); outMesh.setBuffer(vb); int geomVertCount = inMesh.getVertexCount(); int geomTriCount = inMesh.getTriangleCount(); VertexBuffer inBuf = inMesh.getBuffer(Type.values()[bufType]); VertexBuffer outBuf = outMesh.getBuffer(Type.values()[bufType]); IndexBuffer inIdx = inMesh.getIndicesAsList();
public static Mesh genNormalLines(Mesh mesh, float scale) { FloatBuffer vertexBuffer = (FloatBuffer) mesh.getBuffer(Type.Position).getData(); FloatBuffer normalBuffer = (FloatBuffer) mesh.getBuffer(Type.Normal).getData(); Mesh lineMesh = new Mesh(); lineMesh.setMode(Mesh.Mode.Lines); lineMesh.setBuffer(Type.Position, 3, lineVertex); lineMesh.setBuffer(Type.Color, 4, lineColor); lineMesh.setStatic();
public static Mesh convert(IndexedMesh mesh) { Mesh jmeMesh = new Mesh(); jmeMesh.setBuffer(Type.Index, 3, BufferUtils.createShortBuffer(mesh.numTriangles * 3)); jmeMesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(mesh.numVertices * 3)); IndexBuffer indicess = jmeMesh.getIndexBuffer(); FloatBuffer vertices = jmeMesh.getFloatBuffer(Type.Position); for (int i = 0; i < mesh.numTriangles * 3; i++) { indicess.put(i, mesh.triangleIndexBase.getInt(i * 4)); } for (int i = 0; i < mesh.numVertices * 3; i++) { vertices.put(i, mesh.vertexBase.getFloat(i * 4)); } jmeMesh.updateCounts(); jmeMesh.updateBound(); jmeMesh.getFloatBuffer(Type.Position).clear(); return jmeMesh; }
VertexBuffer oldIdxBuf = getBuffer(Type.Index); IndexBuffer indexBuf = getIndexBuffer(); int numIndices = indexBuf.size(); newIndexBuf instanceof IndexIntBuffer ? Format.UnsignedInt : Format.UnsignedShort, newIndexBuf.getBuffer()); clearBuffer(Type.Index); setBuffer(newIdxBuf); SafeArrayList<VertexBuffer> oldVertexData = other.getBufferList(); for (VertexBuffer oldVb : oldVertexData) { if (oldVb.getBufferType() == VertexBuffer.Type.Index) { clearBuffer(newVb.getBufferType()); setBuffer(newVb); setMaxNumWeights(other.getMaxNumWeights()); updateCounts(); updateBound();
for (JsonElement primitive : primitives) { JsonObject meshObject = primitive.getAsJsonObject(); Mesh mesh = new Mesh(); Integer mode = getAsInteger(meshObject, "mode"); mesh.setMode(getMeshMode(mode)); Integer indices = getAsInteger(meshObject, "indices"); if (indices != null) { mesh.setBuffer(readAccessorData(indices, new VertexBufferPopulator(VertexBuffer.Type.Index))); VertexBuffer vb = readAccessorData(entry.getValue().getAsInt(), new VertexBufferPopulator(getVertexBufferType(bufferType))); if (vb != null) { mesh.setBuffer(vb); if (mesh.getBuffer(VertexBuffer.Type.BoneIndex) != null) { mesh.setBuffer(weightsHW); mesh.setBuffer(indicesHW); mesh.generateBindPose(); mesh.addMorphTarget(morphTarget); if (useNormalsFlag && mesh.getBuffer(VertexBuffer.Type.Tangent) == null) {
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; }
mat.setTexture("ColorMap", tex3); Mesh m = new Mesh(); Vector3f[] vertices = new Vector3f[8]; vertices[0] = new Vector3f(0, 0, 0); m.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(vertices)); m.setBuffer(Type.TexCoord, 3, BufferUtils.createFloatBuffer(texCoord)); m.setBuffer(Type.Index, 1, BufferUtils.createIntBuffer(indexes)); m.updateBound();
@Override public void simpleInitApp() { Mesh mesh = new Mesh(); mesh.setBuffer(VertexBuffer.Type.Index, 1, BufferUtils.createIntBuffer(new int[]{1})); mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(new float[]{0, 0, 0})); mesh.setMode(Mesh.Mode.Points); mesh.setBound(new BoundingBox(new Vector3f(0, 0, 0), 10, 10, 10)); mesh.updateCounts(); Geometry geometry = new Geometry("Test", mesh); geometry.updateGeometricState(); geometry.setMaterial(new Material(assetManager, "Materials/Geom/SimpleGeom.j3md")); //geometry.getMaterial().getAdditionalRenderState().setFaceCullMode(RenderState.FaceCullMode.Off); //geometry.setMaterial(assetManager.loadMaterial("Materials/Geom/SimpleTess.j3md")); rootNode.attachChild(geometry); Geometry geometry1 = new Geometry("T1", new Sphere(10, 10, 1)); geometry1.setMaterial(new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md")); rootNode.attachChild(geometry1); }
Mesh distortionMesh = new Mesh(); float m_iLensGridSegmentCountH = 43, m_iLensGridSegmentCountV = 43; distortionMesh.setBuffer(VertexBuffer.Type.Position, 3, verts); distortionMesh.setBuffer(VertexBuffer.Type.Index, 1, indices); distortionMesh.setBuffer(VertexBuffer.Type.TexCoord, 2, texcoordR); distortionMesh.setBuffer(VertexBuffer.Type.TexCoord2, 2, texcoordG); distortionMesh.setBuffer(VertexBuffer.Type.TexCoord3, 2, texcoordB); distortionMesh.setStatic(); return distortionMesh;
public static Mesh getDebugMesh(CollisionShape shape) { Mesh mesh = null; if (shape.getCShape() instanceof ConvexShape) { mesh = new Mesh(); mesh.setBuffer(Type.Position, 3, getVertices((ConvexShape) shape.getCShape())); mesh.getFloatBuffer(Type.Position).clear(); } else if (shape.getCShape() instanceof ConcaveShape) { mesh = new Mesh(); mesh.setBuffer(Type.Position, 3, getVertices((ConcaveShape) shape.getCShape())); mesh.getFloatBuffer(Type.Position).clear(); } return mesh; }
count = Math.max(mesh.getInstanceCount(), count); VertexBuffer interleavedData = mesh.getBuffer(Type.InterleavedData); if (interleavedData != null && interleavedData.isUpdateNeeded()) { updateBufferData(interleavedData); if (mesh.getNumLodLevels() > 0) { indices = mesh.getLodLevel(lod); } else { indices = mesh.getBuffer(Type.Index); for (VertexBuffer vb : mesh.getBufferList().getArray()) { if (vb.getBufferType() == Type.InterleavedData drawTriangleList(indices, mesh, count); } else { drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
protected final void createMesh() { if( mesh == null ) { mesh = new Mesh(); mesh.setMode(Mesh.Mode.Lines); } mesh.setBuffer(Type.Position, 3, BufferUtils.createFloatBuffer(size * 4 * 3)); FloatBuffer cb = BufferUtils.createFloatBuffer(size * 4 * 4); for( int i = 0; i < size; i++ ) { // For each index we add 4 colors, one for each line // endpoint for two layers. cb.put(0.5f).put(0.5f).put(0).put(1); cb.put(1).put(1).put(0).put(1); cb.put(0).put(0.5f).put(0.5f).put(1); cb.put(0).put(1).put(1).put(1); } mesh.setBuffer(Type.Color, 4, cb); }
Mesh q = new Mesh(); q.setBuffer(Type.Position, 3, new float[] q.setBuffer(Type.Index, 3, new int[]{ 0, 1, 2 }); q.setBound(new BoundingSphere()); q.updateBound();