/** * Computes the transformed and weighted position of the given vertex. Adds that to the target * vertex. * * @param base the vertex to transform * @param trgt the vertex to add to. If null is given, it is just assigned to * @return the final vertex, a new vertex if <code>null</code> was given */ public void addTransformed(Vertex base, Vertex trgt) { Objects.requireNonNull(base); Objects.requireNonNull(trgt); base.getPosition(posBuff); base.getNormal(normBuff); // Transform points with matrix this.bone.transform(posBuff); this.bone.transformNormal(normBuff); posBuff.scale(this.strength); normBuff.scale(this.strength); trgt.offset(posBuff); trgt.addNormal(normBuff); }
@SuppressWarnings("unchecked") public static String toJSON(String infoType, Object info) { // Logger.debug(infoType+" -- "+info); StringBuilder sb = new StringBuilder(); String sep = ""; if (info == null) return packageJSON(infoType, (String) null); if (info instanceof Integer || info instanceof Float || info instanceof Double) return packageJSON(infoType, info.toString()); if (info instanceof String) return packageJSON(infoType, fixString((String) info)); if (info instanceof String[]) { sb.append("["); int imax = ((String[]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(fixString(((String[]) info)[i])); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof int[]) { sb.append("["); int imax = ((int[]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(((int[]) info)[i]); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof float[]) { sb.append("["); int imax = ((float[]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(((float[]) info)[i]); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof double[]) { sb.append("["); int imax = ((double[]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(((double[]) info)[i]); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof Point3f[]) { sb.append("["); int imax = ((Point3f[]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep); addJsonTuple(sb, ((Point3f[]) info)[i]); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof String[][]) { sb.append("["); int imax = ((String[][]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(toJSON(null, ((String[][]) info)[i])); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof int[][]) { sb.append("["); int imax = ((int[][]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(toJSON(null, ((int[][]) info)[i])); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof float[][]) { sb.append("["); int imax = ((float[][]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(toJSON(null, ((float[][]) info)[i])); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof float[][][]) { sb.append("["); int imax = ((float[][][]) info).length; for (int i = 0; i < imax; i++) { sb.append(sep).append(toJSON(null, ((float[][][]) info)[i])); sep = ","; } sb.append("]"); return packageJSON(infoType, sb); } if (info instanceof List) { sb.append("[ "); int imax = ((List<?>) info).size(); for (int i = 0; i < imax; i++) { sb.append(sep).append(toJSON(null, ((List<?>) info).get(i))); sep = ","; } sb.append(" ]"); return packageJSON(infoType, sb); } if (info instanceof Matrix4f) { float[] x = new float[4]; Matrix4f m4 = (Matrix4f) info; sb.append('['); for (int i = 0; i < 4; i++) { if (i > 0) sb.append(','); m4.getRow(i, x); sb.append(toJSON(null, x)); } sb.append(']'); return packageJSON(infoType, sb); } if (info instanceof Matrix3f) { float[] x = new float[3]; Matrix3f m3 = (Matrix3f) info; sb.append('['); for (int i = 0; i < 3; i++) { if (i > 0) sb.append(','); m3.getRow(i, x); sb.append(toJSON(null, x)); } sb.append(']'); return packageJSON(infoType, sb); } if (info instanceof Tuple3f) { addJsonTuple(sb, (Tuple3f) info); return packageJSON(infoType, sb); } if (info instanceof AxisAngle4f) { sb.append("[") .append(((AxisAngle4f) info).x) .append(",") .append(((AxisAngle4f) info).y) .append(",") .append(((AxisAngle4f) info).z) .append(",") .append((float) (((AxisAngle4f) info).angle * 180d / Math.PI)) .append("]"); return packageJSON(infoType, sb); } if (info instanceof Point4f) { sb.append("[") .append(((Point4f) info).x) .append(",") .append(((Point4f) info).y) .append(",") .append(((Point4f) info).z) .append(",") .append(((Point4f) info).w) .append("]"); return packageJSON(infoType, sb); } if (info instanceof Map) { sb.append("{ "); Iterator<String> e = ((Map<String, ?>) info).keySet().iterator(); while (e.hasNext()) { String key = e.next(); sb.append(sep).append(packageJSON(key, toJSON(null, ((Map<?, ?>) info).get(key)))); sep = ","; } sb.append(" }"); return packageJSON(infoType, sb); } return packageJSON(infoType, fixString(info.toString())); }
public void lifeInterp(float life, float mid, Point4f a, Point4f b, Point4f c, Point4f dest) { if (life <= mid) dest.interpolate(a, b, life / mid); else dest.interpolate(b, c, (life - mid) / (1.0F - mid)); }