<div dir="ltr"><div dir="ltr">Note, pp3.x3d contains StringSensor and X_ITE has it, but AFAIK from looking at local repository, X3DOM does not (lowercase?). The stand has it here:<div><br></div><div><a href="https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/keyDeviceSensor.html#StringSensor" target="_blank">Extensible 3D (X3D), ISO/IEC 19775-1:202x, 21 Key device sensor component (web3d.org)</a><br></div><div><br></div><div>Unknown if FreeWRL supports it.</div><div><br></div><div>I think the code may be broken, it's been years since it worked, will validate.</div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 18, 2023 at 5:02 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">On a WebGL app, i have mouse clicks/drags going to WebGL. I believe input text can be handled through gaining keyboard focus (onfocus event) in a text field or text area.</div><div dir="auto"><br></div><div dir="auto">While i have written a text field-like thing, see: src/main/data/pp3.x3d in <a href="https://github.com/coderextreme/X3DJSONLD" target="_blank">https://github.com/coderextreme/X3DJSONLD</a> , i am unaware if it’s currently working or not. As I recall, my extrusions were not working in X3DOM (see qq3.x3d for extrusion test case.)</div><div dir="auto"><br></div><div dir="auto">TextArea in X3D seems like a lot of work, but I’ve done some work in my jsondemons repo, with X3DOM, I recall. The app is pretty inscrutable, but I might be able to record a demo.</div><div dir="auto"><br></div><div dir="auto">In LIRCom, one could have channels and users in same menu. Consider a channel a subclass of user. Or do what Discord does (it’s a web app deployed as a native app, AFAIK).</div><div dir="auto"><br></div><div dir="auto">LIRCom is a mess, but check out Channel.java and Kanal.java (Danish for Channel). Once a channel sends you a message on join, it’s in your contact menu (temporarily). One can have lists of destinations in a message.</div><div dir="auto"><br></div><div dir="auto">It’s been years since i put significant effort into chat, I plan on revamping the GUI with JavaFX.</div><div dir="auto"><br></div><div dir="auto">If I recall right, VRChat is already linked to Discord.</div><div dir="auto"><br></div><div dir="auto">I’m not really doing any work these days, pull requests welcome.</div></div><div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">GPU Group</strong> <span dir="auto"><<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>></span><br>Date: Sun, Jun 18, 2023 at 3:21 PM<br>Subject: Re: [x3d-public] web3d MMO > Sensor sharing via DIS<br>To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br></div><br><br><div dir="ltr"><div dir="ltr"><div dir="ltr">Destination and source are in the header part. The most detailed specs I have:<div><a href="https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/1278.1-200X%20Draft%2016%20rev%2018.pdf" target="_blank">https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/1278.1-200X%20Draft%2016%20rev%2018.pdf</a> <br></div><div>5.6.5.13 Comment PDU<br></div><div>- there's a header part that all Pdus have, and then variable datum records</div><div>So it would just be the chat data going into the variable datum records</div><div>6.2.19 Datum Specification record<br></div><div>And there's a separate numberOfVariableDatumRecords to say how many records, and then within each record there's a small header that says how many 64 bit chunks in the record. So there's lots of room for very long chat lines.</div><div>Lets say your chat line is "Hey what do you think of my art work?" That's 36 chars + \0 = 37 bytes x 8 bits = 286</div><div>296/64 = 4.625, rounding up you would need 5 64 bit chunks, so your variable record length would be 5.</div><div>Q. in a web3d browser, how to indicate your keyboard message is intended as a chat message, and not navigation or other keyboard use?</div><div>Would the browser need a separate window / box not part of the scene, and click the mouse in the box before typing?</div><div>Would chat messages be for everyone, or if for a specific other player, how indicate which player? Would you click on their avatar in the scene, or would the chat window/panel have something to click?</div><div>-Doug</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 18, 2023 at 12:33 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">My understanding of your explanation is there are some number of 64 bit chunks in a single CommentPdu. I would have trouble fitting destination and perhaps source routing into 64 bits, and i don’t know how to deal with multiple interleaved Pdu messages yet. Currently, there’s no validation of nickname in chat parlance in my apps. Recording source, route and destination should be sufficient, in my opinion.</div><div dir="auto"><br></div><div dir="auto">I have fields like date-time so i can toss messages that have been in the network for too long and message order integer from a source to prevent duplicates. Also source language for chat. Some of these are probably handled by DIS.</div><div dir="auto"><br></div><div dir="auto">I’m thinking i could use a boolean or numeric for a continuation flag.</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 18, 2023 at 12:58 PM GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Yes CommentPdu contents arbitrary --can be anything you can pack into the records. The entity 33 is my signal to the receiving app to parse it as sensor events, and if you had another use for CommentPdu you could signal it to be parsed differently in a similar way, or have a standard to put the parsing information in the first record or some technique like that. Its binary data, in 64 bit chunks, so if you wanted it to be interpreted as character data like Chat text, you'd signal that by one of those variables so the receiving app would know how to parse it. That means all the apps participating in an exercise would need to know the signals and how to parse.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 18, 2023 at 11:42 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Oh, i thought your SensorEvents in a CommentPdu was outside the DIS standard. That is, i thought the “body” of a CommentPdu was arbitrary.</div><div dir="auto"><br></div><div dir="auto">Let me know otherwise.</div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 18, 2023 at 11:30 AM GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>Those are nice videos John, artistic. </div><div>I think the DIS is bureaucratic with all its parameters, and if there's a standard some day for what of those we use in web3d for what, it won't take much work to change.</div><div>-Doug</div><div><br></div><div dir="ltr">For the Avatar viaEspdu (EntityState), I made category 77, and EntityID == applicationID<div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>espdu->entityType.category = 77; //SPECIAL CATEGORY 77 FOR AVATARS</span></div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>espdu->entityID.entity = fwl_get_DISapplication(); // application 1:1 avatar, entity = f(application)</span></div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>espdu->entityID.application = fwl_get_DISapplication();</span></div></div><div><span style="white-space:normal">- but there wasn't much processing difference (yet) on the receiving end for avatars - just regular EspduTransform</span></div><div><span style="white-space:normal"><br></span></div><div><span style="white-space:normal">For SensorEvents via CommentPdu I made Entity 33 to signal SensorEvent comment (but currently don't check it when reading)</span></div><div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>cpdu->mySimulationManagementFamilyPdu.originatingEntityID.entity = 33; //can be a code for sensors</span></div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>cpdu->mySimulationManagementFamilyPdu.originatingEntityID.application = fwl_get_DISapplication();</span></div><div><span style="white-space:normal"><span style="white-space:pre-wrap"> </span>cpdu->mySimulationManagementFamilyPdu.originatingEntityID.site = fwl_get_DISsite();</span></div><div style="white-space:normal">Because neither Avatar nor SensorEvents has a DIS node just for them, I rely on command-line settings for site and application. When running multiple instances, I increment the application number.</div></div><div><br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jun 17, 2023 at 7:20 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Here’s the LIRCom demos:</div><div dir="auto"><br></div><div dir="auto"><div><a href="https://youtube.com/playlist?list=PLTS-0xyjagy-ZJ8vnR9SfeKfYJM6qMQEO" target="_blank">https://youtube.com/playlist?list=PLTS-0xyjagy-ZJ8vnR9SfeKfYJM6qMQEO</a></div><br></div><div dir="auto"><br></div><div dir="auto">Perhaps we should consider standardizing subclasses of CommentPdu?</div><div dir="auto"><br></div><div dir="auto">I can think of one attribute extension off the top of my head, “domain,” like Solitaire/Cards, 3D-Edit or Chat. Currently, these all ride on the same “bus.” DIS Federation is important, “channels” currently implemented as Entities????</div><div dir="auto"><br></div><div dir="auto">Thanks!</div><div dir="auto"><br></div><div dir="auto">John</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jun 17, 2023 at 8:00 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><a href="https://github.com/coderextreme/lircom" target="_blank">https://github.com/coderextreme/lircom</a></div><br></div><div dir="auto">Wondering how to “port” or rewrite LIRCom in DIS+CommentPdu.</div><div dir="auto"><br></div><div dir="auto">See: <div><a href="https://github.com/coderextreme/lircom/blob/master/src/main/java/lircom/Message.java" target="_blank">https://github.com/coderextreme/lircom/blob/master/src/main/java/lircom/Message.java</a></div><div dir="auto"><br></div><div dir="auto">For what might be considered “core” messaging protocol.</div><div dir="auto"><br></div><div dir="auto">Demo apps:</div><div dir="auto"><br></div><div dir="auto">I’ve been considering Fediverse/ActivityPub, but if there are enough platforms running DIS and CommentPdu, that would make the platforms good for implementations. Are there Java DIS+CommentPdu implementations?</div><div dir="auto"><br></div><div dir="auto">Buffering up comments is very interesting to me!</div></div><div dir="auto"><div dir="auto"><br></div><div dir="auto">John </div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jun 17, 2023 at 7:46 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Interesting, i had considered using CommentPdu in my own apps, but I’m a bit freaked out by DIS/VPN/multicast.</div><div dir="auto"><br></div><div dir="auto">I will view the video soon.</div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jun 17, 2023 at 5:12 PM GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><div>MMO - massively multiplayer online</div><div>DIS distributed interactive simulation - a web3d component 28</div><div>CONCEPT: web3d browsers load identical scenes, and share sensor events, and each instance does its own routing diagram after sensor event is shared.</div><div><a href="https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/elevator/MMO_Sensor_sharing.mp4" target="_blank">https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/elevator/MMO_Sensor_sharing.mp4 </a> <br></div><div>- 2 instances of freewrl with DIS activated, showing same elevator3.x3d scene<br></div><div><a href="https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/elevator/" target="_blank">https://freewrl.sourceforge.io/tests/28_Distributed_interactive_simulation/elevator/</a><br></div><div>- in video we can see avatar of other instance as green cone</div><div>- when current scene clicks elevator up button, it relays that sensor click event to other app instance, which triggers the elevator in the other scene to go up at the same time</div><div>- the avatar in the other scene rides its elevator up, and sends its new avatar pose to the current scene, so appears they are riding up elevator together.</div><div>- the code sensor intercept point is general enough to capture TouchSensor, GeoTouchSensor, LineSensor, PointSensor (not web3d spec), PlaneSensor, MultiTouchSensor (not web3d spec), CylinderSensor, SphereSensor, ProximitySensor, GeoProximitySensor, Anchor. </div><div>- it broadcasts sensor events to other app instances via DIS CommentPdu, which has variable number of variable-length records. All sensor hits on a frame are queued, and when processing dis send events, it reads the queue and packs into a single CommentPdu and broadcastes. </div><div>- other app instances once per frame in dis_receive function parse the pdu stream, and direct all CommentPdus to the pdu2sensor function, which iterates over the CommentPdu variable records and calls the appropriate sensor functions for each sensor event.</div><div>-Doug</div><div><br></div><div><br></div></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>
</blockquote></div></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
</div></div>
</div>
</blockquote></div>