In general, I agree. However that doesn’t account for every case. For example, Autodesk Forge viewer works with many difference formats, such as Max, Maya, Revit, etc. that send data in multiple coordinate systems. I haven’t delved that deeply into the inner working, but while working with Revit (Z-UP) models, it seems like they have done exactly what @trusktr is suggesting here, that is, modified the internal three.js UP vector depending on which application the data comes from.
I guess their reasoning is that they want people to be able to work interoperatively between these applications and the viewer without having to switch coordinate systems.
It’s not a decision to be taken lightly though because it probably will cause problems elsewhere. The forge viewer is still using r71, which might have something to do with that.
I’ve dealt with this in the LWOLoader and FBXLoader and agree with you, regarding importers specifically. However, it doesn’t account for times when users need to do this conversion manually. In these cases it’s unneccesary mental overhead that should be stuck in a resuable method somewhere, although not necessarily on the three.js repo ![]()
As another example aside from @trusktr’s, I’m currently dealing with matching GPS data from drone photos to 3D models, and I’m having to do loads of conversion between coordinate systems. It’s quite a headache actually, converting from whatever coordinate system the GPS data is in (unknown, because I just have lists of lat/lon/alt positions and kappa/yaw/phi orientations), through Revit’s coordinate systems into the Forge Viewer system and then comparing it to the actual photos. Position is correct now but orientation still seems to be off.
I’m finding myself wishing I had an little app to generate the transforms between each coordinate system, so I could throw in my current and desired systems and get back a transformation matrix. Maybe I’ll write on someday.
It’s better if Three has a simple tool to let anyone convert the basis of imported data to Three’s rendering basis.
The problem here is that there are loads of possible coordinate systems. Left handed, right handed, Z-up, Y-UP, Z-Down etc etc. @Mugen87’s example would cover the most common case for 3D apps, but not every case.