.[ ČeskéHry.cz ].
Natoceni objektu podle smeroveho vektroru?
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 16:26:12    Předmět: Natoceni objektu podle smeroveho vektroru? Odpovědět s citátem

Zdravim,mam ted takovy problem.Resim problem se zobrazovanim normal na modelu.Zobrazovani neni problem.Jenze pro identifikaci potrebuju ke kazde normale zobrazit jeji cislo v poradi.Zobrazeni textu neni problem,ale problem je jeho natoceni.Zobrazuje se totiz primo smerem ke me.Takze kdyz objekt otocim o 180 stupnu,tak ten text je zrcadlove obraceny.

Tudiz potrebuju,aby kazde cislo bylo zobrazeno ve smeru normaly vektoru.
Vi nekdo jak natocit text ve smeru vektoru?

Na zobrazeni pouzivam z nehe tutorialu upraveny kod:

kód:

glBindTexture(GL_TEXTURE_2D, fontTexture[0]);         

glEnable(GL_BLEND);
glPushMatrix();
glTranslated(x,y,z);   
glScalef(0.03f,0.03f,0.03f);
glListBase(base-32+(128*set));                  
glColor3f(1.0f,1.0f,1.0f);
glCallLists(strlen(string),GL_BYTE,string);         
glPopMatrix();
glDisable(GL_BLEND);

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 2. leden 2008, 17:14:00    Předmět: Odpovědět s citátem

nejsem si jistej, jestli jsem uplne pochopil tvuj problem, ale nestacilo by rotovat podle jiny osy?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 2. leden 2008, 18:06:31    Předmět: Odpovědět s citátem

ak chces zobrazovat popisky ako je to napriklad s menami v MMORPG tak su dve cesty. bilboarding alebo zistit si poziciu kde sa premieta dana normala v 2D a potom ho vypisat klasicky pomocou 2D koordinatov.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 2. leden 2008, 18:39:04    Předmět: Odpovědět s citátem

presne tak.. akorat ze ja jsem uz predpokladal ten 2D ortho vypis.. a tam si je pak muzes v ty "promitaci rovine" (vim ze to neni presny) narotovat obycejnou glRotate..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 19:42:50    Předmět: Odpovědět s citátem

Billboarding se mi ted zrovna nehodi a to promitani do 2D.To taky moc nechci.I kdyz muzete napsat,jak se prepocitavaji souradnice z 3d do ortho a prinejhorsim to tak zkusim.

Jde mi spise o tohle jak je na obrazku nakreslene.

Carkovana je priblizny smer normaly.

Proste natocit to pismo ve smeru te normaly.Akorat netusim,jak slozity tam budou vypocty.Ty smery tech normal mam,jen to musim natocit.


Naposledy upravil Master dne 2. leden 2008, 20:23:17, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 2. leden 2008, 20:15:32    Předmět: Odpovědět s citátem

obrazek se nepoved.. teda aspon mne se nezobrazi...

