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; }
if(targets != null){ for (JsonElement target : targets) { MorphTarget morphTarget = new MorphTarget(); for (Map.Entry<String, JsonElement> entry : target.getAsJsonObject().entrySet()) { String bufferType = entry.getKey(); VertexBuffer vb = readAccessorData(entry.getValue().getAsInt(), new VertexBufferPopulator(type)); if (vb != null) { morphTarget.setBuffer(type, (FloatBuffer)vb.getData());
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; }
@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); } } } }
buffer.rewind(); MorphTarget target = new MorphTarget(); target.setBuffer(VertexBuffer.Type.Position, buffer); box.addMorphTarget(target); buffer.rewind(); final MorphTarget target2 = new MorphTarget(); target2.setBuffer(VertexBuffer.Type.Position, buffer); box.addMorphTarget(target2);
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()); } }