<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;}
.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:494147807;
        mso-list-type:hybrid;
        mso-list-template-ids:-866510470 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0: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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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;}
@list l1
        {mso-list-id:1038821271;
        mso-list-type:hybrid;
        mso-list-template-ids:277538480 -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>Hi Albert and All, </p><p class=MsoNormal>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=MsoNormal>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=MsoNormal><o:p> </o:p></p><p class=MsoNormal>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=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'><Transform DEF="yaw-rotation" rotation="0 0 1 $yaw"></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'><Transform DEF="pitch-rotation" rotation="0 1 0 $pitch"></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo2'><Transform DEF="roll-rotation" rotation="1 0 0 $roll"></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Besides the fact that a variable is not allowed there </p><p class=MsoNormal>(maybe use a prototype if you need a variable?) </p><p class=MsoNormal>I don't think your naming of yaw and pitch and roll is reasonable for x3d. </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>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=MsoNormal>then fly the thing using pitch and yaw and roll.</p><p class=MsoNormal> </p><p class=MsoNormal>The x3d axis-angle parameters are most likely pitch yaw roll then the scale, </p><p class=MsoNormal>and I think the same order for quaternions, except where the 'scale' is placed and the special limits for values. </p><p class=MsoNormal> </p><p class=MsoNormal>Why not try the following:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>DEF Pitch OrientationInterpolator { </p><p class=MsoNormal>key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=MsoNormal>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=MsoNormal><o:p> </o:p></p><p class=MsoNormal>DEF Yaw OrientationInterpolator { key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=MsoNormal>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=MsoNormal><o:p> </o:p></p><p class=MsoNormal>DEF Roll OrientationInterpolator { </p><p class=MsoNormal>key [ 0, 0.25 0.5, 0.75 1 ] </p><p class=MsoNormal>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=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks and Best,</p><p class=MsoNormal>Joe</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><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=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:12.0pt;color:black'>Thanks Vince, for your reply. <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><p class=MsoNormal><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).<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'>The current system still makes it relatively difficult to manually apply an angle of the most used fractions of PI, doesn't it?<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'>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.<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'>Regards<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'>Albert Jan Wonnink<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><p class=MsoNormal><span style='font-size:12.0pt;color:black'><o:p> </o:p></span></p></div><p class=MsoNormal><img border=0 width=562 height=2 style='width:5.8583in;height:.0166in' id="Horizontal_x0020_Line_x0020_1" src="cid:image002.png@01D4A5E3.FD08F950"><o:p></o:p></p><div id=divRplyFwdMsg><p class=MsoNormal><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> <o:p></o:p></p><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>There is no single node Euler angle alternative representation of a rotation transform defined in the current (v 3.3) X3D standard.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>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<o:p></o:p></p></div><div><p class=MsoNormal>with respect to the horizon, by nesting 3 Transforms:<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><Transform DEF="yaw-rotation" rotation="0 0 1 $yaw"><o:p></o:p></p></div><div><p class=MsoNormal><Transform DEF="pitch-rotation" rotation="0 1 0 $pitch"><o:p></o:p></p></div><div><p class=MsoNormal><Transform DEF="roll-rotation" rotation="1 0 0 $roll"><o:p></o:p></p></div><div><p class=MsoNormal><!-- put vehicle model here --><o:p></o:p></p></div><div><p class=MsoNormal><Shape>...</Shape><o:p></o:p></p></div><div><p class=MsoNormal></Transform><o:p></o:p></p></div><div><p class=MsoNormal></Transform><o:p></o:p></p></div><div><p class=MsoNormal></Transform><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>where for $yaw, $pitch, $roll you need to substitute the numerical value of the rotation angle in radians.<o:p></o:p></p></div><div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Vince Marchetti<o:p></o:p></p></div><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal>On Jan 6, 2019, at 12:53 PM, Albert Jan Wonnink <<a href="mailto:awonnink@hotmail.com">awonnink@hotmail.com</a>> wrote:<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal><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.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'>Regards,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'><o:p> </o:p></span></p></div><div><p class=MsoNormal><span style='font-size:12.0pt'>Albert Jan Wonnink <o:p></o:p></span></p></div><p class=MsoNormal><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><o:p></o:p></p></div></blockquote></div></div></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>