<div dir="ltr"><div dir="ltr">Here's a snippet from an earlier email on freewrl-develop from Joerg aka MUFTI:<div>"""</div><div><span style="color:rgb(32,31,30);font-size:14.6667px">> </span><a href="http://web3d.org/pipermail/x3d-public_web3d.org/2020-May/012644.html" target="_blank" rel="noopener noreferrer" style="margin:0px;padding:0px;border:0px;font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:14.6667px;line-height:inherit;vertical-align:baseline">http://web3d.org/pipermail/x3d-public_web3d.org/2020-May/012644.html</a><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">> - something about pre-weighted or not</span><br style="color:rgb(32,31,30);font-size:14.6667px"><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">There are no examples which use important weights, for testing. The github</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">issue below has the torus example.</span><br style="color:rgb(32,31,30);font-size:14.6667px"><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">The decision how to use NURBS has been made years ago by the blaxun/bitmanagment broser.</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">With a modeller tool like whiite_dune you show the contolpointa, but not with a browser...</span><br style="color:rgb(32,31,30);font-size:14.6667px"><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">A simple example of a shape using different NURBS wieghts is a sphere converted to a NumrbsPatchSurface</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">with white_dune:</span><br style="color:rgb(32,31,30);font-size:14.6667px"><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">#X3D V3.0 utf8</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">PROFILE Interchange</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">COMPONENT NURBS:1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">Transform {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">   children</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">     Shape {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">       appearance Appearance {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         material Material {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         }</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">       }</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">       geometry NurbsPatchSurface {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         uDimension 9</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         vDimension 5</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         uKnot         [</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.250000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.250000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.750000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.750000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         ]</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         vKnot         [</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         ]</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         controlPoint DEF Coordinate1 Coordinate {</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           point           [</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.500000 -0.500000 -0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.707107 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.500000 -0.500000 0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.500000 -0.500000 0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.707107 -0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.500000 -0.500000 -0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 -0.707107 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0 -1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.707107 0 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -1 0 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.707107 0 0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0 1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.707107 0 0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             1 0 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.707107 0 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0 -1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.500000 0.500000 -0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.707107 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             -0.500000 0.500000 0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.500000 0.500000 0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.707107 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0.500000 0.500000 -0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 -0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 0.707107 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">             0 1 0</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           ]</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         }</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         weight         [</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.500000</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           0.707107</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">           1</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         ]</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         uClosed TRUE</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">         vClosed TRUE</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">       }</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">     }</span><br style="color:rgb(32,31,30);font-size:14.6667px"><span style="color:rgb(32,31,30);font-size:14.6667px">}</span><br style="color:rgb(32,31,30);font-size:14.6667px">"""</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 21, 2020 at 7:02 AM Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com">michalis.kambi@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">Ups, resending with correct (new) Joerg's email address.<br>
<br>
@Joerg: The archive of this thread is on<br>
<a href="http://web3d.org/pipermail/x3d-public_web3d.org/2020-May/012644.html" rel="noreferrer" target="_blank">http://web3d.org/pipermail/x3d-public_web3d.org/2020-May/012644.html</a> .<br>
<br>
As you maintain White Dune, which heavily exercises NURBS in VRML/X3D,<br>
I'm curious about your opinion on this. Should we keep compatibility<br>
in X3D 4.0 (have control points premultiplied by weights) or break<br>
compatibility (have control points not premultiplied by weights, which<br>
seems more consistent with the way NURBS values are commonly written<br>
down)?<br>
<br>
Regards,<br>
Michalis<br>
<br>
czw., 21 maj 2020 o 14:47 Michalis Kamburelis<br>
<<a href="mailto:michalis.kambi@gmail.com" target="_blank">michalis.kambi@gmail.com</a>> napisał(a):<br>
><br>
> As for changing this (breaking compatibility): I agree that changes<br>
> here are easy on the browser side (remembering they would need to be<br>
> under "if", like "if X3D version >= 4 then Point := ControlPoint *<br>
> Weight else Point := ControlPoint".). On the authoring tools side,<br>
> probably easy too.<br>
><br>
> My main concern is that it would very easy to forget doing this on the<br>
> author side. And we could no longer give instruction "just change X3D<br>
> header from 3 to 4" top upgrade. Our instructions would have to<br>
> document this ("unless you use NURBS with weights, then remember to<br>
> also demultiply the control points when upgrading to X3D 4").<br>
><br>
> I'm not strongly against it, just a little :) I welcome others opinion<br>
> here. E.g. what does White Dune author (adding Joerg  to Cc) think<br>
> about this? I'm not sure if you listen on x3d-public :)<br>
><br>
> Regards,<br>
> Michalis<br>
><br>
> czw., 21 maj 2020 o 12:38 Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> napisał(a):<br>
> ><br>
> > I can understand the reasoning of keeping backward compatibility as<br>
> > much as possible. In this case, it would be important to add a<br>
> > sentence to<br>
> ><br>
> > 27.3.2 X3DNurbsSurfaceGeometryNode<br>
> ><br>
> > <a href="https://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/nurbs.html#X3DNurbsSurfaceGeometryNode" rel="noreferrer" target="_blank">https://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/nurbs.html#X3DNurbsSurfaceGeometryNode</a><br>
> ><br>
> > 'Note that the controlPoint field values are given premultiplied by<br>
> > their corresponding weights.'<br>
> ><br>
> > after<br>
> ><br>
> > 'The control vertex corresponding to the control point P[i,j] on the<br>
> > control grid is:<br>
> ><br>
> >     P[i,j].x = controlPoint[i + ( j × uDimension)].x<br>
> >     P[i,j].y = controlPoint[i + ( j × uDimension)].y<br>
> >     P[i,j].z = controlPoint[i + ( j × uDimension)].z<br>
> >     P[i,j].w = weight[ i + (j × uDimension)]<br>
> ><br>
> >     where 0 ≤ i < uDimension and<br>
> >           0 ≤ j < vDimension.'<br>
> ><br>
> > But I want to stress that the decision was made that V4.0 does not<br>
> > need to maintain backward compabitibility and I think part of the<br>
> > motivation was to fix exactly these kind of legacy issues. It is a<br>
> > huge opportunity which will not come along for some time.<br>
> ><br>
> > It is also worth pointing out that the changes to existing Nurbs nodes<br>
> > in scenes are very straightforward and could even be automated. The<br>
> > required changes in browser code are also very straightforward,<br>
> > probably a few lines.<br>
> ><br>
> > The prose would also only need minor changes:<br>
> ><br>
> >     P[i,j].w = weight[ i + (j × uDimension)]<br>
> >     P[i,j].x = P[i,j].w * controlPoint[i + ( j × uDimension)].x<br>
> >     P[i,j].y = P[i,j].w * controlPoint[i + ( j × uDimension)].y<br>
> >     P[i,j].z = P[i,j].w * controlPoint[i + ( j × uDimension)].z<br>
> ><br>
> > Andreas<br>
> ><br>
> > On Wed, May 20, 2020 at 7:06 PM Michalis Kamburelis<br>
> > <<a href="mailto:michalis.kambi@gmail.com" target="_blank">michalis.kambi@gmail.com</a>> wrote:<br>
> > ><br>
> > > I think that clarifying this in the X3D spec is a good idea. I<br>
> > > remember I was initially surprised by this X3D behavior, which caused<br>
> > > me to document it on<br>
> > > <a href="https://castle-engine.io/x3d_implementation_nurbs.php#section_homogeneous_coordinates" rel="noreferrer" target="_blank">https://castle-engine.io/x3d_implementation_nurbs.php#section_homogeneous_coordinates</a>.<br>
> > ><br>
> > > I don't think that we should break compatibility and change this in<br>
> > > X3D v4. Although it's a weird behavior of NURBS in VRML 97 and X3D,<br>
> > > but breaking compatibility is also something I'd like to avoid. I<br>
> > > don't think it's justified in this case.<br>
> > ><br>
> > > - Personally I try to keep X3D v4 "as backward-compatible as<br>
> > > reasonably possible". We want to be able to tell authors "go ahead and<br>
> > > change your X3D header from 3.x to 4.0, everything will still work the<br>
> > > same". If we would change NURBS calculation, then the existing NURBS<br>
> > > curves/surfaces (with non-1.0 weights) would render differently after<br>
> > > upgrading X3D version number in your model.<br>
> > ><br>
> > > - And I want to keep X3D v4 "as backward-compatible as reasonably<br>
> > > possible" to make new features more easily accessible. My imaginary<br>
> > > scenario looks like this:<br>
> > ><br>
> > >     - An author has now a lot of existing content in X3D 3.x .<br>
> > >     - X3D 4.0 is officially released, with cool new features X, Y, Z.<br>
> > >     - An author thinks "hey, my browser supports X3D 4.0 now, and X3D<br>
> > > 4.0 added this cool new feature X, I want to use it in my existing<br>
> > > models" (e.g. I want to change my materials to use Physical-Based<br>
> > > Rendering),<br>
> > >     - The first task an author has is now "before I can use X, first I<br>
> > > have to upgrade my model from X3D 3.x to X3D 4".<br>
> > ><br>
> > > So we want the upgrade path from X3D 3 to 4 to be as trivial as<br>
> > > possible ("just change the file header"), otherwise all the new X3D 4<br>
> > > features are more difficult to practically use for existing X3D 3<br>
> > > users.<br>
> > ><br>
> > > Regards,<br>
> > > Michalis<br>
> > ><br>
> > > wt., 19 maj 2020 o 16:20 Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> napisał(a):<br>
> > > ><br>
> > > > Thanks, Michalis, for the quick confirmation. Should we use X3D v4.0 to change the undesired behavior ? v4.0 allows for backward incompatiblity.<br>
> > > ><br>
> > > > If the issue is not significant enough to break backward compatibility, there should be a sentence explaining the issue: "Control points are provided as homogeneous coordinates, eg. multiplied by their corresponding weights." or something like that.<br>
> > > ><br>
> > > > I can provide a spec comment if that is helpful, eg. if Michalis did not already provide one.<br>
> > > ><br>
> > > > Cheers, -Andreas<br>
> > > ><br>
> > > > On Tue, May 19, 2020 at 9:50 AM Michalis Kamburelis <<a href="mailto:michalis.kambi@gmail.com" target="_blank">michalis.kambi@gmail.com</a>> wrote:<br>
> > > >><br>
> > > >> See the documentation about this issue on Castle Game Engine:<br>
> > > >> <a href="https://castle-engine.io/x3d_implementation_nurbs.php#section_homogeneous_coordinates" rel="noreferrer" target="_blank">https://castle-engine.io/x3d_implementation_nurbs.php#section_homogeneous_coordinates</a><br>
> > > >><br>
> > > >> As far as I tested, all X3D browsers require points to be<br>
> > > >> "premultiplied by the given weight". Which is confusing and contrary<br>
> > > >> to how NURBS are usually expressed (it makes the operation<br>
> > > >> "intuitively pull the curve toward the control point" harder than it<br>
> > > >> should be, see my docs above), but that's how it is. View3dscene /<br>
> > > >> Castle Game Engine follow it.<br>
> > > >><br>
> > > >> I have some simple tests of NURBS in<br>
> > > >> <a href="https://github.com/castle-engine/demo-models/tree/master/nurbs" rel="noreferrer" target="_blank">https://github.com/castle-engine/demo-models/tree/master/nurbs</a> .<br>
> > > >><br>
> > > >> Regards,<br>
> > > >> Michalis<br>
> > > >><br>
> > > >> wt., 19 maj 2020 o 15:28 Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>> napisał(a):<br>
> > > >> ><br>
> > > >> > We came across a specification issue for Nurbs. It is unclear if provided control points should be provided<br>
> > > >> ><br>
> > > >> > A) already weighted, eg. premultiplied by the given weight, or<br>
> > > >> > B) if the browser, eg. the evaluation of the Nurbs should do the weighting, eg. the multiplication of each control point with the corresponding weight.<br>
> > > >> ><br>
> > > >> > At first glance, since the weights are provided separately, one would think the control points should be provided unweighted, eg. B). This is also how OpenCascade or Blender specify control points (<a href="https://docs.blender.org/manual/en/latest/modeling/surfaces/structure.html" rel="noreferrer" target="_blank">https://docs.blender.org/manual/en/latest/modeling/surfaces/structure.html</a>).<br>
> > > >> ><br>
> > > >> > But tests using a torus Nurbs reveal all freeWrl, view3dscene and InstandPlayer expect premultiplied control points (case A). This is surprising but there may be a reason for that consistency. Perhaps a commonly used formula ?<br>
> > > >> ><br>
> > > >> > The spec. itself is silent on this.<br>
> > > >> ><br>
> > > >> > A) requires confusing redundancy, since the weight field is still needed for normalizing the weighted sum.<br>
> > > >> ><br>
> > > >> > I would prefer B).<br>
> > > >> ><br>
> > > >> > There are no examples which use important weights, for testing. The github issue below has the torus example.<br>
> > > >> ><br>
> > > >> > If A) is the consensus, the spec. needs to point out that control points are expected to be already weighted.<br>
> > > >> ><br>
> > > >> > Here is the related discussion:<br>
> > > >> > <a href="https://github.com/x3dom/x3dom/issues/1059" rel="noreferrer" target="_blank">https://github.com/x3dom/x3dom/issues/1059</a><br>
> > > >> > <a href="https://github.com/andreasplesch/OCCToX3D/issues/8" rel="noreferrer" target="_blank">https://github.com/andreasplesch/OCCToX3D/issues/8</a><br>
> > > >> ><br>
> > > >> ><br>
> > > >> >  -Andreas<br>
> > > >> ><br>
> > > >> > --<br>
> > > >> > Andreas Plesch<br>
> > > >> > Waltham, MA 02453<br>
> > > >> > _______________________________________________<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>
> > > ><br>
> > > ><br>
> > > ><br>
> > > > --<br>
> > > > Andreas Plesch<br>
> > > > Waltham, MA 02453<br>
> ><br>
> ><br>
> ><br>
> > --<br>
> > Andreas Plesch<br>
> > Waltham, MA 02453<br>
<br>
_______________________________________________<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>