Kocka görgetés C++/OpenGL

Kocka görgetés C++/OpenGL
2010-05-06T16:38:43+02:00
2010-05-19T13:20:15+02:00
2022-11-17T20:00:38+01:00
johnnyLittle
Sziasztok Mesterek!

A következő problémám adódott: C++-ban kell csinálnom egy OpenGL-t használó progit. Egy kockát kellene görgetnem egy adott pályán. A kocka pontjait és a pálya pontjait egy-egy fájlból olvasom be. A kocka és a pálya is 3szögű polinomokból épül fel. A pálya kisebb méretű téglatestekből áll. A pálya felső lapja (amin görgetni szeretném a kockát) akkora, mint a kocka egy lapja. Nem igazán tudom milyen transzformációkat kellene végre hajtanom, hogy a pályán egyenletesen végig tudjam görgetni a kockámat. Ha valakinek lenne egy épkézláb ötlete, vagy egy érthető leírást tudna mutatni azt nagyon megköszönném!

Előre is Köszi!

LittleJ
Mutasd a teljes hozzászólást!
Nahgyon egyszerű

Fogod a pálya pontjait és lineárisan interpolálsz köztük.

Előtte forgatod a kockát a glRotatef()-el majd a kiszámolt pontba tolod a glTranslatef()-el.
Ha a kocka arányait is változtatnod kell, akkor a glScalef()-et is használhatod. Persze minden lépés elején reseteled a mátrixot, a glLoadIdentity()-vel. Ebben nincs semmi nehéz...

GLUTot használsz?
Mutasd a teljes hozzászólást!

  • Most vagy nagyon triviálisat kérdeztem vagy senki nem akar/tud segíteni!
    Mutasd a teljes hozzászólást!
  • Esetleg tutorialok átnézése?
    Mutasd a teljes hozzászólást!
  • Köszönöm a linket!
    Már egy pár tutorialt átnéztem, de nem találtam megfelelőt számomra, ráadásul időszűkében is vagyok. Valami kézzel foghatóbb megoldás érdekelne! (forráskód/algoritmus)
    Mutasd a teljes hozzászólást!
  • Itt találsz néhány cuccot:

    http://techies.teamlupus.hu/wp-content/uploads/OpenGL/OpenGLprogramo..

    Először azt próbáld ki, hogy egy kockát csak úgy forgatsz. Az egyes csúcspontoknak kiszámítod a koordinátáit, majd a worldwatrixot változtatod a ciklusban. Textúrázni tudsz?
    Ha egy kockát gördíteni akarsz, akkor a világmátrixot nem csak forgatnod kell, hanem odébb is kell tolni (valamilyen translate nevű függvénnyel).
    Akár azt is meg lehet oldani, hogy amikor egy sík (textúrázott) felületen gördíted a kockát,
    egy bizonyos algoritmussal (félszinuszgörbe szerint) fel-le emelgetni lehet a kockát annak a céljából, hogy amikor a kocka egyik sarka legalul van, ne kerüljön a sík alá, amikor pedig az egyik lapján áll, akkor meg érintse a síkot.
    Mutasd a teljes hozzászólást!
  • Köszönöm a linket és a jó ötletet!

    Sajnos már nem volt időm megírni amit tanácsoltál, ma le kellett adni a beadandót, ezért nem forgattam a kockát, hanem ide-oda rakosgattam. És mivel a tetejére tennem kellett még egy kockát, így egy négyzetes hasábot alkottak. Ezért nem is próbálkoztam vele. Egyszerűen a kockák pontjait átírtam a pálya pontjaira attól függően éppen hol vannak éppen. Ha vízszintes állapotba kellett "forgatni" akkor a tömbök indexéhez adtam hozzá 1,2 vagy vontam ki belőle 1,2. Függőlegesbe "forgatást" hasonlóan oldottam meg. A vízszintes "görgetésnél" 1-t vontam ki a mátrix indexéből. Hát kb. ennyi lett volna a feladatom. Mivel a játék élmény így is jó volt ezért elfogadták a beadandót!
    Mutasd a teljes hozzászólást!
  • azt az 50 pötyit nem adod senkinek?
    Mutasd a teljes hozzászólást!
  • Nahgyon egyszerű

    Fogod a pálya pontjait és lineárisan interpolálsz köztük.

    Előtte forgatod a kockát a glRotatef()-el majd a kiszámolt pontba tolod a glTranslatef()-el.
    Ha a kocka arányait is változtatnod kell, akkor a glScalef()-et is használhatod. Persze minden lépés elején reseteled a mátrixot, a glLoadIdentity()-vel. Ebben nincs semmi nehéz...

    GLUTot használsz?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd