<div dir="ltr">my experience implementing displayBBox, visible in freewrl:<div><br></div><div>Results:</div><div><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/BasicBrain_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/BasicBrain_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/2.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/2.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/BoxMan_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/BoxMan_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/CadTeapot_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/CadTeapot_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/GeoLocation_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/GeoLocation_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/linepickD_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/linepickD_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/ProtoInlineBillboardAnchorShape_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/ProtoInlineBillboardAnchorShape_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/Viewport_displayBBox.x3d">http://dug9.users.sourceforge.net/web3d/tests/bbox/Viewport_displayBBox.x3d</a><br><a href="http://dug9.users.sourceforge.net/web3d/tests/bbox/screenshot_displayBBox.jpg">http://dug9.users.sourceforge.net/web3d/tests/bbox/screenshot_displayBBox.jpg</a><br></div><div><br></div><div>Method:</div><div>It took a week of careful gruelling refactoring of old inefficient code -42 Git commits- but was a good opportunity to clean up some old mess build up over a decade of incremental hacking.</div><div>OLD: </div><div>X loop over all nodes once per frame propagated extents up through transforms</div><div>X regenerating transforms to transform the extents on transform-type nodes</div><div>X we weren't even using group bboxSize and bboxCenter</div><div>NEW:</div><div>*Groups:  on render pass, push an empty bounding box onto a stack before drawing children, and the children UNION with their own extent and pass back on the stack</div><div>*Transforms: like group, except when preparing the transform, keep the additional transforms separate from MODELVIEWMATRIX to apply to just the extent when it comes back</div><div>** and use it to transform extent by converting to an 8 point rectanguloid, and transform all 8 points, then take the extent of them</div><div><a href="https://sourceforge.net/p/freewrl/git/ci/develop/tree/freex3d/src/lib/scenegraph/Component_Grouping.c">https://sourceforge.net/p/freewrl/git/ci/develop/tree/freex3d/src/lib/scenegraph/Component_Grouping.c</a>  </div><div>L.492 prep_BBox, fin_BBox <br></div><div><br></div><div><br>31 changes:<br>G - group type, just copy children extent to parent scope<br>T - transform type, transform children extent to parent scope<br><br>1 Anchor *G<br>2 Billboard *T<br>3 Collision *G<br>4 Group *G<br>5 Switch *G<br>6 Transform *T<br>7 Viewport *G<br>8 Inline *G<br>9 LOD *G<br>10 StaticGroup *G<br>11 PickableGroup *G<br>12 Proto *G (just x3d parsed protoInstance)<br>13 Shape *G<br><br><br>14 CADAssembly *G<br>15 CADFace *G<br>16 CADLayer *G (MFBool [] visible renamed MFBool visibles [])<br>17 CADPart *T<br><br>18 GeoLOD *G<br>19 GeoLocation  *T<br>20 GeoTransform *T2 (a 2-step transform of extent)<br>+  freewrl GeoPlanet *T<br><br>21 HAimHumanoid *G (except unsegmented skin)<br>22 HAnimJoint *T<br>23 HAnimSegment *G<br>24 HAnimSite *T<br><br>25 ReceiverPdu x doesn't need no children<br>26 SignalPdu x doesn't need no children<br>27 TransmitterPdu x doesn't need no children<br>28 EspduTransform *T (not tested, not applied to geo transform just regular)<br><br>29 VolumeData *G<br>30 SegmentedVolumeData *G<br>31 IsoSurfaceVolumeData *G<br><br></div></div>