This shows you the differences between two versions of the page.
|
pgapi:teme:2025:01 [2025/11/13 12:55] andrei.lambru created |
pgapi:teme:2025:01 [2025/11/13 21:12] (current) silviu.stancioiu00 [Reflexiile incaperii pe ecran] |
||
|---|---|---|---|
| Line 31: | Line 31: | ||
| ===== Artificiile de ecranul televizorului ===== | ===== Artificiile de ecranul televizorului ===== | ||
| - | @Silviu | + | Ecranul televizorului va afișa constant un show de artificii. Pentru aceasta se va folosi un framebuffer în care se va desena un sistem de particule configurat astfel încât să arate ca niște artificii. Textura de culoare din framebuffer va fi afișată pe ecranul televizorului. |
| + | |||
| + | Sistemul de particule va avea următorul comportament: | ||
| + | * Se va alege o culoare random a particulelor, iar toate particulele din sistem vor avea aceeași culoare. | ||
| + | * Toate particulele vor porni de la acceași poziție inițială și vor avea aceeași viteză inițială care le va face să se ducă în sus. | ||
| + | * În orice moment particulele sunt afectate de gravitație. Particulele care au fost lansate se vor ridica până în punctul in care viteza lor pe verticală devine 0 (sau mai mică decât 0) din cauza gravitației. În acel punct vor exploda pe direcții random (se poate folosi o functie de generat numere pseudo-random între 0 și 1 în GLSL care să primească ca input gl_VertexID. Aceste numere pot fi folosite pentru componentele unui vec3, care după normalizare să reprezinte direcția). | ||
| + | * Viteza de după explozie a particulelor va fi pe direcția calculată anterior, înmulțită cu o valoare aleasă aleator (magnitudinea acesteia). | ||
| + | * Particulele vor avea toate un lifetime, care va fi același pentru toate particulele. Când expiră lifetime-ul acestora, sistemul de particule se resetează și show-ul de artificii o ia de la capăt. | ||
| + | |||
| + | Sistemul de particule pentru artificiile folosite în demo: | ||
| + | |||
| + | {{ :pgapi:teme:2025:fireworks_gif.gif?300 |}} | ||
| ===== Reflexiile incaperii pe ecran ===== | ===== Reflexiile incaperii pe ecran ===== | ||
| - | @Silviu | + | Din centrul televizorului se va randa întreaga scenă (mai puțin televizorul și ecranul acestuia) într-un cubemap. Obiectele desenate în acest cubemap nu este necesar să casteze și umbre. Totuși, iluminarea lămpii trebuie să fie prezentă. |
| + | |||
| + | {{ :pgapi:teme:2025:room_cubemap.gif?300 |}} | ||
| + | |||
| + | Pe ecranul televizorului se va folosi acest cubemap pentru a reflecta încăperea (vezi [[pgapi:laboratoare:06|]]) | ||
| + | |||
| + | {{ :pgapi:teme:2025:tv_reflection.png?300 |}} | ||
| + | |||
| + | Pentru ca televizorul să afișeze și show-ul de artificii, dar și reflexiile se va face o interpolare liniară între culorile preluate din cele două texturi (textura în care se randeaza artificiile și cubemap-ul reflexiilor) cu un factor de interpolare constant (ex: 0.25). Exemplu de implementare: | ||
| + | out_color = mix(texture(color_texture, uv), texture(texture_cubemap, cubemapDir), 0.25); | ||
| + | | ||
| + | Pentru combinarea celor două texturi vă puteți juca cu formula folosită pentru a obține ce rezultate vreți, dar important este ca pe suprafața ecranului să fie prezente și reflexiile și artificiile. | ||
| ===== Iluminare ===== | ===== Iluminare ===== | ||