Autor Wątek: GL_TEXURE_3D a Coordynaty :/  (Przeczytany 1496 razy)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 24, 2009, 03:11:48
Moj problem polega na tym ze mam hightmape ladowana z pliku bmp coordy s,t ustaiwam jako s = x_mapy ktore rosnie do max_x_mapy; tak samo dla z no i teraz pytanie jak ustaiwac R dla layerow textury 3d przeszperalem juz cale google i nie potrafie sobie z tym poradzic aby texura zmieniala sie wraz z wysokoscia mapy :/ korzystam oczywiscie z VBO wiec laduje coordy jako:

pglGenBuffersARB(1,&VBOCoords);
pglBindBufferARB(GL_ARRAY_BUFFER_ARB,VBOCoords);
pglBufferDataARB(GL_ARRAY_BUFFER_ARB,vertexCount*texd*sizeof(float), coords, (StreamDraw ? GL_STREAM_DRAW_ARB : GL_STATIC_DRAW_ARB));

glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, (__CoordsB[0] ? VBOCoords : VBOCoordsB) );
glTexCoordPointer( texd, GL_FLOAT, 0, (char *) NULL );

Jezeli ktos jest w stanie mnie naprowadzic jak obliczac coordy w texturach 3d to bylbym naprawde szczesliwy :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 24, 2009, 03:17:16
O ile texd=3, to powyższy kod wygląda jak najbardziej w porządku.

Cytuj
no i teraz pytanie jak ustaiwac R dla layerow textury 3d przeszperalem juz cale google i nie potrafie sobie z tym poradzic aby texura zmieniala sie wraz z wysokoscia mapy :/
Dosyć kiepski pomysł z wykorzystaniem tekstur 3D do tego - mipmapy zrobią Ci z takiej warstwowej tekstury 3D dosyć niezłą masakrę (warstwy pozlewają się ze sobą wraz z odległością). Oczywiście można wyłączyć mipmapy, ale to z kolei zrobi jeszcze większą masakrę z wydajnością rysowania. :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 24, 2009, 03:25:00
tzn chodzi mi o to ze jezeli textury nie powtarzam to ejst ok rysuej sie tak jak powinna no ale wlasnie rozdzialka jest straszna a jak jest powtarzalna no to dziwne rzeczy sie dzieja ;D

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 24, 2009, 04:00:12
tzn chodzi mi o to ze jezeli textury nie powtarzam to ejst ok rysuej sie tak jak powinna no ale wlasnie rozdzialka jest straszna a jak jest powtarzalna no to dziwne rzeczy sie dzieja ;D
No to masz odpowiedź - użyć innej metody nie polegającej na teksturach 3D. :)

Offline voytech

  • Użytkownik

# Luty 24, 2009, 09:32:05
Jezeli ktos jest w stanie mnie naprowadzic jak obliczac coordy w texturach 3d to bylbym naprawde szczesliwy :)

R chyba powinno być w zakresie od 0.0 do 1.0. Chociaż nie. Może lepiej będzie troszkę zejść poniżej zera (-0.1 .. 1.1), albo nie, od 0 do 1, i koniecznie ustawić clampowoanie dla R:
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP)dla pozostałych S i T oczywiście zostawić GL_REPEAT.

Co do generowania R, to trzeba być może zastosować obszary wysokości o takich samych koordynatach R. Np. gdy mamy 4 warstwy, to wówczas punkt o koordynatach 0.0 określa teksel z pierwszej warstwy, punkt o koordynatach 0.25 wybiera drugą warstwę, itd.

Jeżeli masz height mape o wysokości np. 1000 (metrów?) to wszystkim wierzchołkom o Z od 0..300 przypisujesz koordynatę R=0. Dzięki temu pewien zakres wysokości powinien być teksturowany tylko z jednej warstwy. Może coś z tego wyjdzie.

Wierzhołki od 310..600 będą mieć wartość R=0.25, a te między 300..310 mogą być interpolowane od 0 do 0.25.


