<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)"><style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Times New Roman",serif;}
span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Hi Andreas and Leonard,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>This is an interesting topic to capture for subsequent discussion and resolution. Thank you Andreas for raising it. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>I have, therefore, raised a Mantis issue based on Andreas’ original comment, to which I have appended Leonard’s reply and Andreas’ subsequent response as notes. The Mantis issue is 1106. It is available for Web3D members at <a href="http://web3d.org/pipermail/x3d-public_web3d.org/2016-December/005692.html">http://web3d.org/pipermail/x3d-public_web3d.org/2016-December/005692.html</a>.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Regards,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Roy<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> x3d-public [mailto:x3d-public-bounces@web3d.org] <b>On Behalf Of </b>Andreas Plesch<br><b>Sent:</b> 17 December 2016 03:53<br><b>To:</b> Leonard Daly <Leonard.Daly@realism.com><br><b>Cc:</b> X3D Graphics public mailing list <x3d-public@web3d.org><br><b>Subject:</b> Re: [x3d-public] TimeSensor resumeTime field<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p>Leonard,<o:p></o:p></p><p>On Dec 16, 2016 8:52 PM, "Leonard Daly" <<a href="mailto:Leonard.Daly@realism.com">Leonard.Daly@realism.com</a>> wrote:<br>><br>> [Note: I am OK with this being posted to x3d-public. I did not do so because it is originally Andreas' comment.]<br>><br>> The answer depends on what is meant by a TimeSensor. Up until V3.2 (when pause was introduced), TimeSensor was always real-world time -- we didn't have a Dick Tracy watch that would pause (most) of the world. When pause was introduced, the intent was to create a pause in the progression of time, similar to a "Pause" button on tape/VCR/CD/DVD/Netflix... player. I believe that to be the desired behavior based on my memory of the discussions.<o:p></o:p></p><p>The history is interesting and may explain the friction between the rigid fraction_changed formula and the expected resume behavior. elapsedTime explicitly excludes paused intervals. Would then a formula<o:p></o:p></p><p>fraction_changed = elapsedTime mod cycleInterval / cycleInterval<o:p></o:p></p><p>work to define fraction_changed ?<o:p></o:p></p><p>I did not test other x3d browsers resumeTime behavior. Is there a conformance test scene ?<o:p></o:p></p><p>> TimeSensor "senses" the passage of time and takes certain actions based on its internal (field) settings. This includes start, stop, pause, and resume. It also emits system time at certain points ('cycleTime' at the beginning of each cycle/loop and 'time' for event timestep). Except for these two fields everything else is relative (either a fraction or seconds of running-time).<o:p></o:p></p><p>Ok, let's take the opportunity to review the time component. <o:p></o:p></p><p>> What would it take to eliminate the system time from TimeSensor?<o:p></o:p></p><p>System time is the same for all nodes within a scene and across scenes on the same system, so it does seem to play an important role, no ?<o:p></o:p></p><p>> Obviously the startTime, stopTime, pauseTime, and resumeTime fields would need to change for controlling the sensor. The cycleTime field would not apply or perhaps it would be 'elapsedTime' when the loop restarts. The 'time' field is currently represented by elapsedTime for units of total seconds or fraction_changed for the fractional portion of the loop. Perhaps this could be extended to include the # times through the loop (e.g., instead of .3, it would be 2.3 indicating two full loops + .3 through the third loop).<o:p></o:p></p><p>The fractional portion only is needed for interpolators. Unless Yves suggestion for simple arithmetic expressions is adopted. An additional output field 'elapsedCycles' is another option.<o:p></o:p></p><p>> The fields the control the input (startTime, stopTime, pauseTime, and resumeTime) would need to change (by function or replaced by a new field) to either indicate an operation (start, stop, pause, resume) or some sort of relative time in the world. Most everything is based on user action to initiate an in-world action. The biggest issue (I see) is synchronizing actions between multiple users. I don't think TimeSensor is the right way to do this anyway as TimeSensor depends on the local computer's clock and there is no guarantee that the time is correct or intervals are accurate.<o:p></o:p></p><p>Synchronization requires synchronization of clocks at some point. Should there be a way to do this in x3d ? Intervals should be assumed to be reliable across systems (or all hope is lost?).<o:p></o:p></p><p>Andreas <br>><br>> Leonard Daly<br>><br>><br>><br>>> A time sensor has a concept of pausing time:<br>>><br>>> <a href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/time.html#PausingTime">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/time.html#PausingTime</a><br>>><br>>> When now reaches a pauseTime, the TimeSensor is put into a paused mode. It then resumes to generate output events such as fraction_changed when now reaches a resumeTIme.<br>>><br>>> My question is if when resumeTime is reached, generated fraction_changed values should continue from where they were when the sensor was paused. To me this behaviour seems to be the intent of the pausing concept.<br>>><br>>> "The time-dependent node then resumes generating its output events from the paused state at the simulation tick." is the spec. language. <br>>><br>>> On the other hand, the formula given to calculate fraction_changed includes the difference between now and the startTime. In order to keep using this formula, startTime would need to be (internally) adjusted after resuming a paused sensor such that fraction_changed equals fraction_changed at pauseTime. Does adjusting the startTime constitute a change of the paused state ?<br>>><br>>> x3dom currently does not continue fraction_changed from where it was paused. Instead, it just continues the output as if the sensor was never paused, eg. does not adjust startTime.<br>>><br>>> -Andreas<br>>><br>>><br>>><br>>><br>>><br>>><br>>><br>>> -- <br>>> Andreas Plesch<br>>> 39 Barbara Rd.<br>>> Waltham, MA 02453<br>>><br>>><br>>> _______________________________________________ x3d-public mailing list <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a> <a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a> <br>><br>><br>><br>> -- <br>> Leonard Daly<br>> 3D Systems & Cloud Consultant<br>> LA ACM SIGGRAPH Chair<br>> President, Daly Realism - Creating the Future<o:p></o:p></p></div></body></html>