From fefab7bf1ef3dd4179a7d9fd26d79fa793db56eb Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Thu, 9 Mar 2017 09:54:38 -0500 Subject: [PATCH] Support RTC_CENTER property for i3dm --- Source/Scene/Instanced3DModel3DTileContent.js | 9 ++++++ .../Instanced/InstancedRTC/instancedRTC.i3dm | Bin 0 -> 5920 bytes .../Instanced/InstancedRTC/tileset.json | 29 ++++++++++++++++++ .../Instanced3DModel3DTileContentSpec.js | 7 +++++ 4 files changed, 45 insertions(+) create mode 100644 Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/instancedRTC.i3dm create mode 100644 Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/tileset.json diff --git a/Source/Scene/Instanced3DModel3DTileContent.js b/Source/Scene/Instanced3DModel3DTileContent.js index d3542eabae66..be10a0b6efc7 100644 --- a/Source/Scene/Instanced3DModel3DTileContent.js +++ b/Source/Scene/Instanced3DModel3DTileContent.js @@ -332,6 +332,12 @@ define([ var eastNorthUp = featureTable.getGlobalProperty('EAST_NORTH_UP'); + var rtcCenter; + var rtcCenterArray = featureTable.getGlobalProperty('RTC_CENTER'); + if (defined(rtcCenterArray)) { + rtcCenter = Cartesian3.unpack(rtcCenterArray); + } + var instances = collectionOptions.instances; var instancePosition = new Cartesian3(); var instancePositionArray = new Array(3); @@ -371,6 +377,9 @@ define([ } } Cartesian3.unpack(position, 0, instancePosition); + if (defined(rtcCenter)) { + Cartesian3.add(instancePosition, rtcCenter, instancePosition); + } instanceTranslationRotationScale.translation = instancePosition; // Get the instance rotation diff --git a/Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/instancedRTC.i3dm b/Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/instancedRTC.i3dm new file mode 100644 index 0000000000000000000000000000000000000000..6f5b6b99807deafcb565b5304c7d1d5ff3ea9558 GIT binary patch literal 5920 zcmb_g&2Qtz6{pi=(>iI=rfCB7vIKjv8?Hc#)Q4>pjii;=-fHDtOS=hR7z8a*61Nhm zl9YBG!$5joplPqYB)zmf^jPGY*g()ri{ASePDqv7FAQL>Se83Fpa8aYL${<9;!;S z*6CX9z5VWvb^ori83i*(RqpO}cDuWKZDsRBIXaG?E5koOt=?q|QRdryA*De><;{muE`U;OZl{BrN<4?tgM zG>ydv{5tqG8bcoRhl~c!IdI+vP7V0yz^@UFeLuy%jD|jS=u;;?^sGZqMniwde*u}O z4!h1_7x+;f_MX9BM#B#^_<_;z4{)9^n)EnPb{uy&g7*%Jn))^U9-hj>ad&$K_@BQn zNv)S@C)&&I^_(#DgOEZe2A1pfoyV5O!Z{lZoZx}$JW@85qhw&|ikc5KA9kX^?K_CP zs`UKH)b|`O>K;$QDd|Onm@^Ni8D&+87+dKyYOUHn&?c@2n>FOv#C}ZH8;7TAs?*dD z-N^MJgB(lr$SbA&A4)-!SgE2Zl(?a51&uyNRX58Um0}t7p=+;iTz5kx?O;fa&M-I1#oR6^kR(yR z61Gyzqq1$XxCY^Jtx_X0wfU9krnUfIHmeumT~%9MH{ji@7j&(JHm@q~#2z~2ThJ3b zast;LGgpg&btmSMV?29;#848JsyL4$$D_1}G3NGo#_$w-a^#|oP;*e}hqAQq4hFLj z5C_Opma9ORxFOH0j9@r*db6>Oq|Gu%uIGAae9GoVxu8|5rlBL4f$fD;J8-<-v9hVd zj>zeaJoo1_QZ=EGv1FnXj<|Y6S-sg2OZ3<-Hl*5cCumx85ithhZ4$lprf`%xPMUJbpG zJMO~|&>FrLrXDbgn@VgO)=;C?SyWhLE~3~*p*@+7QT9AP!XA1F^kd%~P~`)rOomOV z!gV~z>c}u7q|7W}`okx-hYX|xBHp8i3=8adkV`J*r#t(Wa7}38oSN`sWlZNTTR{;{ z0?u?wMy&Gkk+iM!a8eQyDp{hV!wA;e0gD8KW~dJaOVJq9>3S#j=7|zI6Wfd29{h7> z?`E_0V7K`WdK_Q&D{1Sa<(W*(U756neb-XZ{ga?_G@pMv*8F!V*QW3$NbX=QxSqLL4Lqr#miz&L0gc1543%29gM|2(@ z;Mg|R;zn`fkUSQ~+(RJDJa>RpVd67uDLYv8X7dFrtmRx-P7jjHM?SVJP6V1yf|`Vv zxJg8l*b+C5SlV`ppT;E(8Qu`J<`Yh|CC7kiOxRwlcay>LnIf5N}%c_sQMBuLWux`bx)T$IaRLNna=Gq{(~ zOkc>*x~tHTWS=Y93BRmJ&q4k<=^N7X(hJfxJg-SFO5c>eC9UGQD!nAVEPY#g1j)JX-&fR-98L(y|p>0 zb@^mfCRkHO>yv-HY?b^YHocarqvC~YeT$Z56v0ve6doVHM>E5*bvJ(1W|)hf04St6 z23L%UW&HsWarN0+Jzc#dBFuv1^hq5Z^W*bpi7!r|r3rEFq!TO!;GX2*S)R(CLQDRK zz3g8P6tjhJUJ@EZPF%zZ_dREA9w!eE1jR45kvTH4m&Mi)b1k}?LV)sX4gZBuW$_R& zhAb>+IATx;hDR(~l$e5f6*S>sh9(9%wD`in1Y$ZjKgYfHrW;`XM%Mb&ovG^a@=Nr} zNxhXgqe#x+j}&o?Z5Ny+l0SAa-%P+@QkBJH9Vv|eLap`vXpO6`j@N0I6n_N#)T*)k zmK>YQM0m;xckg=a-8MSL8iLgdDvIdQ+QJs{i0`3hb9J5J38YJO7GlYUN#uL}*r!M= zxCBYW@cA@+5&MSX2p?oUMNo;D*a$L$WUA$aMAGD#B5BYg_)A2x4xMKkm$gQ!skz2C VOcW{Ds?e!mWAFU+5tf{;{s(ljPhtQ7 literal 0 HcmV?d00001 diff --git a/Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/tileset.json b/Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/tileset.json new file mode 100644 index 000000000000..9c5d59deb4ce --- /dev/null +++ b/Specs/Data/Cesium3DTiles/Instanced/InstancedRTC/tileset.json @@ -0,0 +1,29 @@ +{ + "asset": { + "version": "0.0" + }, + "properties": { + "Height": { + "minimum": 20, + "maximum": 20 + } + }, + "geometricError": 70, + "root": { + "refine": "add", + "boundingVolume": { + "region": [ + -1.3197004795898053, + 0.6988582109, + -1.3196595204101946, + 0.6988897891, + 0, + 30 + ] + }, + "geometricError": 0, + "content": { + "url": "instancedRTC.i3dm" + } + } +} diff --git a/Specs/Scene/Instanced3DModel3DTileContentSpec.js b/Specs/Scene/Instanced3DModel3DTileContentSpec.js index 5245e8daf60a..779e6704db24 100644 --- a/Specs/Scene/Instanced3DModel3DTileContentSpec.js +++ b/Specs/Scene/Instanced3DModel3DTileContentSpec.js @@ -33,6 +33,7 @@ defineSuite([ var oct16POrientationUrl = './Data/Cesium3DTiles/Instanced/InstancedOct32POrientation/'; var scaleUrl = './Data/Cesium3DTiles/Instanced/InstancedScale/'; var scaleNonUniformUrl = './Data/Cesium3DTiles/Instanced/InstancedScaleNonUniform/'; + var rtcUrl = './Data/Cesium3DTiles/Instanced/InstancedRTC'; var quantizedUrl = './Data/Cesium3DTiles/Instanced/InstancedQuantized/'; var quantizedOct32POrientationUrl = './Data/Cesium3DTiles/Instanced/InstancedQuantizedOct32POrientation/'; var withTransformUrl = './Data/Cesium3DTiles/Instanced/InstancedWithTransform/'; @@ -184,6 +185,12 @@ defineSuite([ }); }); + it('renders with RTC_CENTER semantic', function() { + return Cesium3DTilesTester.loadTileset(scene, rtcUrl).then(function(tileset) { + Cesium3DTilesTester.expectRenderTileset(scene, tileset); + }); + }); + it('renders with feature defined quantized position', function() { return Cesium3DTilesTester.loadTileset(scene, quantizedUrl).then(function(tileset) { Cesium3DTilesTester.expectRenderTileset(scene, tileset);