Parse collada .dae 3d animation files into a WebGL friendly JSON format
JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

collada-dae-parser npm version Build Status

Parse collada .dae file vertex positions, textures, normals and animations

View live animated model demo

image

View demo source

What does it do?

collada-dae-parser parses a collada file and outputs JSON. This is useful for displaying skeletal animations in the browser.

collada-dae-parser is only concerned with giving you JSON. An animation system is outside of this modules scope, but skeletal-animation-system could be a useful start.

To Install

# API
$ npm install --save collada-dae-parser
# CLI
$ npm install -g collada-dae-parser

Making use of the parser

If you're unfamiliar with skeletal animation, the demo is a good starting point. Here's where we're parsing our collada file and buffering our graphics data. We're parsing at runtime in the demo, but in a real application you'd want to parse your collada files during a build step.

# Run the demo locally. Changes to the `src` and `demo` directories will live reload in your browser
# PRs and issues are welcome!
git clone https://github.com/chinedufn/collada-dae-parser
cd collada-dae-parser
npm install
npm run demo

Collada Support

collada-dae-parser tries to be useful for WebGL games and interactive demos, but does not try to support the entire collada spec. If you're trying to parse a model that is not supported, collada-dae-parser will try to let you know how to tweak it.

image

CLI

Output stringified JSON to stdout

# parse from stdin
cat my-3d-model.dae | dae2json > parsed-model.json

# parse from file
dae2json my-3d-modal.dae > parsed-model.json

API

parseDae(xmlFile) -> object

This function returns the parsed collada object.

xmlFile

Required

Type: string or Buffer

Your collada file data. Not the filename, the file contents.

Returned Object

TODO: Document this

var parseDae = require('collada-dae-parser')
var parsedCollada = parseDae(fs.readFileSync(fileName))
console.log(parsedCollada)
/*
  {
    armatureName: 'MyRig',
    jointNamePositionIndex: {...},
    jointInverseBindPoses: {...},
    keyframes: {...},
    vertexNormalIndices: [...],
    vertexNormals: [...],
    vertexPositionIndices: [...],
    vertexPositions: [...],
    vertexUVIndices: [...],
    vertexUVs: [...]
  }
*/
jointNamePositionIndex

Type: Object

lorem ipsum

jointInverseBindPoses

Type: Object

lorem ipsum

keyframes

Type: Object

lorem ipsum

vertexNormalIndices

Type: Array

lorem ipsum

vertexNormals

Type: Array

lorem ipsum

vertexPositionIndices

Type: Array

lorem ipsum

vertexPositions

Type: Array

lorem ipsum

vertexUVIndices

Type: Array

lorem ipsum

vertexUVs

Type: Array

lorem ipsum

TODO:

  • src: basic cli (potentially pull into own repo, but start here)
  • src: Allow file buffer to be passed in
  • src: Factor in bind shape matrix
  • src: Stop exporting bind shape matrix
  • demo: fix normals in demo lighting
  • demo: toggle between 2 animations
  • src: Remove callback from API
  • warning: Throw descriptive error message if user attempts to export multiple geometries
  • A separate package that uses collada-dae-parser to implement a stateless skeletal animation system
  • src / demo: add a textured demo model
  • src: rounding values. Currently lots of .999999 and 1.000001
  • src: All of the TODO: statements in code
  • demo: full screen demo with controls overlay
  • demo: Support mobile touch events
  • demo: allow zoom in, zoom out in demo
  • doc: Add a GIF of every test fixture animation and demo
  • doc: Documentation
  • warning: Somehow let the user know if their joints use non rigid transforms - until we actually support this
  • warning: You didn't export a geometry. Link them to the documentation
  • warning: If the base model or armature's location, translation and scale aren't 1.0 let user know that we don't support that. They should apply location, translation and scale before exporting
  • research: Look into supporting library materials

References

See Also

Credits

License

MIT