continuous-integration/drone/push Build is passing
- Introduced `legacy-shaders.js` containing vertex and fragment shaders for rendering. - Implemented `model-io.js` for parsing and encoding GLB files, ensuring compatibility with glTF 2.0. - Created `project-panel.js` to manage project resources and survey overlays, enhancing user interaction. - Added `solar.js` for calculating solar positions based on UTC time, latitude, and longitude. - Developed `three-renderer.js` as a standard backend for Three.js, managing scene rendering and material synchronization. - Included a new GLB model `dum.glb` for testing and demonstration purposes. - Established `data_checks.mjs` for validating model data and ensuring integrity of assets. - Created `prepare_export.py` to facilitate Blender GLB exports, maintaining material and node references. - Added `vendor_three.py` to download and configure a local version of Three.js for the project.
149 lines
8.2 KiB
Markdown
149 lines
8.2 KiB
Markdown
# Ločenice / webový model pro PHP hosting
|
|
|
|
## Nahrání na web
|
|
|
|
1. Zálohujte dosavadní složku `locenice`.
|
|
2. Nahrajte **celý obsah přiložené složky `locenice/`** do stejné složky na hostingu.
|
|
3. Otevřete `/locenice/` nebo `/locenice/index.php` a obnovte stránku bez cache.
|
|
|
|
PHP jen vrací HTML. Pro samotný provoz nepotřebujete Node.js, npm, databázi ani sestavování aplikace.
|
|
Složky `blender`, `tools` a `tests` na hosting nenahrávejte; jsou určené pro úpravy na počítači.
|
|
|
|
Základ `index.php` zůstává stejný jako dosud:
|
|
|
|
```php
|
|
<?php
|
|
header('Content-Type: text/html; charset=utf-8');
|
|
readfile(__DIR__ . '/app.html');
|
|
```
|
|
|
|
Dodaný `index.php` navíc kontroluje existenci souboru a posílá hlavičku `nosniff`.
|
|
Relativní cesty počítají s tím, že `index.php` i `app.html` jsou ve stejné složce.
|
|
Nenahrávejte pouze PHP nebo pouze HTML. Stránka potřebuje i `js`, `css`, `data`, `models` a `assets`.
|
|
Na běžném Apache není nutné přidávat `.htaccess` ani přesměrování.
|
|
Server musí vydávat `.js` jako JavaScript, `.json` jako JSON a umožnit stažení `.glb`.
|
|
|
|
## Co je kde
|
|
|
|
| Soubor / složka | Účel |
|
|
| --- | --- |
|
|
| `locenice/index.php` | Vstup na dosavadním PHP hostingu. |
|
|
| `locenice/app.html` | Struktura stránky; už bez vloženého modelu. |
|
|
| `locenice/models/dum.glb` | Celý zdrojový model, včetně alternativ a textur. |
|
|
| `locenice/data/catalog.json` | Možnosti standardů, názvy, barvy a výchozí volby. |
|
|
| `locenice/data/scene.json` | Vazby materiálů, místnosti, kamery, kolizní obrysy a metadata. |
|
|
| `locenice/data/site.json` | 27 bodů výškopisu a zvlášť souřadnice z geometrického plánu. |
|
|
| `locenice/data/app-config.json` | Model, renderer, cesty a maximální hustota vykreslování. |
|
|
| `locenice/assets/` | Samostatné obrázky katalogu a referencí. |
|
|
| `locenice/js/app.js` | Ovládání, pohledy, stav a pravidla konfigurátoru. |
|
|
| `locenice/js/three-renderer.js` | Nový renderer nad Three.js. |
|
|
| `locenice/js/legacy-renderer.js` | Lokální záloha nad původním WebGL. |
|
|
| `locenice/js/solar.js` | Oddělený výpočet polohy slunce. |
|
|
| `locenice/js/model-io.js` | Načtení a zápis kontejneru GLB. |
|
|
| `locenice/css/` | Vzhled aplikace. |
|
|
|
|
## Three.js a záložní renderer
|
|
|
|
Výchozí `renderer: "auto"` nejprve zkusí Three.js **0.180.0 / r180**, přesně připnutou verzi z CDN jsDelivr.
|
|
Model, katalog ani fotografie se na CDN neposílají. Prohlížeč odtud stahuje knihovnu, takže jde o externí síťový požadavek.
|
|
Knihovna Three.js není fyzicky součástí tohoto ZIPu. Při nedostupnosti CDN nastoupí lokální renderer.
|
|
Nejde tedy o úplné odstranění původního vykreslování: je zachované jako oddělená záloha.
|
|
Obě cesty vyžadují WebGL 2; zablokovanou grafiku prohlížeče záloha neobejde.
|
|
|
|
V levém dolním rohu nebo v dialogu **Projekt a podklady** je uveden aktivní renderer.
|
|
Vynucené režimy pro diagnostiku: `index.php?renderer=three` a `index.php?renderer=legacy`.
|
|
|
|
### Volitelně vše z vlastního hostingu
|
|
|
|
Na počítači s Pythonem a připojením k internetu spusťte z kořene balíčku:
|
|
|
|
```sh
|
|
python tools/vendor_three.py
|
|
```
|
|
|
|
Skript stáhne připnuté soubory a jejich relativní závislosti z oficiálního repozitáře Three.js, včetně licence.
|
|
Potom nahrajte vytvořenou složku `locenice/vendor` a upravený `locenice/data/app-config.json`.
|
|
Stahovací skript se nespouští na webu a neslouží jako veřejný instalátor.
|
|
Jeho síťovou část zde kvůli blokovanému připojení nebylo možné ověřit.
|
|
|
|
## Model, projekt a dodané fotografie
|
|
|
|
Stavební geometrie i svažitý terén jsou převzaté z dodaného modelu ALLSTAV v2.
|
|
Neproběhlo nové zaměření ani kompletní přemodelování domu z PDF.
|
|
Kuchyň a obývací prostor dosavadního modelu zůstávají včetně zelených čel, desky, vinotéky, vybavení a trámů.
|
|
Čtyři nově dodané obrázky jsou dostupné v dialogu pro porovnání.
|
|
Obrázky nejsou zaměřené ani mezi sebou zcela shodné; jejich odlišné rámy a dispozice neřídí přesun oken.
|
|
Nejde o fotorealistickou rekonstrukci, BIM, výrobní návrh kuchyně nebo dokumentaci pro stavbu.
|
|
|
|
Výškopis je dostupný jako podklad a lze zapnout jeho body nad 3D modelem.
|
|
Výšková nula je 591,840 m Bpv. Grafické x/z polohy 27 bodů jsou převzaté z dosavadního modelu.
|
|
Souřadnice S-JTSK z geometrického plánu jsou uložené odděleně, nepředstírají souřadnice vytyčení domu.
|
|
Doklad uvádí parcelu 3480/37 o výměře 1 010 m²; dosavadní grafický obrys modelu má 987,89 m².
|
|
Tento rozdíl je uvedený, nikoli skrytě odstraněný deformací modelu.
|
|
Výšky upraveného terénu u domu a původní zaměření nejsou zaměnitelné.
|
|
|
|
## Standardy a sdílení
|
|
|
|
Zachované volby: dveře, parapety, okapy, krytina, žaluzie, podlahy po místnostech, obklady,
|
|
malba, vnitřní dveře, kuchyň, sprcha a další specifikace.
|
|
Žaluzie se týkají devíti obdélníkových otvorů, nikdy trojúhelníku nebo vstupních dveří.
|
|
Výchozí barvy jsou RAL 7016 / antracit / CERN 015 / tmavě šedivá.
|
|
|
|
Na webu je export samostatného HTML nahrazen **odkazem s výběrem**.
|
|
Odkaz otevře tento web s vloženým nastavením. Obsahuje i poznámku pro dodavatele; nevkládejte do ní citlivé údaje.
|
|
Nastavení je ve fragmentu URL za `#`; neukládá se do serverové databáze.
|
|
Zachovaný je export/import JSON, TXT a export viditelného modelu GLB; PNG zachycuje 3D canvas.
|
|
Soubor `models/dum.glb` je kompletní editovatelný zdroj. Export **viditelného výběru** ho nenahrazuje.
|
|
Dosavadní JSON výběry lze importovat. Lokální uložení je pouze v daném prohlížeči.
|
|
Změna výchozích hodnot v katalogu nepřepíše již uložený výběr; použijte tlačítko obnovy výchozích voleb.
|
|
|
|
## Úpravy v Blenderu
|
|
|
|
Soubor `.blend` v balíčku není. Přiložený skript jej vytvoří ve vašem Blenderu:
|
|
|
|
```sh
|
|
blender --background --python blender/prepare_model.py
|
|
```
|
|
|
|
Výsledek: `blender/dum_locenice.blend`. Skript vytvoří pojmenované kolekce a skryje neaktivní varianty.
|
|
Skript zde nebyl spuštěn, protože Blender není v prostředí nainstalovaný.
|
|
Alternativně importujte `locenice/models/dum.glb` do Blenderu ručně.
|
|
Neslučujte vše do jednoho objektu ani materiálu. Zachovejte vlastnosti `loceniceId`, `interiorLayer`, `stdWhen`, `stdBlind` a `windowNode`.
|
|
|
|
Při exportu do GLB zapněte vlastní vlastnosti / **Custom Properties (extras)**.
|
|
Exportujte všechny varianty, nikoli jen viditelné objekty; vypněte filtr **Visible / Renderable / Selected objects only**.
|
|
Pak spusťte:
|
|
|
|
```sh
|
|
python tools/prepare_export.py upraveny_model.glb --out pripraveno
|
|
```
|
|
|
|
Nástroj znovu naváže čísla objektů a materiálů na stabilní ID a doplní celý katalog textur.
|
|
Po záloze webu vyměňte **oba** soubory `models/dum.glb` a `data/scene.json` za připravené výsledky.
|
|
Nástroj byl ověřen na testu s přeházeným pořadím objektů a materiálů, ne na skutečném exportu z Blenderu.
|
|
Transformované objekty po novém exportu vyžadují Three.js; původní záložný renderer je pro takový model odmítne namísto chybného zobrazení.
|
|
Změna dispozice navíc vyžaduje kontrolu kolizních obrysů, poloh žaluzií, podlah a připravených kamer v `data/scene.json`.
|
|
Samotné přejmenování nebo výměna GLB tyto pravidla automaticky nepřeprojektuje.
|
|
|
|
## Soukromí a provoz
|
|
|
|
Balíček obsahuje referenční obrázky a výřezy podkladů v `assets`. Na veřejném webu jsou přímo dostupné.
|
|
Pro neveřejný projekt chraňte **celou složku**, nikoli pouze `index.php`.
|
|
Meta `noindex` není zabezpečení. Aplikace sama nemá přihlášení ani serverové ukládání.
|
|
|
|
## Ověření a omezení
|
|
|
|
Ověřena je syntaxe PHP a JavaScriptu, vracení stránky přes PHP, HTTP cesty a typy souborů,
|
|
struktura GLB, katalog a jeho vazby, změny výběrů a rozložení rozhraní na desktopu i mobilu.
|
|
Testy ovládání použily simulované grafické API. **Nejde o ověření skutečného 3D vykreslení.**
|
|
Zdejší prohlížeč blokuje WebGL i externí knihovny, proto nebyl renderer Three.js plně spuštěn.
|
|
Barevné podání a výkon je potřeba zkontrolovat po nasazení v běžném prohlížeči.
|
|
|
|
Opakovatelná kontrola dat na počítači s Node.js:
|
|
|
|
```sh
|
|
node tests/data_checks.mjs
|
|
```
|
|
|
|
Node.js je zde pouze pro dobrovolný test, nikoli pro hosting nebo běh webu.
|