From 20f90712fcf020ad847af0edc5ffe556c3da8aee Mon Sep 17 00:00:00 2001 From: Michal Dybizbanski Date: Fri, 27 Dec 2024 14:57:07 +0100 Subject: [PATCH] XCD-196 Sort normalFillTransparentBin drawables by their distance from the eye before draw calls --- src/viewer/scene/webgl/Renderer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/viewer/scene/webgl/Renderer.js b/src/viewer/scene/webgl/Renderer.js index 0c483c5afe..33541a6c18 100644 --- a/src/viewer/scene/webgl/Renderer.js +++ b/src/viewer/scene/webgl/Renderer.js @@ -11,6 +11,8 @@ import {SAODepthLimitedBlurRenderer} from "./sao/SAODepthLimitedBlurRenderer.js" import {RenderBufferManager} from "./RenderBufferManager.js"; import {getExtension} from "./getExtension.js"; +const vec3_0 = math.vec3([0,0,0]); + /** * @private */ @@ -713,9 +715,11 @@ const Renderer = function (scene, options) { // Transparent color fill if (normalFillTransparentBinLen > 0) { + const eye = frameCtx.pickOrigin || scene.camera.eye; + const byDist = normalFillTransparentBin.map(d => ({ drawable: d, distSq: math.distVec3(d.origin || vec3_0, eye) })); + byDist.sort((a, b) => b.distSq - a.distSq); for (i = 0; i < normalFillTransparentBinLen; i++) { - drawable = normalFillTransparentBin[i]; - drawable.drawColorTransparent(frameCtx); + byDist[i].drawable.drawColorTransparent(frameCtx); } }