Refactor app.js for responsive canvas size calculation

This commit is contained in:
2025-05-28 04:27:57 +02:00
parent cd7fe1ccda
commit 1e73f6a5a4

View File

@@ -47,32 +47,28 @@ composer.addPass(new ShaderPass(GammaCorrectionShader));
function onResize() { function onResize() {
const winW = window.innerWidth, winH = window.innerHeight; const winW = window.innerWidth, winH = window.innerHeight;
const aspect = 3/2; const aspect = 3/2;
let renderW, renderH;
let renderW, renderH;
if (winW / winH > aspect) { if (winW / winH > aspect) {
// Fenster ist breiter als 3:2 → fülle in Höhe, überstehende Breite // Fenster ist breiter → passe an Breite an, Höhe reicht nicht aus → Höhe muss „überragen“
renderH = winH;
renderW = winH * aspect;
} else {
// Fenster ist schmaler als 3:2 → fülle in Breite, überstehende Höhe
renderW = winW; renderW = winW;
renderH = winW / aspect; renderH = winW / aspect;
} else {
// Fenster ist höher/schmaler → passe an Höhe an, Breite reicht nicht aus → Breite muss „überragen“
renderH = winH;
renderW = winH * aspect;
} }
// Setze die Größe des Renderers und Canvas renderer.setSize(renderW, renderH, false);
renderer.setSize(renderW, renderH, false); // "false": ändert nicht das Canvas-Element selbst!
composer.setSize(renderW, renderH); composer.setSize(renderW, renderH);
// Platziere das Canvas absolut zentriert, setze style.width/height so dass es "überragt"
renderer.domElement.style.width = `${renderW}px`; renderer.domElement.style.width = `${renderW}px`;
renderer.domElement.style.height = `${renderH}px`; renderer.domElement.style.height = `${renderH}px`;
renderer.domElement.style.left = '50%'; renderer.domElement.style.left = '50%';
renderer.domElement.style.top = '50%'; renderer.domElement.style.top = '50%';
renderer.domElement.style.transform = 'translate(-50%, -50%)'; renderer.domElement.style.transform = 'translate(-50%, -50%)';
// Scissor/Viewport: Zeige die ganze Fläche, kein „Clipping“ nötig
renderer.setScissorTest(false); renderer.setScissorTest(false);
// Pixel Ratio
const dpr = window.devicePixelRatio || 1; const dpr = window.devicePixelRatio || 1;
renderer.setPixelRatio(dpr); renderer.setPixelRatio(dpr);
composer.setPixelRatio(dpr); composer.setPixelRatio(dpr);