private static Vector3f vertexVector3f(Mesh mesh,
            VertexBuffer.Type bufferType, int vertexIndex,
            Vector3f storeResult) {
        assert bufferType == VertexBuffer.Type.BindPoseNormal
                || bufferType == VertexBuffer.Type.BindPosePosition
                || bufferType == VertexBuffer.Type.Binormal
                || bufferType == VertexBuffer.Type.Normal
                || bufferType == VertexBuffer.Type.Position : bufferType;
        if (storeResult == null) {
            storeResult = new Vector3f();
        }

        VertexBuffer vertexBuffer = mesh.getBuffer(bufferType);
        FloatBuffer floatBuffer = (FloatBuffer) vertexBuffer.getDataReadOnly();
        floatBuffer.position(3 * vertexIndex);
        storeResult.x = floatBuffer.get();
        storeResult.y = floatBuffer.get();
        storeResult.z = floatBuffer.get();

        return storeResult;
    }
Copy Vector3f data for the indexed vertex from the specified vertex
buffer.
<p>
A software skin update is required BEFORE reading vertex
positions/normals/tangents from an animated mesh

@param mesh subject mesh (not null)
@param bufferType which buffer to read (5 legal values)
@param vertexIndex index into the mesh's vertices (&ge;0)
@param storeResult (modified if not null)
@return the data vector (either storeResult or a new instance)
jme3-jbullet/src/main/java/com/jme3/bullet/animation/RagUtils.java