Fix bug with clipping

This commit is contained in:
2026-04-07 12:37:43 +02:00
parent 9a8f6c7dc5
commit a3ca2eb372
5 changed files with 125 additions and 124 deletions

224
config.js
View File

@@ -36,7 +36,7 @@ export const config = {
isMain: true, isMain: true,
}, },
], ],
pano: `pano/defsky-grass.jpg`, pano: `pano/gradient.jpg`,
}, },
{ {
id : "ssgp", id : "ssgp",
@@ -45,116 +45,118 @@ export const config = {
popup: theater2Popup, popup: theater2Popup,
coords: [45.4401, 12.3408], coords: [45.4401, 12.3408],
nodes: [ nodes: [
{ {
label: 'Teatro', label: 'Teatro',
children: [ children: [
{ /*
label: 'Struttura complessiva', {
model: 'models/ssgp/Teatro_SSGP_Full_ConSottrazioni.glb', label: 'Struttura complessiva',
}, model: 'models/ssgp/Teatro_SSGP_Full_ConSottrazioni.glb',
{ },
label: 'Involucro', */
model: 'models/ssgp/Teatro_SSGP_Layer_Struttura_parete_di_fondo.glb', {
isMain: true, label: 'Involucro',
opacity: 0.2, model: 'models/ssgp/Teatro_SSGP_Layer_Struttura_parete_di_fondo.glb',
}, isMain: true,
] opacity: 0.2,
}, },
{ ]
label: 'Sala / Auditorium', },
children: [ {
{ label: 'Sala / Auditorium',
label: 'Peplano / Platea', children: [
model: 'models/ssgp/Teatro_SSGP_Platea_peplano.glb', {
}, label: 'Peplano / Platea',
{ model: 'models/ssgp/Teatro_SSGP_Platea_peplano.glb',
label: 'Ordini di palchi', },
children: [ {
{ label: 'Ordini di palchi',
label: 'Ordine 1', children: [
model: 'models/ssgp/Teatro_SSGP_Ordine1.glb', {
}, label: 'Ordine 1',
{ model: 'models/ssgp/Teatro_SSGP_Ordine1.glb',
label: 'Ordine 2', },
model: 'models/ssgp/Teatro_SSGP_Ordine2.glb', {
}, label: 'Ordine 2',
{ model: 'models/ssgp/Teatro_SSGP_Ordine2.glb',
label: 'Ordine 3', },
model: 'models/ssgp/Teatro_SSGP_Ordine3.glb', {
}, label: 'Ordine 3',
{ model: 'models/ssgp/Teatro_SSGP_Ordine3.glb',
label: 'Ordine 4', },
model: 'models/ssgp/Teatro_SSGP_Ordine4.glb', {
}, label: 'Ordine 4',
{ model: 'models/ssgp/Teatro_SSGP_Ordine4.glb',
label: 'Ordine 5', },
model: 'models/ssgp/Teatro_SSGP_Ordine5.glb', {
}, label: 'Ordine 5',
] model: 'models/ssgp/Teatro_SSGP_Ordine5.glb',
}, },
{ ]
label: 'Parapetto', },
model: 'models/ssgp/Teatro_SSGP_parapetto_scala_piani.glb', {
}, label: 'Parapetto',
{ model: 'models/ssgp/Teatro_SSGP_parapetto_scala_piani.glb',
label: 'Percorsi pubblico', },
model: 'models/ssgp/Teatro_SSGP_Percorsi_scale_corridoi.glb', {
}, label: 'Percorsi pubblico',
] model: 'models/ssgp/Teatro_SSGP_Percorsi_scale_corridoi.glb',
}, },
{ ]
label: 'Scena', },
children: [ {
{ label: 'Scena',
label: 'Palcoscenico', children: [
model: 'models/ssgp/Teatro_SSGP_Palcoscenico.glb', {
}, label: 'Palcoscenico',
{ model: 'models/ssgp/Teatro_SSGP_Palcoscenico.glb',
label: 'Boccascena / Proscenio', },
model: 'models/ssgp/Teatro_SSGP_Boccascena.glb', {
}, label: 'Boccascena / Proscenio',
{ model: 'models/ssgp/Teatro_SSGP_Boccascena.glb',
label: 'Quinte architettoniche fisse', },
model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_fisse.glb', {
}, label: 'Quinte architettoniche fisse',
{ model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_fisse.glb',
label: 'Quinte architettoniche mobili', },
model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_mobili.glb', {
}, label: 'Quinte architettoniche mobili',
] model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_mobili.glb',
}, },
{ ]
label: 'Spazi tecnici', },
children: [ {
{ label: 'Spazi tecnici',
label: 'Spazio tecnico superiore', children: [
model: 'models/ssgp/Teatro_SSGP_Layer_Spazio_tecnico_sup_soffitta.glb', {
children: [ label: 'Spazio tecnico superiore',
{ model: 'models/ssgp/Teatro_SSGP_Layer_Spazio_tecnico_sup_soffitta.glb',
label: 'Graticcia', children: [
model: 'models/ssgp/Teatro_SSGP_Graticcia.glb', {
}, label: 'Graticcia',
{ model: 'models/ssgp/Teatro_SSGP_Graticcia.glb',
label: 'Ballatoio', },
model: 'models/ssgp/Teatro_SSGP_Ballatoio.glb', {
}, label: 'Ballatoio',
{ model: 'models/ssgp/Teatro_SSGP_Ballatoio.glb',
label: 'Spazio tecnico inferiore', },
model: 'models/ssgp/Teatro_SSGP_Spazio_tecnico_inf.glb', {
}, label: 'Spazio tecnico inferiore',
] model: 'models/ssgp/Teatro_SSGP_Spazio_tecnico_inf.glb',
}, },
] ]
}, },
{ ]
label: 'Orchestra', },
children: [ {
{ label: 'Orchestra',
label: 'Fossa orchestra', children: [
model: 'models/ssgp/Teatro_SSGP_Fossa_orchestra.glb', {
}, label: 'Fossa orchestra',
] model: 'models/ssgp/Teatro_SSGP_Fossa_orchestra.glb',
} },
]
}
], ],
pano: `pano/gradient.jpg`, pano: `pano/gradient.jpg`,
} }

