Mercurial > games > semicongine
comparison semiconginev2/gltf.nim @ 1251:3f98ad20a9d3
add: render by-node instead of by-mesh
| author | sam <sam@basx.dev> |
|---|---|
| date | Fri, 26 Jul 2024 20:34:02 +0700 |
| parents | 9ceb509af5ea |
| children | 01e9f41d35b1 |
comparison
equal
deleted
inserted
replaced
| 1250:9ceb509af5ea | 1251:3f98ad20a9d3 |
|---|---|
| 1 type | 1 type |
| 2 GltfNode* = object | 2 GltfNode* = object |
| 3 children: seq[int] | 3 children*: seq[int] |
| 4 mesh: int | 4 mesh*: int = -1 |
| 5 transform: Mat4 | 5 transform*: Mat4 = Unit4 |
| 6 GltfMesh*[TMesh, TMaterial] = object | 6 GltfData*[TMesh, TMaterial] = object |
| 7 scenes*: seq[seq[int]] # each scene has a seq of node indices | 7 scenes*: seq[seq[int]] # each scene has a seq of node indices |
| 8 nodes*: seq[GltfNode] # each node has a seq of mesh indices | 8 nodes*: seq[GltfNode] # each node has a seq of mesh indices |
| 9 meshes*: seq[seq[(TMesh, VkPrimitiveTopology)]] | 9 meshes*: seq[seq[(TMesh, VkPrimitiveTopology)]] |
| 10 materials*: seq[TMaterial] | 10 materials*: seq[TMaterial] |
| 11 textures*: seq[Image[BGRA]] | 11 textures*: seq[Image[BGRA]] |
| 222 let accessor = primitive["attributes"][gltfAttributeIndexed].getInt() | 222 let accessor = primitive["attributes"][gltfAttributeIndexed].getInt() |
| 223 resultValue.data = getAccessorData[elementType(resultValue.data)](root, root["accessors"][accessor], mainBuffer) | 223 resultValue.data = getAccessorData[elementType(resultValue.data)](root, root["accessors"][accessor], mainBuffer) |
| 224 inc i | 224 inc i |
| 225 | 225 |
| 226 proc loadNode(node: JsonNode): GltfNode = | 226 proc loadNode(node: JsonNode): GltfNode = |
| 227 result.transform = Unit4 | 227 result = GltfNode() |
| 228 if "mesh" in node: | 228 if "mesh" in node: |
| 229 result.mesh = node["mesh"].getInt() | 229 result.mesh = node["mesh"].getInt() |
| 230 if "children" in node: | 230 if "children" in node: |
| 231 for child in items(node["children"]): | 231 for child in items(node["children"]): |
| 232 result.children.add child.getInt() | 232 result.children.add child.getInt() |
| 261 | 261 |
| 262 proc ReadglTF*[TMesh, TMaterial]( | 262 proc ReadglTF*[TMesh, TMaterial]( |
| 263 stream: Stream, | 263 stream: Stream, |
| 264 meshAttributesMapping: static MeshAttributeNames, | 264 meshAttributesMapping: static MeshAttributeNames, |
| 265 materialAttributesMapping: static MaterialAttributeNames, | 265 materialAttributesMapping: static MaterialAttributeNames, |
| 266 ): GltfMesh[TMesh, TMaterial] = | 266 ): GltfData[TMesh, TMaterial] = |
| 267 var | 267 var |
| 268 header: glTFHeader | 268 header: glTFHeader |
| 269 data: glTFData | 269 data: glTFData |
| 270 | 270 |
| 271 for name, value in fieldPairs(header): | 271 for name, value in fieldPairs(header): |
| 322 proc LoadMeshes*[TMesh, TMaterial]( | 322 proc LoadMeshes*[TMesh, TMaterial]( |
| 323 path: string, | 323 path: string, |
| 324 meshAttributesMapping: static MeshAttributeNames, | 324 meshAttributesMapping: static MeshAttributeNames, |
| 325 materialAttributesMapping: static MaterialAttributeNames, | 325 materialAttributesMapping: static MaterialAttributeNames, |
| 326 package = DEFAULT_PACKAGE | 326 package = DEFAULT_PACKAGE |
| 327 ): GltfMesh[TMesh, TMaterial] = | 327 ): GltfData[TMesh, TMaterial] = |
| 328 ReadglTF[TMesh, TMaterial]( | 328 ReadglTF[TMesh, TMaterial]( |
| 329 stream = loadResource_intern(path, package = package), | 329 stream = loadResource_intern(path, package = package), |
| 330 meshAttributesMapping = meshAttributesMapping, | 330 meshAttributesMapping = meshAttributesMapping, |
| 331 materialAttributesMapping = materialAttributesMapping, | 331 materialAttributesMapping = materialAttributesMapping, |
| 332 ) | 332 ) |
