Documentation
<h1 align="center">
   gltf
</h1>
<p align="center">
   <a href="https://crates.io/crates/gltf">
      <img src="https://img.shields.io/crates/v/gltf.svg" alt="crates.io">
   </a>
   <a href="https://docs.rs/gltf">
      <img src="https://docs.rs/gltf/badge.svg" alt="docs.rs">
   </a>
</p>

---

This crate is intended to load [glTF 2.0](https://www.khronos.org/gltf), a file format designed for the efficient transmission of 3D assets.

`rustc` version 1.61 or above is required.

### Reference infographic

![infographic](https://raw.githubusercontent.com/KhronosGroup/glTF/main/specification/2.0/figures/gltfOverview-2.0.0d.png)

<p align="center">From <a href="https://github.com/javagl/gltfOverview">javagl/gltfOverview</a></p>
<p align="center"><a href="https://www.khronos.org/files/gltf20-reference-guide.pdf">PDF version</a></p>

### Usage

See the [crate documentation](https://docs.rs/gltf) for example usage.

### Features

#### Extras and names

By default, `gltf` ignores all `extras` and `names` included with glTF assets. You can negate this by enabling the `extras` and `names` features, respectively.

```toml
[dependencies.gltf]
version = "1.4"
features = ["extras", "names"]
```

#### glTF extensions

The following glTF extensions are supported by the crate:

- `KHR_lights_punctual`
- `KHR_materials_pbrSpecularGlossiness`
- `KHR_materials_unlit`
- `KHR_texture_transform`
- `KHR_materials_variants`
- `KHR_materials_volume`
- `KHR_materials_specular`
- `KHR_materials_transmission`
- `KHR_materials_ior`
- `KHR_materials_emissive_strength `

To use an extension, list its name in the `features` section.

```toml
[dependencies.gltf]
features = ["KHR_materials_unlit"]
```

### Examples

#### gltf-display

Demonstrates how the glTF JSON is deserialized.

```sh
cargo run --example gltf-display path/to/asset.gltf
```

#### gltf-export

Demonstrates how glTF JSON can be built and exported using the `gltf-json` crate.

```sh
cargo run --example gltf-export
```

#### gltf-roundtrip

Deserializes and serializes the JSON part of a glTF asset.

```sh
cargo run --example gltf-roundtrip path/to/asset.gltf
```

#### gltf-tree

Visualises the scene heirarchy of a glTF asset, which is a strict tree of nodes.

```sh
cargo run --example gltf-tree path/to/asset.gltf
```

### Tests

Running tests locally requires to clone the [`glTF-Sample-Models`](https://github.com/KhronosGroup/glTF-Sample-Models) repository first.

```sh
git clone https://github.com/KhronosGroup/glTF-Sample-Models.git
```