View File

@@ -24,7 +24,7 @@ UI.contentMenuTabs = `
</ul> </ul>
<!-- Tab panes --> <!-- Tab panes -->
<div class="tab-content ps-4 ms-3" style="overflow: auto"> <div class="tab-content ps-4 ms-3 overflow-y-auto">
<div class="tab-pane active p-3 ms-3" id="layer" role="tabpanel" aria-labelledby="layer-tab" tabindex="0"></div> <div class="tab-pane active p-3 ms-3" id="layer" role="tabpanel" aria-labelledby="layer-tab" tabindex="0"></div>
<div class="tab-pane p-3" id="media" role="tabpanel" aria-labelledby="media-tab" tabindex="0"></div> <div class="tab-pane p-3" id="media" role="tabpanel" aria-labelledby="media-tab" tabindex="0"></div>
</div> </div>

View File

@@ -9,7 +9,13 @@
* @param {Number} depth * @param {Number} depth
*/ */
function traverse(node, flatList, depth = 1) { function traverse(node, flatList, depth = 1) {
const normNode = {label: node.label}; const normNode = {
id: node.label,
label: node.label,
opacity: node.opacity ?? null,
isMain: node.isMain ?? false,
active: true,
};
if (node.model) { if (node.model) {
normNode.model = node.model; normNode.model = node.model;
} }
@@ -18,9 +24,8 @@ function traverse(node, flatList, depth = 1) {
depth depth
}); });
if (node.children) { if (node.children) {
depth++;
for(let child of node.children) { for(let child of node.children) {
traverse(child, flatList, depth); traverse(child, flatList, depth + 1);
} }
} }
} }
@@ -32,11 +37,11 @@ function traverse(node, flatList, depth = 1) {
* @returns {Object[]} A flat list of nodes * @returns {Object[]} A flat list of nodes
**/ **/
export function normalizeNodes (nodes) { export function normalizeNodes (nodes) {
let flatNodes = []; let flatList = [];
for (let node of nodes) { for (let node of nodes) {
traverse(node, flatNodes); traverse(node, flatList);
} }
return flatNodes; return flatList;
} }

View File

@@ -7,9 +7,6 @@ AppState.currentScene = 'salvador';
AppState.sceneHasAudio = true; AppState.sceneHasAudio = true;
const marker = config.markers.find(m => m.id === 'salvador'); const marker = config.markers.find(m => m.id === 'salvador');
AppState.normalizedNodes = normalizeNodes(marker.nodes); AppState.normalizedNodes = normalizeNodes(marker.nodes);
AppState.normalizedNodes.forEach(node => node.active = true);
Scene.openScene(marker, AppState.normalizedNodes); Scene.openScene(marker, AppState.normalizedNodes);
Scene.UI.pauseAudio('[data-bs-dismiss="modal"]'); Scene.UI.pauseAudio('[data-bs-dismiss="modal"]');

View File

@@ -6,7 +6,4 @@ import { normalizeNodes } from "../../js/utils/nodeUtils.js";
AppState.currentScene = 'ssgp'; AppState.currentScene = 'ssgp';
const marker = config.markers.find(m => m.id === 'ssgp'); const marker = config.markers.find(m => m.id === 'ssgp');
AppState.normalizedNodes = normalizeNodes(marker.nodes); AppState.normalizedNodes = normalizeNodes(marker.nodes);
AppState.normalizedNodes.forEach(node => node.active = true);
Scene.openScene(marker, AppState.normalizedNodes); Scene.openScene(marker, AppState.normalizedNodes);