programming_tutorials/wip/20_sdl_opengl_game_3/ea.txt

94 lines
2.6 KiB
Plaintext

------------------
- Model View Matrix
Objektumot (Egy objektum vertexit) a világba
- Projection Matrix:
Ha a camera mátrix identitás: x: -1, 1, y: -1, 1, z: -1, 1
ebből (is) következik:
x: -1, 1
y: -1, 1
z: -1, 1
kockába ami van azt rajzolja ki az opengl
azaz mninden vertexet úgy mozgat a camera world mátrix, hogy ebbe legyen bent (amikor látszik)
- Egér koordináták 3d világba átszámolása
Azaz a 3d világ koordinátát akarjuk megkapni képernyő koordinátákból.
Először a képernyő koordinátákat át kell számolni -1,1 -1,1 közé
Majd a camera mátrix műveletének az ellentettjét kell elvégezni -> inverz mátrix
És ha egyenest akarunk: Ugyanez még egyszer, csak a z-n elmozgatva valamennyivel -> két pont (Raycasting)
- Egér koordináta 2d-ben / Orthografikus kamerával:
Az előző módszer ugyanúgy működik 2dben
De sokszor egyszerűbben is kel lehet számolni kézzel, pl ui nál, ha tudjuk a koordináta renszert
ált direktbe át lehet számolni a képernyő koordinátákat
-------------------
Pixel Perfect rendering:
A koordináta rendszerünket pixelméretben adjuk meg, és mindent intekké kerekítünk, amikor csak lehet.
----------------------
UI
Fő kamerával rajzolva:
Mindíg oda van rakva a kamera elé rajzolás előtt.
Saját kamerával rajzolva:
Valamelyik sarok ki van kiáltva 0, 0 nak -> bal felső vagy alső ált.
Kamera rá van állítva, és a fő kamera rajzolása után ez a képre rá van renderelve.
----------------------
UI Koordináta rendszer
Low res uinál lehet pixel perfekten
De például lehet azt is mondani, hogy a magasság mindíg 100 egység legyen, és a szélességet változtatjuk a képarány szerint,
így gyakorlatilag képmagasság százalékban tudjuk elhelyezni az elemeket.
-------------------
3d/fps camera strafe
cross produkt -> vektoriális szorzat
up vektor + forward vektor
forward vektor -> ha azt mondjuk, hogy x+ fele néz a karakter/kamera, akkor a (1, 0, 0) vektort elforgatjuk a karakter/kamera
rotation vektorában tárolt fokokkal.
--------------------
Ütközés viszgálat
Sok módszer van.
pl:
Tilemapnál lehet viszgálni direkte a tile-kat, pl amikor a karaktert mozgatni akarjuk, és olyan tilére lépne, amire nem lehet akkor nem engedjük mozogni.
Itt az a gond, hogy változó fps-nél néha tavolabb áll meg a karaketer egy faltól. -> Csinálhatjuk több lépésben.
Mindkét módszernél másik probléma, hogy egy lépés ha túl nagy át lehet menni falakon. Pl Super Mario 64 speedrunok is használnak ilyeneket.
Elég nagy sebességnél, lehet több részre bontani etc.