Oczywiście nie mam pojęcia czy to zadziała. Teoretyzuje sobie tak tylko :), nigdy tego nie sprawdzałem, ale spróbował bym na początku taką właśnie metodę, generowania koordynat dla współrzędnej R.

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 24, 2009, 10:30:45
Cytuj
Oczywiście nie mam pojęcia czy to zadziała.
Nie zadziała, z przyczyn wyjaśnionych wcześniej (mipmapy). :)

Offline voytech

  • Użytkownik

# Luty 24, 2009, 21:57:19
No to chyba lepiej by pasowały Texture Arrays, ale rozszerzenie  to jest dopiero dostępne w OGL3.0. Wymagane GeForce w serii co najmniej 8. U mnie leciwy już GeFroce Go 7900GTX ledwo zipie, więc tablice tekstur raczej nie pójdą.

To już chyba lepiej będzie podpiąć już te kilka tekstur terenu i sobie w szaderze samplować z wybranej jednostki na podstawie wysokości. Nawet by można było tworzenie buforów dla koordynat usunąć, bo można je łatwo wygenerować vertex szaderze.


Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 24, 2009, 22:14:42
Problem poniekad roziwazalem rzeczywiscie krzysiek mial racje moj problem polegal na mipmapach :] r liczylem dobrze (z proporcji wysokosci wzg ilosci layerow) teraz jest juz ok :) no i rzeczywiscie chcial bym urzyc texture arrays ale nie mam na to sprzetu wiec pozostane przy texturach 3d :]

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 25, 2009, 00:09:18
Cytuj
nie mam na to sprzetu wiec pozostane przy texturach 3d :]
To jak obejdziesz problem z mipmapami? :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 25, 2009, 00:47:45
http://www.warsztat.gd/screens.php?x=view&id=3219 <- juz obeszłem ;d powiedzmy ze uzywam o ile to mozliwe "selektywnego dobierania mipmap tak aby jak najwieksza czesc terenu byla widoczna a jezeli to nie pomaga program zmniejsza jakosc ziwekszajac badz zmniejszajac ilosc 'powtarzalnosci textury w terenie " daje to dosc dobry efekt :) przynajmniej mnie zadowala bez znacznej straty jaksci caly obszar widoczny jest w stanie sie dobrze renderowac :)

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 25, 2009, 00:53:23
Cytuj
daje to dosc dobry efekt :)
Przyglądając się screenowi, to bym trochę z tym polemizował. W szczególności trochę się te tekstury aliasują tu i tam (wyłączyłeś mipmapping?) co sugeruje że marnujesz nieco wydajności karty. :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 25, 2009, 01:21:06
mipmapping jak najbardziej jest :] dokladnie GL_LINEAR (czyli w sumie tak jakby nie bylo xD) nie bede ukrywal bo napisalem to juz wczesniej za wydajne to to nie jest, no ale gdzie tam jeszcze do konca ;p a optymalizacje narazie to ma zerowe... z tym aliasingiem masz racje no ale i tak parę sztuczek zastosuje by to zniwelowac :]
« Ostatnia zmiana: Luty 25, 2009, 01:23:10 wysłana przez .:NOXY:. »

Offline Krzysiek K.

  • Moderator
    • DevKK.net

# Luty 25, 2009, 01:33:26
Cytuj
mipmapping jak najbardziej jest :] dokladnie GL_LINEAR (czyli w sumie tak jakby nie bylo xD)
Filtrowanie GL_LINEAR, a nie mipmapping liniowy, bo z tego co pamiętam w OpenGL to ustawia się jednocześnie, więc mipmappingu po prostu nie ma (a to baaardzo źle). :)

Cytuj
z tym aliasingiem masz racje no ale i tak parę sztuczek zastosuje by to zniwelowac :]
A nie lepiej zamiast sztuczek po prostu zrobić to porządnie tak jak trzeba? :)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Luty 25, 2009, 02:07:35
Jak sie naucze to zrobie ;D