diff --git a/builtins/rendercore/RenderCore-1.7.tar.gz b/builtins/rendercore/RenderCore-1.7.tar.gz deleted file mode 100644 index bbd5b97e2c661..0000000000000 Binary files a/builtins/rendercore/RenderCore-1.7.tar.gz and /dev/null differ diff --git a/builtins/rendercore/RenderCore-1.8.tar.gz b/builtins/rendercore/RenderCore-1.8.tar.gz new file mode 100644 index 0000000000000..084656c909f4e Binary files /dev/null and b/builtins/rendercore/RenderCore-1.8.tar.gz differ diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index a6dedfbfaf3f8..7f78a1da35ddb 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -2157,8 +2157,8 @@ if(webgui) endif() ExternalProject_Add( RENDERCORE - URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-1.7.tar.gz - URL_HASH SHA256=46cf6171ae0e16ba2f99789daaeb202146072af874ea530f06a0099c66c3e9b1 + URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-1.8.tar.gz + URL_HASH SHA256=2ab84800ec1aaf36671e463a09e3befbe97b06b2547f97ec05fe16ef1351c79a CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" diff --git a/graf3d/eve7/src/REveBoxSet.cxx b/graf3d/eve7/src/REveBoxSet.cxx index abcffce6d223d..c1bbcdede60a7 100644 --- a/graf3d/eve7/src/REveBoxSet.cxx +++ b/graf3d/eve7/src/REveBoxSet.cxx @@ -238,7 +238,7 @@ void REveBoxSet::AddHex(const REveVector& pos, Float_t r, Float_t angle, Float_t REveTrans t; // AMT do we need to reuse ??? t.SetPos(pos.fX, pos.fY, pos.fZ); t.SetScale(r,r,depth); - t.RotatePF(1, 2, angle); + t.RotateLF(1, 2, angle * TMath::DegToRad()); for(Int_t i=0; i<16; ++i) hex->fMat[i] = t[i]; } diff --git a/ui5/eve7/lib/EveScene.js b/ui5/eve7/lib/EveScene.js index fa5e42d660595..e0ef39d79965f 100644 --- a/ui5/eve7/lib/EveScene.js +++ b/ui5/eve7/lib/EveScene.js @@ -201,8 +201,15 @@ sap.ui.define(['rootui5/eve7/lib/EveManager'], function(EveManager) { this.update3DObjectsVisibility(p.childs, true); this.need_visibility_update = false; } - this.glctrl.viewer.render(); + // To improve when bbox info is streamed. + // Recalc scene bbox -- and update viewer total bbox, from scene boxes. + // 1. recalc-scene-bbox from known element bboxes (streamed) + // [ this could really be done on the server ] + // 2. tell viewer to recalc-total-bbox ONLY from scene bboxes. + + // For now just refresh the gl-viewer. + this.glctrl.viewer.request_render(true); } } diff --git a/ui5/eve7/lib/GlViewerRCore.js b/ui5/eve7/lib/GlViewerRCore.js index 2fea3fa43a8d1..e9abf2ac505e3 100644 --- a/ui5/eve7/lib/GlViewerRCore.js +++ b/ui5/eve7/lib/GlViewerRCore.js @@ -87,6 +87,8 @@ sap.ui.define([ return canvasDOM; }; + pthis.ApplyTemporaryRCoreExtensions(); + pthis.bootstrap(); }); } else { @@ -203,6 +205,7 @@ sap.ui.define([ this.renderer.clearColor = "#00000000"; this.scene = new RC.Scene(); this.overlay_scene = new RC.Scene(); + this.scene_bbox = new RC.Box3(); this.lights = new RC.Group; this.lights.name = "Light container"; @@ -470,18 +473,23 @@ sap.ui.define([ this.resetRenderer(); } - resetRenderer() + recalcSceneBBox() { - let sbbox = new RC.Box3(); - sbbox.setFromObject( this.scene ); - if (sbbox.isEmpty()) + this.scene_bbox.setFromObject( this.scene ); + if (this.scene_bbox.isEmpty()) { - console.error("GlViewerRenderCore.resetRenderer scene bbox empty", sbbox); + console.error("GlViewerRenderCore.resetRenderer scene bbox empty", this.scene_bbox); const ext = 100; - sbbox.expandByPoint(new RC.Vector3(-ext,-ext,-ext)); - sbbox.expandByPoint(new RC.Vector3( ext, ext, ext)); + this.scene_bbox.expandByPoint(new RC.Vector3(-ext,-ext,-ext)); + this.scene_bbox.expandByPoint(new RC.Vector3( ext, ext, ext)); } + } + + resetRenderer() + { + this.recalcSceneBBox(); + let sbbox = this.scene_bbox; let posV = new RC.Vector3; posV.subVectors(sbbox.max, this.rot_center); let negV = new RC.Vector3; negV.subVectors(sbbox.min, this.rot_center); @@ -540,6 +548,19 @@ sap.ui.define([ this.controls.update(); } + setupCamera() + { + // To be used with JS debugger to edit the values as needed. + + let pos = new RC.Vector3; + let lookat = new RC.Vector3; + let fov = 30; // in degrees + + console.log("A good place to set the breakpoint and edit the values"); + + // Call the controller stuff, hope it's not all local, otherwise we need to edit it there. + // Sigh, should really have it (and RedeQuTor) in ROOT. + } updateViewerAttributes() { @@ -641,10 +662,11 @@ sap.ui.define([ //============================================================================== - request_render() + request_render(recalc_sbbox=false) { // console.log("REQUEST RENDER"); + this.render_requested_recalc_sbbox ||= recalc_sbbox; if (this.render_requested) return; setTimeout(this.render.bind(this), 0); this.render_requested = true; @@ -652,9 +674,16 @@ sap.ui.define([ render() { - // console.log("RENDER", this.scene, this.camera, this.canvas, this.renderer); + console.log("RENDER", this.scene, this.camera, this.canvas, this.renderer); this.render_requested = false; + if (this.render_requested_recalc_sbbox) { + this.recalcSceneBBox(); + this.render_requested_recalc_sbbox = false; + } + if (this.camera.isPerspectiveCamera) { + this.camera.optimizeNearFar(this.scene_bbox); + } if (this.canvas.width <= 0 || this.canvas.height <= 0) return; @@ -1220,6 +1249,25 @@ sap.ui.define([ `); win.document.close(); } + + //============================================================================== + // Temporary RCore additions (to avoid updating of RCore.tgz) + //============================================================================== + + ApplyTemporaryRCoreExtensions() { + console.log("GlViewerRCore.ApplyTemporaryRCoreExtensions()"); + + // E.g.: + // if (RC.PerspectiveCamera.prototype.optimizeNearFar === undefined) { + // RC.PerspectiveCamera.prototype.optimizeNearFar = function(scene_bbox) { + // this.matrixWorldInverse.getInverse(this.matrixWorld); + // // ..... + // }; + // } + } + + //============================================================================== + } // class GlViewerRCore return GlViewerRCore;