<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Monaco;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.xmsonormal, li.xmsonormal, div.xmsonormal
        {mso-style-name:x_msonormal;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.xmsolistparagraph, li.xmsolistparagraph, div.xmsolistparagraph
        {mso-style-name:x_msolistparagraph;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:695732669;
        mso-list-template-ids:-1;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1
        {mso-list-id:1157190179;
        mso-list-type:hybrid;
        mso-list-template-ids:-1627225888 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
        {mso-level-start-at:4;
        mso-level-number-format:bullet;
        mso-level-text:\F0D8;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><b>From: </b><a href="mailto:awonnink@hotmail.com">Albert Jan Wonnink</a><br><b>Sent: </b>Monday, January 7, 2019 2:03 AM<br><b>To: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a>; <a href="mailto:joedwil@earthlink.net">Joseph D Williams</a>; <a href="mailto:vmarchetti@kshell.com">vmarchetti@kshell.com</a>; <a href="mailto:x3d-public@web3d.org">X3D-Public</a><br><b>Subject: </b>Re: [x3d-public] Euler rotation</p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>Hi Joseph,<o:p></o:p></span></li></ul><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>Thank you for your reply. Just to be sure: the context I meant to discuss is about having a convenient attribute in the declarative syntax, say 'euler', to set the initial orientation of the transform, so anyone can use either 'rotation' or 'euler'.<o:p></o:p></span></li></ul></div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'><o:p> </o:p></span></li><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'><transform euler="20 40 10" ><o:p></o:p></span></li><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'><o:p> </o:p></span></li></ul><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Fine, Albert, <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>So the term euler would replace the term rotation and also be a different datatype than rotation? <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>The important technical and usage detail is accepting quaternions since probably the preferred internal form.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>The main thing about degrees is that they won’t always work. That is why Euler moved on. If you are making video frames, then maybe ok to author or capture frame data in degrees but when you want to have some realtime or variabletime fun, then interpolation may not operate as expected or at all. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>So I interpreted Vince's $yaw, $pitch and $roll to be just placeholders, for manual substitution. <o:p></o:p></span></li></ul><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Thoughts about the use of pitch yaw roll names for the x y z rotation/orientation axes? <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Just as a memory aid of course. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>I described it as I found it in viewpoint where the default is gaze -z and hanim joint animations where the default is gaze +z. <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>You are right using this with either radians or degrees would be equally simple. <o:p></o:p></span></li></ul><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Most simple and reliable using the x3d form thinking with radians, no doubt.  The x3d recognition of quaternions would improve x3d capability by being even more simple and reliable and also giving improved level of validation for rotation and orientation values. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'> <o:p></o:p></span></p><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>Regards,<o:p></o:p></span></li></ul></div><div><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='color:black;margin-left:0in;mso-list:l1 level1 lfo2'><span style='font-size:12.0pt'>Albert Jan <o:p></o:p></span></li></ul><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Thanks for the thoughts,  <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Joe<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><div><div><div><p class=xmsonormal>  </p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=xmsonormal><b>From: </b><a href="mailto:joedwil@earthlink.net">Joseph D Williams</a><br><b>Sent: </b>Sunday, January 6, 2019 7:20 PM<br><b>To: </b><a href="mailto:awonnink@hotmail.com">Albert Jan Wonnink</a>; <a href="mailto:vmarchetti@kshell.com">vmarchetti@kshell.com</a>; <a href="mailto:x3d-public@web3d.org">X3D-Public</a><br><b>Subject: </b>Re: [x3d-public] Euler rotation</p></div><p class=xmsonormal> </p><p class=xmsonormal>Hi Albert and All, </p><p class=xmsonormal>When you use euler (or <span style='font-size:12.0pt;color:black'>Tait-Bryan) </span>angles for a while you will find that you get problems. </p><p class=xmsonormal>Actually there is plenty of writing about the details maybe even in the x3d or hanim archives and widely on the web.</p><p class=xmsonormal> </p><p class=xmsonormal>In addition, when you create or edit the things much then you will find it is actually a lot easier to use quats or axis-angle radians. In general, for degrees, maybe your editing system may offer as a learning tool if radian is really an elementary block to learning, but really, never in the user code due to misleading simplicity and what ‘cha finally gonna tell ‘em when the gimbals lock? </p><p class=xmsonormal> </p><ul style='margin-top:0in' type=disc><li class=xmsolistparagraph style='margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l0 level1 lfo1'><Transform DEF="yaw-rotation" rotation="0 0 1 $yaw"><o:p></o:p></li><li class=xmsolistparagraph style='margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l0 level1 lfo1'><Transform DEF="pitch-rotation" rotation="0 1 0 $pitch"><o:p></o:p></li><li class=xmsolistparagraph style='margin-top:0in;margin-bottom:0in;margin-bottom:.0001pt;mso-list:l0 level1 lfo1'><Transform DEF="roll-rotation" rotation="1 0 0 $roll"><o:p></o:p></li></ul><p class=xmsonormal> </p><p class=xmsonormal>Besides the fact that a variable is not allowed there </p><p class=xmsonormal>(maybe use a prototype if you need a variable?) </p><p class=xmsonormal>I don't think your naming of yaw and pitch and roll is reasonable for x3d. </p><p class=xmsonormal> </p><p class=xmsonormal>For default transform rotation 0 0 1 0, sit on it and face +z and find +y is up and +x is left. </p><p class=xmsonormal>then fly the thing using pitch and yaw and roll.</p><p class=xmsonormal>The x3d axis-angle parameters are most likely pitch yaw roll then the scale, </p><p class=xmsonormal>and I think the same order for quaternions, except where the 'scale' is placed and the special limits for values. </p><p class=xmsonormal> </p><p class=xmsonormal>Why not try the following:</p><p class=xmsonormal> </p><p class=xmsonormal>DEF Pitch OrientationInterpolator { </p><p class=xmsonormal>key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=xmsonormal>keyValue [ 0 0 1 0, 1 0 0 1.5, 0 0 1 0, -1 0 0 1.5, 0 0 1 0 ] }</p><p class=xmsonormal> </p><p class=xmsonormal>DEF Yaw OrientationInterpolator { key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=xmsonormal>keyValue [ 0 0 1 0, 0 1 0 1.5, 0 0 1 0, 0 -1 0 1.5, 0 0 1 0 ] }</p><p class=xmsonormal> </p><p class=xmsonormal>DEF Roll OrientationInterpolator { </p><p class=xmsonormal>key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=xmsonormal>keyValue [ 0 0 1 0, 0 0 1 1.5, 0 0 1 0, 0 0 1 1.5, 0 0 1 0 ] }</p><p class=xmsonormal> </p><p class=xmsonormal>Thanks and Best,</p><p class=xmsonormal>Joe</p><p class=xmsonormal> </p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=xmsonormal><b>From: </b><a href="mailto:awonnink@hotmail.com">Albert Jan Wonnink</a><br><b>Sent: </b>Sunday, January 6, 2019 2:25 PM<br><b>To: </b><a href="mailto:vmarchetti@kshell.com">vmarchetti@kshell.com</a>; <a href="mailto:x3d-public@web3d.org">X3D-Public</a><br><b>Subject: </b>Re: [x3d-public] Euler rotation</p></div><p class=xmsonormal> </p><p class=xmsonormal><span style='font-size:12.0pt;color:black'>Thanks Vince, for your reply. </span></p><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'>As long as the angles and X3D code is  generated by code one can of course easily calculate the individual parameters for a quaternion. But during the testing of our experimental Unity based browser, and preparing scenes for that, I found it very easy to extend the transform specification with a degree-based Euler attribute (Tait-Bryan would also have worked).</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'>The current system still makes it relatively difficult to manually apply an angle of the most used fractions of PI, doesn't it?</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'>I guess this issue must have been discussed in one of the early days of the X3D specification. But it seems to me a lost chance to make it more convenient.</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'>Regards</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'>Albert Jan Wonnink</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><div><div><p class=xmsonormal><span style='font-size:12.0pt;color:black'> </span></p></div><p class=xmsonormal><img border=0 width=562 height=2 style='width:5.85in;height:.025in' id="x_Horizontal_x0020_Line_x0020_1" src="cid:image003.png@01D4A606.14B5CB60" alt="cid:image002.png@01D4A5E3.FD08F950"></p><div id="x_divRplyFwdMsg"><p class=xmsonormal><b><span style='color:black'>Van:</span></b><span style='color:black'> vmarchetti@kshell.com <vmarchetti@kshell.com><br><b>Verzonden:</b> zondag 6 januari 2019 22:49<br><b>Aan:</b> Albert Jan Wonnink; X3D-Public<br><b>Onderwerp:</b> Re: [x3d-public] Euler rotation</span> </p><div><p class=xmsonormal> </p></div></div><div><div><p class=xmsonormal>There is no single node Euler angle alternative representation of a rotation transform defined in the current (v 3.3) X3D standard.</p></div><div><p class=xmsonormal> </p></div><div><p class=xmsonormal>You can get an easier to edit representation of Euler angle rotation (specifically the Tait-Bryan angles, <a href="https://en.wikipedia.org/wiki/Euler_angles#Tait–Bryan_angles">https://en.wikipedia.org/wiki/Euler_angles#Tait%E2%80%93Bryan_angles</a>, commonly used for vehicle oriented</p></div><div><p class=xmsonormal>with respect to the horizon, by nesting 3 Transforms:</p></div><div><p class=xmsonormal> </p></div><div><p class=xmsonormal><Transform DEF="yaw-rotation" rotation="0 0 1 $yaw"></p></div><div><p class=xmsonormal><Transform DEF="pitch-rotation" rotation="0 1 0 $pitch"></p></div><div><p class=xmsonormal><Transform DEF="roll-rotation" rotation="1 0 0 $roll"></p></div><div><p class=xmsonormal><!-- put vehicle model here --></p></div><div><p class=xmsonormal><Shape>...</Shape></p></div><div><p class=xmsonormal></Transform></p></div><div><p class=xmsonormal></Transform></p></div><div><p class=xmsonormal></Transform></p></div><div><p class=xmsonormal> </p></div><div><p class=xmsonormal>where for $yaw, $pitch, $roll you need to substitute the numerical value of the rotation angle in radians.</p></div><div><div><p class=xmsonormal> </p></div><div><p class=xmsonormal> </p></div><div><p class=xmsonormal>Vince Marchetti</p></div><div><p class=xmsonormal style='margin-bottom:12.0pt'> </p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=xmsonormal>On Jan 6, 2019, at 12:53 PM, Albert Jan Wonnink <<a href="mailto:awonnink@hotmail.com">awonnink@hotmail.com</a>> wrote:</p></div><p class=xmsonormal> </p><div><div><p class=xmsonormal><span style='font-size:12.0pt'>Is there, or should there be, an Euler alternative for the transform 'rotation' property? This makes direct x3d code editing much easier.</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt'>Regards,</span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt'> </span></p></div><div><p class=xmsonormal><span style='font-size:12.0pt'>Albert Jan Wonnink </span></p></div><p class=xmsonormal><span style='font-size:9.0pt;font-family:"Monaco",serif'>_______________________________________________<br>x3d-public mailing list<br></span><a href="mailto:x3d-public@web3d.org"><span style='font-size:9.0pt;font-family:"Monaco",serif'>x3d-public@web3d.org</span></a><span style='font-size:9.0pt;font-family:"Monaco",serif'><br></span><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org"><span style='font-size:9.0pt;font-family:"Monaco",serif'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a></p></div></blockquote></div></div></div></div><p class=xmsonormal> </p><p class=xmsonormal> </p></div></div></div><p class=xmsonormal> </p><p class=MsoNormal><o:p> </o:p></p></div></body></html>