Open GL problem z texturowaniem. Tekstury są rozmyte

0

Zacznę od tego że, uczę się nowej wersji Open GL:
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-5-a-textured-cube/

I postanowiłem że, otexturuję boxa tak jak na: (BLENDING)
http://nehe.gamedev.net/tutorial/lessons_06__10/17010/

Tak oto sobie texturę przygotowałem:
http://i.imgur.com/KWejG.jpg

Nawet próbowałem w wymiarach potęgi liczby 2 na przykład 512x512, bo na pierwszych kartach graficznych z akceleracją 3D tylko takie wymiary mogły mieć tekstury. Nawet zmieniałem format pliku z BMP na TGA i nadal to samo. Na myśli mi wpadło, że możliwe używam antyaliasingu, lub jakiegoś wygładzania tekstury. Oto kod:
http://wklej.org/id/907814/

Tak oto wygląda aplikacja w nowym Open GL:
http://i.imgur.com/265hR.png

A oto orginał:
http://i.imgur.com/Qdqz8.png

Po przybliżeniu tekstury nie widzę kwadratowych pixeli, jedynie punkty przypominające gwiazdy :)
http://i.imgur.com/ynDde.png

0

Ale po co chcesz widzieć piksele (właściwie teksele, ale nie ważne)?
Karta domyślnie używa filtrowania. Można wymusić wyłączenie tego (nie podam tak z pamięci przykładu), ale właściwie dlaczego?

Poza tym, twoja tekstura ma 3x3 "płomienie". Tymczasem na jednej ściance kostki używasz tylko jednego z tych płomieni, przez co masz niepotrzebnie nadmierne skalowanie, i stąd rozmycie tekstury.

0
  1. Chciał bym zobaczyć różnice między jednym a drugim,
  2. Tak jak wyżej,
  3. W tutorialu każda ściana miała inną teksturkę, a ja tak jak już pisałem, chciałem zrobić tak jak to w tutorialku NEHE. Nie wiem jak mógł bym dla każdej ściany użyć identycznej tekstury nie używając glBegin(QUAD), 4*glVertex, 4 * glTexCoord, glEnd, bo jak czytałem takie rozwiązanie jest wolne, a nowy Open GL ma VBO i jest szybszy bo nie wywołuje 10 funkcji na jednego QUAD'a
  4. Jak się pozbyć rozmycia tekstury ?
0

nie używając glBegin(QUAD), 4*glVertex, 4 * glTexCoord, glEnd
Jest glVertexPointer, glTexCoordPointer, glDrawArrays/glDrawElements, tak że sposób na zredukowanie ilości wywołań zawsze istniał.

a nowy Open GL ma VBO i jest szybszy bo nie wywołuje 10 funkcji na jednego QUAD'a
Ja myślę że na etapie jednej kostki (a nawet setki) różnica jest na współczesnym sprzęcie całkowicie pomijalna (a na gorszym sprzęcie, np. zintegrowanych kartach intela i tak nie odpalisz GL 3.x więc traci to znaczenie...)

bo jak czytałem takie rozwiązanie jest wolne
No Jakbyś miał milion obiektów to tak...

Nie wiem jak rozwiązać konkretnie twój problem z użyciem jednej tekstury, bo nie zagłębiałem się w kod – patrzyłem tylko na zrzuty ekranu.

  1. Jak się pozbyć rozmycia tekstury ?
    Spróbuj coś takiego:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
0

Z teksturą i jej pixelowaniem sobie poradziłem, ale i tak dzięki :) Jak bym robił particle z użyciem miliona cząstek to jaka może być różnica w wydajności ? Nie mogę znaleźć kompletnie żadnego zastosowanie dla shaderów. Jedynie mi utrudniają życie. Rozumiem że translacje, rotacje czy skalowanie może obciążać CPU i dlatego lepiej to zrobić na GPU. Ale praktycznie jakie jest zastosowanie dla shaderów i jak często się je wykorzystuje i do jakich celów ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1