private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verType) {
        if (!transform.isIdentity()) { // if transform is the identity matrix, there's nothing to do
            VertexBuffer tc = mesh.getBuffer(verType);
            if (tc == null) {
                throw new IllegalStateException("The mesh has no texture coordinates");
            }
            if (tc.getFormat() != VertexBuffer.Format.Float) {
                throw new UnsupportedOperationException("Only float texture coord format is supported");
            }
            if (tc.getNumComponents() != 2) {
                throw new UnsupportedOperationException("Only 2D texture coords are supported");
            }
            FloatBuffer fb = (FloatBuffer) tc.getData();
            fb.clear();
            for (int i = 0; i < fb.limit() / 2; i++) {
                float x = fb.get();
                float y = fb.get();
                fb.position(fb.position() - 2);
                Vector3f v = transform.mult(new Vector3f(x, y, 1));
                fb.put(v.getX()).put(v.getY());
            }
            fb.clear();
            tc.updateData(fb);   
        }
    }
Scale/rotate/translate UV coordinates based on a transformation matrix.
Code adapted from scaleTextureCoordinates(Vector2f) in jme3-core/src/main/java/com/jme3/scene/Mesh.java
@param mesh The mesh holding the UV coordinates
@param transform The matrix containing the scale/rotate/translate transformations
@param verType The vertex buffer type from which to retrieve the UV coordinates
jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java