Class GltfLoader

java.lang.Object
com.codename1.gpu.GltfLoader

public final class GltfLoader extends Object

Loads a Mesh from a glTF 2.0 model so applications can render real authored geometry rather than only the built in Primitives. Both the binary container (.glb) and the JSON form (.gltf) are supported; for the JSON form, buffers must be embedded as data: URIs (external .bin side files are not fetched). The first triangle primitive of the first mesh is read.

The loader produces the engine's standard VertexFormat.POSITION_NORMAL_TEXCOORD layout so the result drops straight into any built in Material:

  • POSITION (required) is read as the vertex position.
  • NORMAL is read when present; otherwise flat per-triangle normals are computed so lit materials still shade correctly.
  • TEXCOORD_0 is read when present; otherwise zero texture coordinates are written.

Materials, textures, skinning and animation in the glTF are ignored by load -- it is a geometry loader. Apply a Material (and a Texture loaded via the device) to the returned mesh as usual. To keep the whole file -- every part, the materials, the skeleton and the animation clips -- use loadScene(byte[]) and draw it with com.codename1.gaming.AnimatedModel.

Example:

byte[] glb = loadGlbBytes(); // bytes of a .glb model
Mesh mesh = GltfLoader.load(device, glb);
Material material = new Material(Material.Type.PHONG).setTexture(texture);
device.draw(mesh, material, modelMatrix);
  • Method Details

    • load

      public static Mesh load(GraphicsDevice device, InputStream in) throws IOException

      Reads all bytes from the stream and loads the model. The stream is closed.

      Parameters
      • device: the device that allocates the mesh buffers

      • in: a stream over .glb or .gltf bytes

      Returns

      the loaded mesh

      Throws:
      IOException
    • load

      public static Mesh load(GraphicsDevice device, byte[] data)

      Loads a model from in-memory .glb or .gltf bytes.

      Parameters
      • device: the device that allocates the mesh buffers

      • data: the raw model bytes (binary .glb or JSON .gltf)

      Returns

      the loaded mesh

    • load

      public static Mesh load(byte[] data)

      Loads a model from in-memory .glb or .gltf bytes without a GraphicsDevice, allocating the buffers directly. Behaves exactly like load(GraphicsDevice, byte[]); useful for parsing geometry off the render thread or handing meshes to non GPU consumers such as the AR content pipeline.

      Parameters
      • data: the raw model bytes (binary .glb or JSON .gltf)
      Returns

      the loaded mesh

    • load

      public static Mesh load(InputStream in) throws IOException

      Reads all bytes from the stream and loads the model without a GraphicsDevice. The stream is closed.

      Parameters
      • in: a stream over .glb or .gltf bytes
      Returns

      the loaded mesh

      Throws:
      IOException
    • loadModel

      public static GltfLoader.GltfModel loadModel(GraphicsDevice device, byte[] data)

      Loads a model together with its base-color texture from in-memory .glb or .gltf bytes. Use this (rather than load) when the model carries its own texture and you want it applied automatically.

      Parameters
      • device: the device that allocates the mesh buffers and texture

      • data: the raw model bytes

      Returns

      the loaded mesh plus its base-color texture (null texture if the model has none)

    • loadModel

      public static GltfLoader.GltfModel loadModel(GraphicsDevice device, InputStream in) throws IOException
      Reads all bytes from the stream and loads the model with its base-color texture. The stream is closed.
      Throws:
      IOException
    • loadImageModel

      public static GltfLoader.GltfImageModel loadImageModel(byte[] data)

      Loads a model together with its base-color image from in-memory .glb or .gltf bytes without a GraphicsDevice. The image is decoded but not uploaded to the GPU, so this works off the render thread and on non GPU consumers such as the AR content pipeline.

      Parameters
      • data: the raw model bytes
      Returns

      the loaded mesh plus its decoded base-color image (null image if the model has none)

    • loadImageModel

      public static GltfLoader.GltfImageModel loadImageModel(InputStream in) throws IOException
      Reads all bytes from the stream and loads the model with its base-color image without a GraphicsDevice. The stream is closed.
      Throws:
      IOException
    • loadScene

      public static GltfScene loadScene(byte[] data)

      Loads every node, primitive, material, skin and animation clip of a glTF file, keeping the vertex data on the CPU. Use this for characters and other multi-part or animated models; com.codename1.gaming.AnimatedModel poses and draws the result.

      Unlike load(byte[]) this reads every triangle primitive of every mesh node, the base color factor and embedded base color image of each material, every skin (joints and inverse bind matrices) and every animation clip with LINEAR or STEP sampling. CUBICSPLINE samplers are read as linear through their value keys. Morph targets are ignored.

      Parameters
      • data: the bytes of a .glb or .gltf (with embedded buffers) file
      Returns

      the parsed scene

    • loadScene

      public static GltfScene loadScene(InputStream in) throws IOException

      Reads all bytes from the stream and loads them with loadScene(byte[]). The stream is closed.

      Parameters
      • in: a stream over .glb or .gltf bytes
      Returns

      the parsed scene

      Throws:
      IOException