Wie man anti-Aliasing von Linien in OpenGL ES 2.0?
Ich versuche zu zeichnen, einige Konturen, die ich gespeichert habe als vertex-arrays:
typedef struct
{
float* vertices;
int nrPoints;
}VertexCurve;
list<VertexCurve> CurveList;
Ich bin mit ein paar Proben aus einer opengl-es-2.0-Buch : http://opengles-book.com/
Die Zeichnung Methode sieht wie folgt aus:
void Draw ( ESContext *esContext )
{
UserData *userData = (UserData*)esContext->userData;
//Set the viewport
glViewport ( 0, 0, esContext->width, esContext->height );
//Clear the color buffer
glClear ( GL_COLOR_BUFFER_BIT );
//Use the program object
glUseProgram ( userData->programObject );
//glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
//glEnable(GL_SAMPLE_COVERAGE);
//glSampleCoverage(0.5, GL_FALSE);
glEnableVertexAttribArray ( 0 );
//glLineWidth(1);
for (list<VertexCurve>::iterator it = CurveList.begin();
it != CurveList.end(); it++)
{
//Load the vertex data
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, (*it).vertices );
glDrawArrays ( GL_LINE_LOOP, 0, (*it).nrPoints );
}
eglSwapBuffers ( esContext->eglDisplay, esContext->eglSurface );
}
Auch die Ergebnisse für die Zeichnung sind:
Was ich brauchen, ist zu haben, glattere Linien (anti-Aliasing) und von was ich gelesen habe, in OpenGL ES 2, die getan werden kann mit multisampling. Kann man aus dem code sehen, dass ich versucht habe mit einigen Methoden, die spezifisch für diese Technik, aber ich war nicht in der Lage zu verstehen, Ihre Verwendung und habe schlechte Ergebnisse:
Wenn jemand zu mir erklären können, wie man anti-Aliasing von Linien und die Konturen glatter, werde ich sehr dankbar sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multisampling aktiviert oder deaktiviert werden können, über die token GL_MULTISAMPLE, und es ist standardmäßig aktiviert.
Um heraus zu finden, ob multisampling wird unterstützt durch die derzeit aktive EGL Oberfläche, die Abfrage des Wertes der GL_SAMPLE_ PUFFER: hier 1 Mittel unterstützt werden, 0 bedeutet nicht unterstützt. GL_SAMPLES dann erzählt, wie viele samples pro pixel gespeichert werden.
Also alle die ich tun musste, war, fügen Sie diese 2 Attribute im context-Attribut-Liste :
Ich EGL_SAMPLE_BUFFERS auf 1, wenn ein multisample-buffer und EGL_SAMPLES zu 4 , also mit 4 samples pro pixel (FSAA x4).
In der Lage sein zu tun, multisampling, müssen Sie eine multisample-framebuffer. Auf den meisten OpenGL-ES-Implementierungen dies geschieht durch die Schaffung einer multisampled Framebuffer-Objekt Rendern, dann kopieren Sie seinen Inhalt auf dem Bildschirm-framebuffer.