<div dir="auto">There’s also the momentsOfInertia field, but it’s an MFFloat.</div><div dir="auto"><br></div><div dir="auto">John </div><div dir="auto"><br><div class="gmail_quote gmail_quote_container" dir="auto"><div dir="ltr" class="gmail_attr">On Sat, Nov 22, 2025 at 6:40 PM Michalis Kamburelis via x3d-public <<a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><div style="font-family:Arial,sans-serif;font-size:14px">Short version: Let's make sure our X3D browsers honor the order of values when reading SFMatrix*, MFMatrix* fields :)</div><div style="font-family:Arial,sans-serif;font-size:14px"><br></div><div style="font-family:Arial,sans-serif;font-size:14px"><ul style="margin-top:0px;margin-bottom:0px;font-family:Arial,sans-serif"><li style="list-style-type:"- ";font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">Classic encoding link: </span><span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/EncodingOfFields.html#SFMatrix4f" target="_blank" style="font-family:Arial,sans-serif">https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/EncodingOfFields.html#SFMatrix4f</a></span><br></span></li></ul></div><div style="font-family:Arial,sans-serif;font-size:14px"><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif"><ul style="margin-top:0px;margin-bottom:0px;font-family:Arial,sans-serif"><li style="list-style-type:"- ";font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">XML encoding link, saying the same:</span><span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFMatrix4f" target="_blank" style="font-family:Arial,sans-serif">https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFMatrix4f</a></span><br></span></li></ul></div></div><div style="font-family:Arial,sans-serif;font-size:14px"><br></div><div style="font-family:Arial,sans-serif;font-size:14px">Longer version:</div><div style="font-family:Arial,sans-serif;font-size:14px"><br></div><div style="font-family:Arial,sans-serif;font-size:14px">I recently found a mistake in Castle Game Engine's SFMatrix*, MFMatrix* reading/writing code. We were following VRML 1.0 order, while the X3D order (according to both classic and XML encodings specs) is different. So I fixed it, and now <span style="font-family:Arial,sans-serif">Castle Game Engine</span> and Castle Model Viewer follow the proper X3D spec order (when reading/writing X3D).</div><div style="font-family:Arial,sans-serif;font-size:14px"><br></div><div style="font-family:Arial,sans-serif;font-size:14px">Namely, X3D classic encoding spec <span style="font-family:Arial,sans-serif">unambiguous</span>ly says:</div><div style="font-family:Arial,sans-serif;font-size:14px"><br></div><div style="font-family:Arial,sans-serif;font-size:14px"><span style="font-family:Arial,sans-serif"> """</span><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> The first four single-precision floating point numbers represent the top row of the matrix.</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> The second four single-precision floating point numbers represent the second row of the matrix.</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> """</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><br></span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> Classic encoding link: </span><span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/EncodingOfFields.html#SFMatrix4f" target="_blank" style="font-family:Arial,sans-serif">https://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/EncodingOfFields.html#SFMatrix4f</a></span><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> XML encoding link, saying the same:</span><span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFMatrix4f" target="_blank" style="font-family:Arial,sans-serif">https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFMatrix4f</a></span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><br></span></div><div style="font-family:Arial,sans-serif">So this means that e.g. translation by 1 2 3 is encoded in X3D in a way that looks similar to how you would write it in math expressions:</div><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif">1 0 0 1</div><div style="font-family:Arial,sans-serif">0 1 0 2</div><div style="font-family:Arial,sans-serif">0 0 1 3</div><div style="font-family:Arial,sans-serif">0 0 0 1</div><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif">For example, using MatrixTransform node (extension supported by at least Castle Game Engine, X3DOM, Instant Reality), to move object by 1 2 3 you would write this:</div><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">MatrixTransform {</span><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> matrix</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> 1 0 0 1</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> 0 1 0 2</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> 0 0 1 3</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> 0 0 0 1</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> children Shape {</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> appearance Appearance {</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> material Material { diffuseColor 0 1 0 }</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> }</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> geometry Sphere { }</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"> }</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">}</span></div><span style="font-family:Arial,sans-serif"></span></div><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif">To complicate testing a bit, </div><div style="font-family:Arial,sans-serif"><br></div><div style="font-family:Arial,sans-serif"><ul style="margin-top:0px;margin-bottom:0px;font-family:Arial,sans-serif"><li style="list-style-type:"- ";font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">VRML 1.0 and X3D specifications here say the opposite things. And VRML 2.0 specification doesn't have a matrix field type. So it's probably easy to make the same mistake I did :) See my docs about it on <span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://github.com/castle-engine/castle-engine/tree/master/tests/data/matrix_vrml_x3d_format" target="_blank" style="font-family:Arial,sans-serif">https://github.com/castle-engine/castle-engine/tree/master/tests/data/matrix_vrml_x3d_format</a> .</span><br></span></li></ul></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><br></span></div><div style="font-family:Arial,sans-serif"><ul style="margin-top:0px;margin-bottom:0px;font-family:Arial,sans-serif"><li style="list-style-type:"- ";font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">Moreover, not many nodes in spec actually use the matrix field types. Again, see <span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://github.com/castle-engine/castle-engine/tree/master/tests/data/matrix_vrml_x3d_format" target="_blank" style="font-family:Arial,sans-serif">https://github.com/castle-engine/castle-engine/tree/master/tests/data/matrix_vrml_x3d_format</a></span> where I listed the ones that do. The <span style="font-family:Arial,sans-serif">MatrixTransform</span>, shown above, is only an extension (and I do _not_ propose to make it part of spec; we should encourage authors to use cleaner Transform).</span></span></li></ul></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><br></span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif">I have been testing MatrixTransform in X3DOM, and I think X3DOM has a bug (just like CGE did, a month ago!) and it expects matrix in transposed order. See testcase on <span style="font-family:Arial,sans-serif"><a rel="noreferrer nofollow noopener" href="https://github.com/castle-engine/demo-models/blob/master/x3d/matrix_transform_x3dom.html" target="_blank" style="font-family:Arial,sans-serif">https://github.com/castle-engine/demo-models/blob/master/x3d/matrix_transform_x3dom.html</a></span> -- only by transposing a matrix I was able to get the correct result.</span></div><div style="font-family:Arial,sans-serif"><span style="font-family:Arial,sans-serif"><br></span></div><div style="font-family:Arial,sans-serif">Regards,</div><div style="font-family:Arial,sans-serif">Michalis</div></div></div><div style="font-family:Arial,sans-serif;font-size:14px">
<div style="font-family:Arial,sans-serif"></div>
<div style="font-family:Arial,sans-serif">
</div>
</div>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div></div>