2013-04-29 24 views
9

Bardzo mały odsetek (< 1%) moich użytkowników doświadcza dziwnych zniekształceń dzięki interfejsowi OpenGL w mojej grze. Wygląda na to, że moja konfiguracja wyświetlania doskonałej pod względem pikseli:Dziwne niedoskonałości pikseli OpenGL

glViewport(0, 0, clientSizeWidth, clientSizeHeight); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, clientSizeWidth, clientSizeHeight, 0, -1.0, 1.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
double transAmount = 0.375; 
glTranslated(transAmount, transAmount, 0.0); 

Powoduje problemy w swoich systemach. Nie udało mi się zebrać szczegółów na temat ich systemów, ale sądzę, że mogą one z powodzeniem prowadzić podobne gry OpenGL. Tak wierzę, że mój kod jest winny.

Oto obraz artefaktów wizualnych:

visual artifacts

A oto obraz bez artefaktów wizualnych (ignorować różnicy OS):

without visual artifacts

chociaż mój gra skaluje końcowy render do 2x, robi to jednym połączeniem do glSubTexImage2D po wykonaniu renderowania 1x rmed. Oznacza to, że artefakty na pierwszym zrzucie były obecne przed podwojeniem pikseli (stąd też artefakty są również podwajane w pikselach). Więc podwojenie pikseli nie może być źródłem problemu.

Jakieś myśli o tym, co może to spowodować? Obecnie nie mam możliwości sprawdzenia. Zdecydowana większość użytkowników (łącznie z mną) nie doświadcza żadnych artefaktów wizualnych.

Edytuj (30 kwietnia): Polski użytkownik poinformował mnie, że jego videocard przeżywa te artefakty i jest "nVidia 9500 GS". Nie wiem, czy oznacza to, że jest to 9500M GS lub 9500 GT, ale oba wydają się dość nowoczesne.

+0

Skąd pochodzi '0.375'? –

+0

@BenVoigt Pochodzi z Red Booku OpenGL. Zobacz [to] (http://glprogramming.com/red/appendixg.html#name1) lub [this] (http://msdn.microsoft.com/en-us/library/ms537007%28VS.85%29. aspx). –

+3

Fakt, że 1) dzieje się tylko na niektórych powierzchniach 2) dzieje się w różnych skalach, ponieważ różne powierzchnie powinny być dużą wskazówką, gdzie będzie kod problemu. – Patashu

Odpowiedz

6

Istnieje 90% prawdopodobieństwo, że użytkownik, u którego występuje ten problem, przełącza jakość tekstury w panelu sterowania nVidia w przypadku niektórych wartości innych niż domyślne. w twoim przypadku GL_NEAREST powinien pomóc w uniknięciu takich problemów (więc nie będzie oznaczał średnich teksseli sąsiada dla skalowanych obrazów). ale najpierw poproś go o ustawienie domyślnych ustawień panelu sterowania nVidia, aby udowodnić lub złamać teorię.

+0

ty ty ty!Szczególne przesłonięcie nVidii wydaje się być 'Antialiasing-Mode', przetestowałem to i dostałem podobne niedoskonałości pikseli. Sprawa została rozwiązana! –