2013-04-29 14 views
9

Una percentuale molto piccola (< 1%) dei miei utenti sperimenta una strana distorsione con l'interfaccia utente OpenGL del mio gioco. Sembrerebbe che la mia configurazione di proiezione pixel perfetta:Strane imperfezioni OpenGL Pixel

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); 

Sta causando problemi sui loro sistemi. E non sono riuscito a raccogliere dettagli sui loro sistemi, ma credo che possano eseguire giochi OpenGL simili con successo. Quindi credo che il mio codice sia in difetto.

Ecco una foto di artefatti visivi:

visual artifacts

E qui è una foto senza artefatti visivi (ignorare la differenza in OS):

without visual artifacts

Anche se il mio il gioco ridimensiona il rendering finale per essere 2x, lo fa tramite una singola chiamata a glSubTexImage2D dopo che il rendering 1x è stato perfo confermate. Ciò significa che gli artefatti nel primo screenshot erano presenti prima del raddoppiamento dei pixel (da qui il motivo per cui gli artefatti sono anche pixel raddoppiati). Quindi il raddoppiamento dei pixel non potrebbe essere la fonte del problema.

Qualche idea su cosa potrebbe causare questo? Al momento non ho modo di testare. La stragrande maggioranza degli utenti (me compreso) non ha esperienza di artefatti visivi.

Edit (30 aprile): un utente polacco mi ha informato che la sua scheda video sperimenta questi artefatti ed è una "nVidia 9500 GS". Non sono sicuro se questo significa 9500M GS o 9500 GT, ma entrambi sembrano abbastanza moderni.

+0

Da dove proviene '0.375'? –

+0

@BenVoigt Viene dal Redbook OpenGL. Vedere [questo] (http://glprogramming.com/red/appendixg.html#name1) o [this] (http://msdn.microsoft.com/en-us/library/ms537007%28VS.85%29. aspx). –

+3

Il fatto che 1) si verifichi solo su alcune superfici 2) avviene su scale diverse per superfici diverse e dovrebbe essere un grande indizio su dove sarà il codice del problema. – Patashu

risposta

6

c'è il 90% di probabilità che l'utente che ha riscontrato questo problema abbia uno switch di qualità della trama nel proprio pannello di controllo nVidia su un valore non predefinito. nel tuo caso, GL_NEAREST dovrebbe aiutare ad evitare tali problemi (quindi non farà la media dei texels dei vicini per le immagini di upscaling). ma prima, chiedigli di impostare le impostazioni del pannello di controllo di nVidia come predefinite per provare o interrompere la teoria.

+0

ty ty ty ty!Il particolare override di nVidia sembra essere "Antialiasing - Mode", l'ho testato e ho ottenuto imperfezioni di pixel simili. Caso risolto! –