Files
cell-model/tests/readout.ce
2026-02-26 08:14:21 -06:00

166 lines
4.9 KiB
Plaintext

var gltf = use('gltf')
var obj = use('obj')
var fbx = use('fbx')
var fs = use('cellfs')
if (length(args) < 1) {
log.console("Usage: cell run tests/readout.ce <model_file>")
log.console("Supported formats: .gltf, .glb, .obj, .fbx")
$stop()
}
var filepath = args[0]
var dot = filepath.lastIndexOf('.')
var ext = dot >= 0 ? lower(text(filepath, dot)) : ''
var data = fs.slurp(filepath)
if (!data) {
log.console(`Error: Could not read file: ${filepath}`)
$stop()
}
var model = null
if (ext == '.gltf' || ext == '.glb') {
model = gltf.decode(data)
} else if (ext == '.obj') {
model = obj.decode(data)
} else if (ext == '.fbx') {
model = fbx.decode(data)
} else {
log.console(`Error: Unsupported file format: ${ext}`)
log.console("Supported formats: .gltf, .glb, .obj, .fbx")
$stop()
}
def print_array = function(arr, indent) {
if (!arr || length(arr) == 0) {
log.console(`${indent}(empty)`)
return
}
var i = 0
var item = null
for (i = 0; i < length(arr); i++) {
item = arr[i]
if (is_object(item)) {
log.console(`${indent}[${i}]:`)
print_object(item, indent + " ")
} else {
log.console(`${indent}[${i}]: ${item}`)
}
}
}
log.console(`\n=== Model Structure: ${filepath} ===\n`)
log.console(`Buffers: ${length(model.buffers)}`)
var i = 0
var buf = null
for (i = 0; i < length(model.buffers); i++) {
buf = model.buffers[i]
log.console(` [${i}] byte_length: ${buf.byte_length}`)
}
log.console(`\nViews: ${length(model.views)}`)
var v = null
for (i = 0; i < length(model.views); i++) {
v = model.views[i]
log.console(` [${i}] buffer: ${v.buffer}, offset: ${v.byte_offset}, length: ${v.byte_length}, stride: ${v.byte_stride}, usage: ${v.usage}`)
}
log.console(`\nAccessors: ${length(model.accessors)}`)
var a = null
for (i = 0; i < length(model.accessors); i++) {
a = model.accessors[i]
log.console(` [${i}] view: ${a.view}, offset: ${a.byte_offset}, count: ${a.count}, type: ${a.component_type}/${a.type}, normalized: ${a.normalized}`)
}
log.console(`\nMeshes: ${length(model.meshes)}`)
var m = null
var j = 0
var p = null
var ak = null
var parts = null
var k = 0
for (i = 0; i < length(model.meshes); i++) {
m = model.meshes[i]
log.console(` [${i}] name: ${m.name}`)
for (j = 0; j < length(m.primitives); j++) {
p = m.primitives[j]
log.console(` primitive[${j}]: topology: ${p.topology}, indices: ${p.indices}, material: ${p.material}`)
ak = array(p.attributes)
parts = []
for (k = 0; k < length(ak); k++) parts[] = ak[k] + ': ' + text(p.attributes[ak[k]])
log.console(' attributes: {' + text(parts, ', ') + '}')
}
}
log.console(`\nMaterials: ${length(model.materials)}`)
for (i = 0; i < length(model.materials); i++) {
m = model.materials[i]
log.console(` [${i}] name: ${m.name}, alpha_mode: ${m.alpha_mode}, double_sided: ${m.double_sided}`)
if (m.pbr) {
log.console(` pbr: base_color: [${m.pbr.base_color_factor}], metallic: ${m.pbr.metallic_factor}, roughness: ${m.pbr.roughness_factor}`)
}
}
log.console(`\nImages: ${length(model.images)}`)
var im = null
for (i = 0; i < length(model.images); i++) {
im = model.images[i]
log.console(` [${i}] kind: ${im.kind}, ${im.kind == 'uri' ? 'uri: ' + im.uri : 'view: ' + im.view}, mime: ${im.mime}`)
}
log.console(`\nTextures: ${length(model.textures)}`)
var t = null
for (i = 0; i < length(model.textures); i++) {
t = model.textures[i]
log.console(` [${i}] image: ${t.image}, sampler: ${t.sampler}`)
}
log.console(`\nSamplers: ${length(model.samplers)}`)
var s = null
for (i = 0; i < length(model.samplers); i++) {
s = model.samplers[i]
log.console(` [${i}] min: ${s.min_filter}, mag: ${s.mag_filter}, wrap_s: ${s.wrap_s}, wrap_t: ${s.wrap_t}`)
}
log.console(`\nNodes: ${length(model.nodes)}`)
var n = null
for (i = 0; i < length(model.nodes); i++) {
n = model.nodes[i]
log.console(` [${i}] name: ${n.name}, mesh: ${n.mesh}, children: [${n.children}], skin: ${n.skin}`)
if (n.matrix) {
log.console(` matrix: [${array(n.matrix, 0, 4)}...]`)
} else {
log.console(` T: [${n.translation}], R: [${n.rotation}], S: [${n.scale}]`)
}
}
log.console(`\nScenes: ${length(model.scenes)}, default: ${model.scene}`)
for (i = 0; i < length(model.scenes); i++) {
s = model.scenes[i]
log.console(` [${i}] nodes: [${s.nodes}]`)
}
log.console(`\nAnimations: ${length(model.animations)}`)
for (i = 0; i < length(model.animations); i++) {
a = model.animations[i]
log.console(` [${i}] name: ${a.name}, samplers: ${length(a.samplers)}, channels: ${length(a.channels)}`)
}
log.console(`\nSkins: ${length(model.skins)}`)
for (i = 0; i < length(model.skins); i++) {
s = model.skins[i]
log.console(` [${i}] name: ${s.name}, joints: ${length(s.joints)}, ibm: ${s.inverse_bind_matrices}, skeleton: ${s.skeleton}`)
}
log.console(`\nExtensions:`)
log.console(` used: [${model.extensions.used}]`)
log.console(` required: [${model.extensions.required}]`)
log.console(`\n=== End ===\n`)
log.console(model)
$stop()