Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
dadajax
Založen: 29. 07. 2007 Příspěvky: 26
|
Zaslal: 2. září 2007, 17:27:22 Předmět: Začátky v OpenGL |
|
|
Nakonec teda přecházím na OpenGL, ale vyskytlo se několik problémů které mi nejsou úplně jasné.
1) Když jsem používal jen SDL, vykresloval jsem jen okolí hráče. Teď ale nevím jestli by to bylo v OpenGL správné. Napadlo mě, že lepší řešení by bylo celou mapu vykreslit při inicializaci, a potom už jen pohybovat kamerou. Protože hra by měla být 2D, používám k zobrazování gluOrtho2D(). Pro pohyb s kamerou bych chtěl použít funkci gluLookAt(), jenom mi není jasné několik věcí:
-první 3 parametry značí souřadnice kamery. Chápu že při pohybu hráče budu měnit hodnotu x a y, jen nevím jaká má být hodnota z? Když používám gluOrtho2D tak je nastavena ořezávací rovina near na -1, takže bych měl použít nějakou hodnotu menší než -1 ?
-další 3 parametry jsou souřadnice bodu na který se kamera dívá, takže pokud tomu rozumím dobře, měly by být shodné s prvními třemi parametry (až na hodnotu Z)
-poslední 3 parametry nechápu vůbec, proto budu rád když se mi to pokusíte nějak "jednoduše" vysvětlit
2)Nakreslil jsem čtverec který jsem otexturoval, ale výsledek je ten, že místo čtverce mám obdélník. Zjistil jsem že je to závislé na poměru stran okna a čtverec se vykreslí jen pokud je poměr stran 1:1. Hledal jsem kterým příkazem se to upravuje, ale bohužel jsem nic nenašel.
No a nakonec bych se chtěl zeptat jestli nevíte o nějakých dobrých článcích o tvorbě 2D her pomocí OpenGL? Doteď jsem čerpal z NeHe tutoriálů a článků na Rootu. |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 2. září 2007, 17:35:10 Předmět: |
|
|
1) namiesto gluLookAt mozes pouzivat normalne glTranslate a glRotate - skus si, co to spravi:
kód: |
glTranslatef(5,5,0); //nastavis "kameru"
for() { // vykresli objekty
glPushMatrix();
glTranslatef(panak[i].pos);
glRotatef(panak[i].rot);
nakresliPanaka();
glPopMatrix();
} |
2) precitaj si manual k gluOrtho2D a glViewport a vyskusaj si co to robi
- hra je sice 2D, ale objekty vykresluj s roznou Z suradnicou, aby sa ti spravne zoradili na/pod seba. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
igor
Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 2. září 2007, 17:45:28 Předmět: |
|
|
1) Klidne muzes vykreslovat jen okoli hrace, muzes k tomu pouzit normalni zastaraly immediate mode - glBegin glEnd zpusob (v jednoduche 2D tile-based hre by vyhody jinych zpusobu mely byt zanedbatelne, ale muzes to zkusit i napr. pres vertex arrays, nebo level rozdelit na ruzne vetsi ctverce a vykreslovat najednou jen ty potrebne).
Ve 2D doporucuji pouzivat spis glTranslate nez gluLookAt (ta ma jako parametry bod, ve kterem se nachazi kamera, bod, na ktery se "diva" a vektor, ktery smeruje nahoru - napr. pri kamere a bodu na ktery se diva lezicich na plose se stejnym y, je ten vektor v "normalnim" pripade 0 1 0 - muzes si jej predstavit jako vektor, ktery smeruje "od brady k celu")
2) Musis mit spravne nastavene okno, gluOrtho2D a glViewPort |
|
Návrat nahoru |
|
|
dadajax
Založen: 29. 07. 2007 Příspěvky: 26
|
Zaslal: 3. září 2007, 11:35:07 Předmět: |
|
|
Díky za rady, už mám nějakou matnou představu jak to udělat, tak uvidíme jestli to vyjde. Teď už konečně chápu i tu funkci gluLookAt, ale raději vás poslechnu a budu používat glTranslate..
EDIT: Super, už to funguje jsem v tom hledal zbytečné složitosti..teď už jen doladím pár maličkostí a je to. |
|
Návrat nahoru |
|
|
|