public void put(int value) { delegate.put(count, value); count++; } /*public void put(int value) {
private int getTargetNumBuffers(MorphTarget morphTarget) { int num = 0; if (morphTarget.getBuffer(VertexBuffer.Type.Position) != null) num++; if (morphTarget.getBuffer(VertexBuffer.Type.Normal) != null) num++; // if tangents are not needed we don't count the tangent buffer if (!approximateTangents && morphTarget.getBuffer(VertexBuffer.Type.Tangent) != null) { num++; } return num; }
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()); } }
public static IndexBuffer wrapIndexBuffer(Buffer buf) { if (buf instanceof ByteBuffer) { return new IndexByteBuffer((ByteBuffer) buf); } else if (buf instanceof ShortBuffer) { return new IndexShortBuffer((ShortBuffer) buf); } else if (buf instanceof IntBuffer) { return new IndexIntBuffer((IntBuffer) buf); } else { throw new UnsupportedOperationException("Index buffer type unsupported: "+ buf.getClass()); } }
/** * 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 BIHTree(Mesh mesh, int maxTrisPerNode) { this.mesh = mesh; this.maxTrisPerNode = maxTrisPerNode; if (maxTrisPerNode < 1) { throw new IllegalArgumentException("maxTrisPerNode cannot be less than 1"); } if (mesh == null) { throw new IllegalArgumentException("Mesh cannot be null"); } bihSwapTmp = new float[9]; VertexBuffer vBuffer = mesh.getBuffer(Type.Position); if(vBuffer == null){ throw new IllegalArgumentException("A mesh should at least contain a Position buffer"); } IndexBuffer ib = mesh.getIndexBuffer(); FloatBuffer vb = (FloatBuffer) vBuffer.getData(); if (ib == null) { ib = new VirtualIndexBuffer(mesh.getVertexCount(), mesh.getMode()); } else if (mesh.getMode() != Mode.Triangles) { ib = new WrappedIndexBuffer(mesh); } numTris = ib.size() / 3; initTriList(vb, ib); }
/** * Creates an index buffer that can contain the given amount * of vertices. * Returns {@link IndexShortBuffer} * * @param vertexCount The amount of vertices to contain * @param indexCount The amount of indices * to contain. * @return A new index buffer */ public static IndexBuffer createIndexBuffer(int vertexCount, int indexCount){ if (vertexCount > 65535){ return new IndexIntBuffer(BufferUtils.createIntBuffer(indexCount)); }else{ return new IndexShortBuffer(BufferUtils.createShortBuffer(indexCount)); } }
@Override public Buffer getBuffer() { return ib.getBuffer(); }
@Override public int get() { int i = get(position); position++; return i; }
/** * Get the index buffer for this mesh. * Will return <code>null</code> if no index buffer is set. * * @return The index buffer of this mesh. * * @see Type#Index */ public IndexBuffer getIndexBuffer() { VertexBuffer vb = getBuffer(Type.Index); if (vb == null) { return null; } return IndexBuffer.wrapIndexBuffer(vb.getData()); }
@Override public void read(JmeImporter im) throws IOException { InputCapsule ic = im.getCapsule(this); for (VertexBuffer.Type type : VertexBuffer.Type.values()) { FloatBuffer b = ic.readFloatBuffer(type.name(), null); if(b!= null){ setBuffer(type, b); } } } }
private int getIndex(int face, int vert) { IndexBuffer index = mesh.getIndexBuffer(); int vertIndex = index.get(face * 3 + vert); return vertIndex; }
/** * @see Buffer#rewind() */ public void rewind() { getBuffer().rewind(); }
private void mergeMorphTargets(int targetNumBuffers, float weight, MorphTarget t, boolean init) { if (targetNumBuffers >= 1) { mergeTargetBuffer(tmpPosArray, weight, t.getBuffer(VertexBuffer.Type.Position), init); } if (targetNumBuffers >= 2) { mergeTargetBuffer(tmpNormArray, weight, t.getBuffer(VertexBuffer.Type.Normal), init); } if (!approximateTangents && targetNumBuffers == 3) { mergeTargetBuffer(tmpTanArray, weight, t.getBuffer(VertexBuffer.Type.Tangent), init); } }
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; } }
/** * @return * @see Buffer#remaining() */ public int remaining() { return getBuffer().remaining(); }
@Override public void onAction(String name, boolean isPressed, float tpf) { if (name.equals("change") && isPressed) { box.setBuffer(VertexBuffer.Type.MorphTarget0, 3, target2.getBuffer(VertexBuffer.Type.Position)); } } }, "change");
private void writeCpuBuffer(int targetNumBuffers, MorphTarget mt) { if (targetNumBuffers >= 1) { FloatBuffer dest = mt.getBuffer(VertexBuffer.Type.Position); dest.rewind(); dest.put(tmpPosArray, 0, dest.capacity()); } if (targetNumBuffers >= 2) { FloatBuffer dest = mt.getBuffer(VertexBuffer.Type.Normal); dest.rewind(); dest.put(tmpNormArray, 0, dest.capacity()); } if (!approximateTangents && targetNumBuffers == 3) { FloatBuffer dest = mt.getBuffer(VertexBuffer.Type.Tangent); dest.rewind(); dest.put(tmpTanArray, 0, dest.capacity()); } }
private int bindMorphtargetBuffer(Mesh mesh, int targetNumBuffers, int boundBufferIdx, MorphTarget t) { int start = VertexBuffer.Type.MorphTarget0.ordinal(); if (targetNumBuffers >= 1) { activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Position)); boundBufferIdx++; } if (targetNumBuffers >= 2) { activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Normal)); boundBufferIdx++; } if (!approximateTangents && targetNumBuffers == 3) { activateBuffer(mesh, boundBufferIdx, start, t.getBuffer(VertexBuffer.Type.Tangent)); boundBufferIdx++; } return boundBufferIdx; }