Question about i3dm instance orientation.

Hi I’m trying to make i3dm 3dtiles.

So I read i3dm spec.

But I felt a bit confused about the i3dm instance orientation.

https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Instanced3DModel#instance-orientation

More specifically,

I felt that the direction that the forward vector pointed was ambiguous.

**It is ambiguous whether this means + z direction or -z direction. **

**At first **

I thought that is negative z direction(…as forward at right-handness) because of the term Forward, Up and Right.

However,

from cesium’s source about i3dm reading - it seems to mean positive z direction.

**(https://github.com/AnalyticalGraphicsInc/cesium/blob/89c69afeb0b99517987c7d78b0f97b9c29eda181/Source/Scene/Instanced3DModel3DTileContent.js#L387) **

Cartesian3.cross(instanceNormalRight, instanceNormalUp, instanceNormalForward);

``

Thanks for bringing this up Shyoo!

I think this might be an area that needs to be clarified a bit in the spec. I opened an issue here that summarizes the offline discussion I had with Sean about it today:

https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/372

Feel free to chime in there. It sounds like the definitive answer is that 3D Tiles expects Y to be up, right to be engine defined, and forward to be the cross product of those.

…sorry for many re posting^^;;;

Thanks.
But I want to add a comment about “Forward” term.

Just in my opinion, I think that cross product Right(x) and Up(y) yields “Forward(z)” is not proper terms in Y-Up Right-Handed CRS(like openGL).

In Y-Up Right-handed CRS(only for i3dm’s orientation and glTf’s default handness, not for 3DTiles spec), It is a little bit confusing terms.

Because the “Forward” is not equal to instance object’s forward direction. Cross product Right(x) and Up(y) yields actually “Backward(+z)” in in Y-Up Right-Handed CRS.