Rozmazujące się sprity (Opengl/SDL)

0

Witam
A więc mam grę napisaną w SDL/Opengl i zmienne przechowujące pozycje sprita mają typ float(żeby timer dobrze działał). Jednak przez to, podczas poruszania się sprita, lekko się on rozmazuje... Jak temu zaradzić? Próbowałem anty aliasing, nie pomógł. Przyczyną jest zapewne to że postać spoczywa na ułamkach pikseli na monitorze a nie na całych, ale jak już wspomniałem wcześniej, tak musi być. Więc jakby miał ktoś jakiś pomysł to byłbym ogromnie wdzięczny za pomoc

0

Przeskaluj współrzędne w macierzy projekcji w OpenGLu tak, żeby jednostką był dokładnie piksel, a potem przed rysowaniem zaokrąglaj współrzędne do liczb całkowitych.

0

W glOrtho ustawić długość na 1 i szerokość na 1, tak? Na razie piszę grę 2d więc szczerze mówiąc nie za bardzo ogarnąłem opengl ;p, ale jak już się wezmę za gry 3d to się nie obejdzie...

1

Nie. Jeśli masz szerokość ekranu 500 pikseli to w glOrtho też daj szerokość 500, a potem skaluj sobie sam współrzędne i zaokrąglaj.

0

tak miałeś rację, wielkie dzięki ^^, wstawilem ejszcze glViewport z takimi samymi wymiarami jak w glOrtho

0

a mam jeszcze male pytank bo nie moge znaleźć w necie. Jak sprawdzić rozdzielczość na danym komputerze przy pomocy SDL'a lub Opengl'a?

0

OpenGL nie udostępnia takiej funkcjonalności ZTCW. A SDLa nie znam.

0

hmm jest jeszcze jeden problem: okienko jest tworzone z rozmiarami 800/450, rozdzielczosc ekranu to np 1280/1024
Ustawiam dlugosc i szerokosc w glOrtho i glViewport na 1280/1024. Problem polega na tym ze teraz wspolrzedna y postaci = 0 to 574 w grze. Tak jakby wysokosc okienka gry rozpoczynalo sie od 574 pixela i konczylo na 1024. Cos zle zrobilem czy to normalne?

1

Do glOrtho masz podawać takie same parametry (wysokość, szerokość) jak do glViewport - uwaga parametry do glOrtho i glViewport nie oznaczają tego samego, glViewport przesuwa środek układu współrzędnych i obcina grafikę po bokach, a w glOrtho ustawiasz jakie mają być współrzędne poszczególnych boków viewportu oraz ustalasz zakres głębokości pokazywanych pikseli. OpenGL nie interesuje jaka jest rozdzielczość ekranu bo przecież rysujesz tylko po viewporcie.

W twoim wypadku jeżeli masz okno 800 x 450 (tzn obszar dla którego masz kontekst OpenGL) to po prostu ustaw:

glViewport(0, 0, 800, 450); // 0, 0 a więc nie przesuwa środka, jest on w lewym dolnym rogu
glOrtho(0, 800, 0, 450, zNear, zFar); // tutaj ustawiamy macierz przekształceń tak, że jednostką długości jest piksel

lub coś w ten deseń.

0

Dzięki wielkie, rozjaśniłeś mi te 2 funkcje lepiej niż w tutkach. Teraz jest idealnie ^^, postać się nie rozmazuje ale ma lekkie drgawki podczas ruchu po przekątnej. Czy temu też można zaradzić w jakiś sposób?

0

Tzn jakie drgawki? Jakie podajesz parametry zNear i zFar? Zbyt duży współczynnik zFar/ zNear może prowadzić do różnego rodzaju degeneracji (na pewno jeśli chodzi o testy głębi) - wszak floaty mają mocno ograniczoną precyzję. Chociaż mało prawdopodobne, że to powoduje drgawki.

0

tzn ze ukośnie nie chodzi tak idealnie płynnie jak poziomo lub pionowo. Chociaż to jest mało zauważalne więc szczerze mówiąc można to już ominąć ^^. Wielkie dzięki jeszcze raz za pomoc

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