Comments (12)
Maybe we can start with just the character range, and then if necessary we could provide helpers to parse that separately (cgltf_parse_extra that could take a callback, or return a list of key-value pairs, or something similar).
from cgltf.
Oh also "extras" can be in basically every single node, so we'll need to modify most structs to include this. Maybe as a first blush we could have cgltf_extras
struct that has a list of key/value string pairs, as well as a full JSON dump for more complex usecases?
from cgltf.
@dradix , can you provide a sample glTF or glb file that contains typical extras data?
from cgltf.
This feature is very useful for game engines where any object can contain various extra data.
A random example:
{
"cameras" : {
"perspectiveCamera_id" : {
"name" : "MainCamera",
"perspective" : {
"aspectRatio" : 1,
"yfov" : 0.5,
"zfar" : 1000,
"znear" : 0.05
},
"type" : "perspective",
"extras" : {
"hash" : "C1BE5A6944942D071CCE265D2089C0A7",
"uuid" : "82e3597e-76c9-11e9-8f9e-2a86e4085a59",
"scripts" : "main_camera.c;player_camera.c"
}
},
}
}
Specification reference.
from cgltf.
Thanks for the example! I agree that it’s very useful.
At the moment, I’m just as a first step looking for sample assets to come up with a design and subsequently be able to test.
from cgltf.
Here: Sample.zip
from cgltf.
I'm interested in this as well but not sure what the design should be. The complexity is that "extra" can be completely arbitrary JSON. We could make a generic JSON API (that seems heavy-handed), expose jsmn token range (that seems odd) or return a character range in the original JSON document and require user to parse (that doesn't seem useful). Great choices all around! 😜
My specific use case is I want to just preserve the extra information in the node without modifying it, but I'd imagine that it's more common to have to parse it out.
from cgltf.
Maybe we can just pass data to the application as is (string/bytes?), and let the user choose how to handle it (JSON/YAML/TOML/custom)?
from cgltf.
The approaches we have here are also pretty much what I’ve come up with. Additionally, we could also do callbacks for extra data so that the user can process it to what’s required.
But I don’t really like that either. My current favorite is handing out the character range I think as it has the smallest overhead and the greatest flexibility.
from cgltf.
The first part is in PR #62. Did I miss anything?
from cgltf.
I've lightly tested this and it works for me.
from cgltf.
That's good enough then for now. If anyone needs anything more let me know.
from cgltf.
Related Issues (20)
- Suggestion: store indices instead of pointers in the data structures HOT 4
- Add support for MSFT_texture_dds extension HOT 1
- Potential Undefined Behaviour in "cgltf_component_read_index"
- How to enable draco support? HOT 3
- fopen or strcpy this function or variable is unsafe. HOT 1
- Library will not compile if using GCC in Windows.
- Node parent sanity check prevents loading files created with UniGLTF-1.27 HOT 5
- different joints for same primitive
- Stack allocate cgltf_data structure? HOT 1
- Possible to have individual flags for metallic and roughness? HOT 4
- Invalid gltf file with EXT_mesh_gpu_instancing HOT 2
- Double-precision transform hierarchy
- native app EXT_meshopt_compression support HOT 2
- GLTF primitive type not written correctly? HOT 1
- Support for KHR_animation_pointer HOT 2
- load glb crash HOT 3
- Support for EXT_texture_webp HOT 1
- Reading glTF binary files in GLB format HOT 2
- Incorrect parsing of numeric values from glb file HOT 2
- Based on the current node, how to find out the bufferView number? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cgltf.