Hogy szokás ezt OpenGL-ben?
Aúúúú. Hát, van még mit tanulnod számítógépes-grafika témakörből.
Számításigényes művelet...: a gpu úgy van elkészítve, hogy kezelje a nagy számításokat. Ezért van benne vertex shader, pixel shader, geometry shader... Az egész színtiszta matematika magas szinten.
Mozgatás, forgatás, átméretezés...: nem mondtál nyelvet, de mondjuk feltételezem, hogy c++, mert azzal gyakori az opengl. Felül kell definiálnod az operátorokat, hogy a megfelelő matematikai műveletet végezzék. Minden objektumváltoztatás lényegében egyenlő azzal, hogy a vektorod megszorzod egy kiszámított transzformációs mátrix-szal.
Itt olvasgathatsz róla sokat, bár elég nyersen van fent, nem önálló leírás, inkább kiegészítés előadásokhoz. De fent vannak az előadások is valahol.
Vagy rosszul fogalmazok, vagy nem sikerült megérteni amit kérdeztem.
#2: Össze-vissza beszélsz. Nem írtam nyelvet, mert a kérdésemnek semmi köze a nyelvhez. De igen, c++ban íródik a kódnak azon része, amelyik a CPU-n fut. A GPU úgy van elkészítve, hogy a sok mag miatt a jól párhuzamosítható feladatokat gyorsan meg tudja oldani. Pont. Egy játék fizikája, játéklogikája, ütközésdetektálása nem a GPU-n fog futni, így teljesen felesleges felsorolni milyen shaderekre emlékszel egy előadásról. Az összefüggés amit írsz az operátortúlterhelés és a GPU-n futó shader (ami mellesleg GLSL) között pedig egy nagy marhaság. Szerintem Te magad sem érted.
#3: Nem az ütközésdetektálás a kérdés :) Arra van egy bounding box, és egy algoritmus, ami képes koordináta alapú konvex poligonok átfedésének ellenőrzésére.
Másrészt ha csak azért elviszem az összes adatot a GPU-ra, hogy az kiszámolja amit nekem kell, akkor az adatok utazgatásáig a CPU elmehet malmozni.
A hozzáértő válaszokat továbbra is várom (valójában itt egy best practice-re vagyok kíváncsi).
"Nem az ütközésdetektálás a kérdés :)"
Akkor idézlek:
"hogy meg tudjam állapítani ütközött-e egy másik objektummal."
:)))
1) Hogy lehet a leghatékonyabban mozgatni kizárólag 1, vagy több speciális modellt a leghatékonyabban anélkül, hogy a teljes teret mozgatnám, és úgy, hogy még a kirajzolás előtt ismerjem az új pozíciókat.
2) Ezt arra fogom felhasználni, hogy lefusson rá az algoritmusom.
1) szükséges a 2)-höz. 1)-t kell megoldni, hogy a 2) működjön. Nem azt mondtam, hogy a 2)-re adj megoldást, csak ismertettem a kontextust. Nem kell játszani a hülyét.
Szia,
Mi lenne ha a blenderes objektumbol csak 1 pontot választanál ki és azzal számolnád a bounding box-os/bounding sphere-es ütközéseket? Nem kell úgy sem az összes csúcs valójában mivel nem egy teljesen általános mesh collidert akarsz írni.
Tehát pl. egy betoltesz valamilyen modellt, kiszámolod a legkisebb illetve legnagyobb x,y,z koordinátákat. Ebből pedig kitudod számolni a bounding box középpontját meg szélességét magasságát mélységét. És aztán csak ezekre alkalmazod a modelmátrixot.
Ha tok általános mesh collidert akarsz csinálni akkor kell csak az összes csúcsra megcsinálni a model mátrix szorzást. Általában az viszont már compute shaderen megy vagy pedig cpu-n történik de csak low poly modellekkel, amelyek majd csak a hardware tesszellációkor lesznek csúnya szögletesek helyett szép simák.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!