xeokit-gltf-to-xkt converts models from glTF 2.0 to
xeokit's optimized .xkt
format.
An .xkt
file is a binary file that contains a single 3D model with full-precision geometry, compressed using quantization,
oct-encoding and zlib.
See the XKT Format specification for a detailed description of the .xkt
format.
See Creating Files for Offline BIM for instructions on converting IFC, DAE and glTF models to .xkt
.
Once you have .xkt
files, you can load them into your viewer using
XKTLoaderPlugin,
which is the most efficient way to load high-detail models into xeokit.
Click on the screenshot below for a live demo of the XKTLoaderPlugin.
Install locally or globally from npm
.
$ npm i @xeokit/xeokit-gltf-to-xkt
$ ./gltf2xkt -s scene.gltf -o scene.xkt
$ gltf2xkt --help
Usage: gltf2xkt [options]
Options:
-v, --version output the version number
-s, --source [file] path to the source glTF file
-o, --output [file] path to the target xkt file
-f --format [number] XKT format to write
-h, --help output usage information
Supported XKT Formats:
1 - Oct-encoded normals; Quantized positions; No geometry reuse;
3 - Geometry reuse; Oct-encoded normals; Quantized positions; (DEFAULT)
6 - Full-precision geometry; Geometry reuse; Oct-encoded normals; Quantized positions;
const fs = require('fs').promises;
const {converters, getBasePath} = require('@xeokit/xeokit-gltf-to-xkt');
const converter = converters[6]; // the key is the version number
async function main() {
const gltfContent = await fs.readFile('../files/my_model.gltf');
const gltfBasePath = getBasePath('../files/my_model.gltf'); // returns ../files/
async function getAttachment(uri, parsingContext) {
// This method we'll be called if the GLTF has an external resource. You may want to fetch them from disk or over network.
// uri is the URI defined in the GLTF, parsingContext is some context on the current parse
// If you know your gltf files don't use any eternal resource, you can call converter.convert(gltfContent) without this function.
return fs.readFile(gltfBasePath + uri);
}
const xktModel = await converter.convert(gltfContent, getAttachment);
await fs.writeFile('../files/my_model.xkt', xktModel);
}
main();
// Clone the repo
$ git clone https://github.com/xeokit/xeokit-gltf-to-xkt
$ cd xeokit-gltf-to-xkt
// Install the dependencies
$ npm install
// Link for command line usage
$ npm link
// Use global symlink for testing
$ gltf2xkt -s /path/to/scene.gltf -o /path/to/scene.xkt
See .eslint
and .prettierrc
for code style guide.
- The
xeokit-gltf-to-xkt
tool and the XKTLoaderPlugin are based on prototypes by Toni Marti at uniZite. Find the original discussion around those prototypes here. - Thanks to Adam Eri at BIMSpot for converting
xeokit-gltf-to-xkt
to work as a CLI tool.