Esempio n. 1
0
  protected void regenInfluenceOffsets(int index) {
    FloatBuffer verts, norms;
    Vector3f vertex = new Vector3f();
    Vector3f normal = new Vector3f();

    Geometry geom = getSkin(index);
    verts = geom.getVertexBuffer();
    if (verts == null) {
      logger.log(Level.FINE, "Skipping skin ''{0}'' because verts uninitialized", geom.getName());
      return;
    }
    norms = geom.getNormalBuffer();
    verts.clear();
    norms.clear();
    for (ArrayList<BoneInfluence> infs : cache[index]) {
      vertex.set(verts.get(), verts.get(), verts.get());
      normal.set(norms.get(), norms.get(), norms.get());

      if (infs == null) continue;

      if (bindMatrix != null) {
        bindMatrix.mult(vertex, vertex);
        bindMatrix.rotateVect(normal);
      }

      for (int x = infs.size() - 1; x >= 0; --x) {
        BoneInfluence infl = infs.get(x);
        if (infl.bone == null) continue;
        infl.vOffset = new Vector3f(vertex);
        infl.bone.bindMatrix.inverseTranslateVect(infl.vOffset);
        infl.bone.bindMatrix.inverseRotateVect(infl.vOffset);

        infl.nOffset = new Vector3f(normal);
        infl.bone.bindMatrix.inverseRotateVect(infl.nOffset);
      }
    }
  }