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; }
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); } }
@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 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; }
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 MorphTarget initCpuMorphTarget(Geometry geom) { MorphTarget res = new MorphTarget(); MorphTarget mt = geom.getMesh().getMorphTargets()[0]; FloatBuffer b = mt.getBuffer(VertexBuffer.Type.Position); if (b != null) { res.setBuffer(VertexBuffer.Type.Position, BufferUtils.createFloatBuffer(b.capacity())); } b = mt.getBuffer(VertexBuffer.Type.Normal); if (b != null) { res.setBuffer(VertexBuffer.Type.Normal, BufferUtils.createFloatBuffer(b.capacity())); } if (!approximateTangents) { b = mt.getBuffer(VertexBuffer.Type.Tangent); if (b != null) { res.setBuffer(VertexBuffer.Type.Tangent, BufferUtils.createFloatBuffer(b.capacity())); } } return res; }