jinak prepocitani 3D bodu do 2D roviny je docela dobre popsano na wikipedii (http://en.wikipedia.org/wiki/3D_projection).. a myslim ze v glu/glut je na to primo naka funkce..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 20:23:58    Předmět: Odpovědět s citátem

Obrázek sem hodil na jinej hosting,tak snad uz to bude viditelne.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 2. leden 2008, 20:32:45    Předmět: Odpovědět s citátem

no ja bych spocital dva body ty normaly (nejspis stred polygonu a pak konec vektoru), a vemes jak moc ta 2D primka stoupa, a z toho mas uhel..

no proste prevyst ten 3D vektor na 2D a z toho uhel..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 20:57:53    Předmět: Odpovědět s citátem

1, Prevod na ortho uz mam,jen se mi ted vykresluji vsechny cisla vcetne tech,ktere jsou za objektem.Je nejaky enum pro glDisable,ktery prestane vykreslovat ty texty za objektem?Ale mam spis pocit,ze to budu muset rucne kontrolovat jeste pred vykreslenim.

2, Stred plochy a konec normaly mam spocitany jak vidis,jinak bych nevykreslis ty normaly.
Jak rikas,spocitat stoupani.Mas to na mysli:

kód:

    /Y
  / |
/a  |
.....x


a - uhel alfa
Y - konecny bod normaly

No z tohodle vidim,ze musim vzit Y,a presunout ho na stejne rovinu s puvodnim bodem ve stredu trojuhelnik a mezi temito vektory spocitat uhel.
Pochopil sem to spravne?Nebo klasickym sinem zjistit rozdil y - x/prepona?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 2. leden 2008, 21:11:16    Předmět: Odpovědět s citátem

ty potrebujes ziskat ten uhel v rovine, takze akorat vyresis ten trojuhlenik (znas obe odvesny a potrebujes uhel..) a mas pozadovanou hodnotu.. akorat musis dopsat aby se nezobrazovaly texty za objektem (neslo by to obejit tak ,ze by si nechal zaplej depth buffer?) a aby text nad 180° nebyl vzhuru nohama.. (teda pokud to tak nechces Smile)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 21:15:17    Předmět: Odpovědět s citátem

S tim Z-bufferem to zkusim.S tim natocenim si jeste pohraju
Dik za rady
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
posila



Založen: 29. 07. 2007
Příspěvky: 201

PříspěvekZaslal: 2. leden 2008, 22:03:48    Předmět: Odpovědět s citátem

Imho se to spocita uplne stejne jako billboardy, kdy vlasne trojuhelnik billboardu je vzdy kolmy k LookAt vektoru kamery... takze misto LookAt vektoru pouzijes tu normalu, ktere cislo prislusi...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Master



Založen: 28. 08. 2007
Příspěvky: 35

PříspěvekZaslal: 2. leden 2008, 22:55:22    Předmět: Odpovědět s citátem

Tak delam to pres ten prevod do ortho soustavy.Ale ani za boha se nemuzu dopracovat k tomu,aby ty cisla,ktere jsou vzadu nebyly videt.Porad se tam zobrazuji a neda se v tom vyznat.Jak mam upravit kod na to vykreslovani textu,aby se to tam konecne nezobrazovalo?

kód:

glEnable(GL_BLEND);
   glEnable(GL_DEPTH_TEST);
   glMatrixMode(GL_PROJECTION);                  // Select The Projection Matrix
   glPushMatrix();                              // Store The Projection Matrix
   glLoadIdentity();                           // Reset The Projection Matrix
   glOrtho(0,windowSize[0],0,windowSize[1],-1,1);                     // Set Up An Ortho Screen
   glMatrixMode(GL_MODELVIEW);                     // Select The Modelview Matrix
   glPushMatrix();                              // Store The Modelview Matrix
   glDisable(GL_LIGHTING);
   glLoadIdentity();                           // Reset The Modelview Matrix
   glTranslated(x,y,0);                        // Position The Text (0,0 - Bottom Left)
   glListBase(base-32+(128*set));                  // Choose The Font Set (0 or 1)
   glColor3f(1.0f,1.0f,1.0f);
   glCallLists(strlen(string),GL_BYTE,string);         // Write The Text To The Screen
   glMatrixMode(GL_PROJECTION);                  // Select The Projection Matrix
   glEnable(GL_LIGHTING);
   glPopMatrix();                              // Restore The Old Projection Matrix
   glMatrixMode(GL_MODELVIEW);                     // Select The Modelview Matrix
   glPopMatrix();                              // Restore The Old Projection Matrix
   //glDisable(GL_DEPTH_TEST);
   glDisable(GL_BLEND);


Musi se jeste neco specialniho nastavovat u toho depth testu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MePHyst0



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: SVK/CZK

PříspěvekZaslal: 3. leden 2008, 09:37:56    Předmět: Odpovědět s citátem

no samozrejme ze ked budes tym textom v ortho davat ako Z nulu tak sa ti to nebude prekryvat, vsetky budu uplne vpredu pred vsetkym. ak chces aby ti tie texty spravne fungovali s depth bufferom tak ich musis kreslit normalne 3D v perspektivnej projekcii. ak chces ist cez ortho projekciu, musis si to prekryvanie vypocitat sam, teda si stiahnes depth buffer a vyberes z neho hodnotu na mieste kde chces kreslit text, pozres sa ci tato hodnota je mensia ako "depth hodnota" toho textu(tu si tiez vytiahni z depth bufferu bude v strede trojuholniku trebars) a iba ak tento rucny depth test presiel tak vykresli font. good luck
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 3. leden 2008, 10:16:01    Předmět: Odpovědět s citátem

Jak řekl MePHyst0, depth test ti moc nepomůže, protože bys musel nastavovat pro každý vertex souřadnici Z a za druhé je to stejně k ničemu, protože rozložení hodnot u kolmé projekce je v zbufferu lineární, zatímco v perspektivní projekci je logaritmické (tzn. u bližších objektů je mnohem přesnější). Ono by to samozřejmě šlo udělat i bez stahování zbufferu do RAM. Wink

Máš 2 způsoby, jak to řešit:
1) Řešíš ve 3D. Z úsečky normály zkonstruuješ čtyřúhelník, úsečka bude zároveň osou toho čtyřúhelníku a bude jím procházet. Musíš ho natočit ke kameře, ale ne tak jako billboard, budeš ho rotovat pouze kolem normály - normála tady bude rotační osa. Nakonec to vykrelíš ve 3D se zapnutým depth testem. Tip: Abys věděl, jak to máš přesně natočit, využij normálu toho billboardu.
2) Když musíš mít výstup ve 3D kvůli zbufferu, tak to ještě neznamená, že nemůžeš většinu výpočtů dělat ve 2D. Wink Využiješ tzv. matice přechodu, tzn. máš matici M = (ortho matice^-1)*(perspektivní matice). Libovolný bod (zadaný relativně k pozici kamery) ve 3D převedeš do 2D tak, že ho tou maticí vynásobíš. Pro opačný převod ho vynásobíš maticí M^-1, ale to asi ani nebude potřeba. Výhoda tohoto přístupu je, že si ti zachová správná souřadnice Z pro zbuffer a můžeš konstrukci čtyřúhelníku řešit ve 2D a taky ho ve 2D zobrazit, aniž bys měl problém se zbufferem (ovšem nějaké malé nepřesnosti tam kvůli linearitě zbufferu přesto budou, nicméně nic ti nebrání to převést zpět do 3D, pokud to bude nezbytně nutné).
_________________
AMD Open Source Graphics Driver Developer


Naposledy upravil Marek dne 3. leden 2008, 11:07:22, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna