Kezdőoldal » Számítástechnika » Programozás » Hogy szokás ezt OpenGL-ben?

Hogy szokás ezt OpenGL-ben?

Figyelt kérdés
Van egy tér, sok objektum kirajzolva. Ha egy esemény hatására csak egy objektumot akarok mozgatni, akkor annak minden vertexét módosítanom kellene? Ha ez nagyon sok elem, akkor nem túl számításigényes művelet ez? Olyan megoldásra lenne szükségem, amivel explicit megkapom a model új pozíciójának koordinátáit, hogy meg tudjam állapítani ütközött-e egy másik objektummal.

2020. máj. 25. 22:12
 1/7 A kérdező kommentje:
Illetve ha rajzolok mondjuk blenderben egy modelt, akkor annak a koordinátái ugye [-1;1] intervallumba fognak esni. Mennyire jó megközelítés az, hogy a sebességet, méretet egy felfogható számként kezelem, emellett a tér is egy kézzelfogható szám lenne, és ezeket osztanám le mindig a [-1;1]-es tartományra?
2020. máj. 25. 22:19
 2/7 anonim ***** válasza:

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.


[link]

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.

2020. máj. 25. 22:48
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Az ütközés figyelés egy külön témakör, ezt jó esetben egy grafikus motor szolgáltatja, ha van.

[link]

[link]


És igen, a grafikus kártya (avagy GPU) hardveresen, igen gyorsan megoldja a transzformációkat.

[link]

2020. máj. 25. 23:11
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

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).

2020. máj. 25. 23:44
 5/7 anonim ***** válasza:

"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."

:)))

2020. máj. 26. 13:38
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:

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.

2020. máj. 26. 14:26
 7/7 anonim válasza:

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.

2020. jún. 5. 21:15
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!