Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Grafická knihovna OpenGL (3): základní geometrické prvky

Libor Chocholaty
Libor Chocholaty (neregistrovaný)
15. 7. 2003 11:53 Nový

Kde je 3D?

celé vlákno

Proc neni alespon jedna ukazka 3D objektu? Treba dva trojuhelniky se spolecnou hranou nelezici v rovine? Zkousel jsem si do prikladu pridat jeden trojuhelnik zadany pomoci glVertex3i() a nevykreslilo se mi zhola nic.

Pavel Tisnovsky
Pavel Tisnovsky (neregistrovaný)
15. 7. 2003 13:41 Nový

Re: Kde je 3D?

celé vlákno

Přeji pěkný den,

ukázka vykreslování 3D objektů bude uvedena až v dalších částech tohoto seriálu. K tomuto "nepopulárnímu" kroku jsem se rozhodl z více důvodů.

Nejdříve si totiž musíme říct základní informace o tom, jak pracuje vykreslovací řetězec OpenGL. Na první pohled to vypadá jako zbytečnost, ale znalost toho, jak OpenGL vykresluje je dobrá pro řešení mnoha problémů.

Potom je také dobré vědět něco o transformacích a nastavení kamery, protože spousta chyb při programování 3D vzniká z toho, že se kamera dívá někam do pryč a ne na renderovanou scénu.

A zatřetí, si musíme něco říct o zpracování rastrových dat, protože se nám to bude náramně hodit při texturování.

A teď k tomu 3D. Pokud jste vycházel například z prvního příkladu uvedeného v minulém dílu, tak tam po menších úpravách klidně můžete vykreslovat 3D objekty. Je však nastavena ortogonální kamera, takže neuvidíte scénu perspektivně, což je však pro první pokusy stejně lepší.

Potom si všimněte příkazu glOrtho(0, w, 0, h, -1, 1). Tento příkaz určuje šest stěn osově orientovaného hranolu, kde všechny fragmenty ležící mimo tento hranol jsou ořezány. Rovnice stěn hranolu jsou v našem případě: x=0, x=w, y=0, y=h, z=-1, z=1.

Po zadání příkazů:
glBegin(GL_TRIANGLES);
glVertex3i(200, 50,0);
glVertex3i( 50, 250,10);
glVertex3i(350, 250,0);
glEnd();

se NEvykreslí celý trojůhelník, ale pouze jeho část, protože jeden vrchol leží mimo oblast zadanou hranolem a proto jsou některé fragmenty odstraněny.

Můžete však samozřejmě změnit rovnice hranolu, např. takto: glOrtho(0, w, 0, h, -1000, 1000); (ve funkci onResize())

Doufám, že Vám některé z těchto informací pomůžou v dalších pokusech s OpenGL.

Libor Chocholaty
Libor Chocholaty (neregistrovaný)
15. 7. 2003 16:55 Nový

Re: Kde je 3D?

celé vlákno

Diky, nakonec jsem to rozchodil. Jen me prekvapilo, ze vykreslovani probiha smerem do zaporne casti osy z, takze staci dat glOrtho(0, w, 0, h, -100, 0);, pokud maji vsechny vrcholy 0<=z<100.

Pavel Tišnovský
Pavel Tišnovský (neregistrovaný)
16. 7. 2003 10:38 Nový

Re: Kde je 3D?

celé vlákno

Ano, Z-ové souřadnice ořezávacích rovin "near" a "far" pro glOrtho() jsou v našem příkladu negovány. Je to proto, že když kromě funkce glOrtho() nepoužijete žádnou jinou transformaci, je pozice kamery v bodě (0, 0, 0) a kamera se dívá směrem -z.

Alesh
Alesh (neregistrovaný)
18. 11. 2004 14:52 Nový

3D...

celé vlákno

Ahoj vsem,
rad bych jenom reagoval na predchozi prispevek ohledne toho 3D. Ja si myslim, ze nema smysl se hned prvni lekce vrhat do 3D, ktere je precejenom pro predstavu narocnejsi, ale myslim, ze je rozumne se naucit i zakladni veci ve 2D prostoru o OpenGL - jednak je proste dobre vedet co a jak facha uz od zakladu, myslim, ze ve slozitejsich 3D scenach se i timto muze predejit nejakym chybkam, ci nepochopeni daneho problemu a jednak take ne kazdy program delany pod OpenGL musi byt jenom plne 3D, ne? :)) Tyhle clanky o OpenGL jsou fak dost dobry a fandim timto autorovi v dalsi podobne cinnosti a co se tutorialku tyka, pak myslim, ze neni kam spechat, ale je proste lepsi si toho vyvstelit vice, nez mene:)) Cao, hezky den!

Radek
Radek (neregistrovaný)
17. 7. 2007 13:44 Nový

Chyba v kodu

celé vlákno
Mam dojem, ze v prilozenem kodu je chyba. Po glBegin(GL_TRIANGLES) by mel nasledovat pocet vrcholu deliteny tremi. Vy uvadite 4.
Jiří Zapletal
Jiří Zapletal (neregistrovaný) 85.162.164.---
20. 3. 2011 23:01 Nový

Re: Chyba v kodu

celé vlákno

Nedá se to brát jako vážná chyba, vloudila možná omylem, ale alespoň je tu názorná ukázka ignorace nekompletních vrcholů trojúhelníka ;)

Zasílat nově přidané příspěvky e-mailem