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:
E qui è una foto senza artefatti visivi (ignorare la differenza in OS):
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.
Da dove proviene '0.375'? –
@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). –
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