2010-02-10 8 views
5

Ich brauche in Antialiasing in iPhone 3G (OpenGL ES1.1), iPhone 3G nicht mit OpenGL ES.2.0. Ich habe 3D-Modell zeichnen und haben als nächstes: Pixel an den Rändern des Modells sehen aus wie Zähne.Antialiasing iPhone OpenGLES

Ich habe versuchen, alle Filter für Textur gesetzt, aber diese Filter nur Textur macht INSIDE besser aussehen.

Wie kann ich gute Antialise machen? Darf ich irgendwelche glatten zum Zeichnen von Dreiecken verwenden? Wenn ja, wie ist es dann in OpenGL ES1.1 möglich?

danke.

Antwort

4

Sie in eine größere FBO machen kann und verwenden Sie dann, dass als Textur auf einem Platz.

Werfen Sie einen Blick auf this Artikel für eine Erklärung.

+0

Können Sie das genauer erklären? danke. –

+0

Vielen Dank für diesen Link! Und ich werde versuchen, "in einen größeren FBO zu rendern". –

+0

Ich habe eine neue Antwort gepostet: Das Konzept ist das gleiche, aber es gibt einen einfacheren Weg, es in neueren Versionen von iOS zu tun. – benzado

2

Überprüfen Sie die Parameter EGL_SAMPLE_BUFFERS und EGL_SAMPLES auf eglChooseConfig() sowie glEnable(GL_MULTISAMPLE).

EDIT: Hrm, apparently du bist kein Glück, zumindest so weit wie standardisierte Ansätze gehen. Wie in diesem Thread erwähnt, können Sie zu einer großen Offscreen-Textur rendern und auf ein kleineres Quad auf dem Bildschirm skalieren oder die Ansichtsmatrix mehrere Male jittern.

+0

Danke, aber openGL auf dem iPhone hat keine Unterstützung eglChooseConfig(). Oder irre ich mich? Aber wenn ich GL_LINE_SMOOTH setze und glDrawArrays mit GL_LINE_STRIP verwende, habe ich eine SUPER-Antialias-Linie. Aber wenn ich GL_TRIANGLES setze, dann verschwindet dieser Effekt. –

+0

Sieht aus, als hättest du recht. Ungerade. Wie auch immer, fand einen Thread mit einigen alternativen Ansätzen und editierte die Antwort. – genpfault

+0

genpfault, kann sein. Ich habe mehr Websites gegooglet und habe das Gefühl, dass es nur einen Weg gibt - versuchen Sie es mit http://www.gamedev.net/community/forums/topic.asp?topic_id=548956 oder ähnlichem. –

8

Ab iOS 4.0 wird Vollbild-Antialiasing direkt über eine Apple-Erweiterung zu OpenGL unterstützt. Das Grundkonzept ähnelt dem Vorschlag von epatel: rendere die Szene auf einen größeren Framebuffer, kopiere diesen auf einen bildschirmgroßen Framebuffer und kopiere diesen Puffer dann auf den Bildschirm. Der Unterschied besteht darin, dass die Kopie-/Abtastoperation durch einen einzigen Funktionsaufruf (speziell glResolveMultisampleFramebufferAPPLE()) ausgeführt wird, anstatt eine Textur zu erzeugen und sie auf ein Viereck zu rendern.

Weitere Informationen zum Einrichten der Puffer und zum Ändern des Zeichencodes finden Sie unter a tutorial on the Gando Games blog, das für OpenGL ES 1.1 geschrieben wurde. Es gibt auch a note on Apple's Developer Forums, die dasselbe erklären.

Dank Bersaelor für pointing this out in another SO question.

2

Wir haben einen anderen Weg gefunden, dies zu erreichen. Wenn Sie Ihre Texturen bearbeiten und beispielsweise einen 2-Pixel-Rahmen aus transparenten Pixeln hinzufügen, werden die farbigen Pixel in der Textur bei Bedarf mit den transparenten Pixeln gemischt, wodurch ein grundlegender Anti-Aliasing-Effekt erzielt wird. Sie können den vollständigen Artikel hier in our blog lesen.

Der Vorteil dieses Ansatzes besteht darin, dass Sie kein größeres Bild rendern oder einen Puffer kopieren oder, noch schlimmer, eine Textur aus einem Puffer erstellen, sodass die Leistung nicht beeinträchtigt wird.

+0

Dieser Link zu [unserem Blog] (http://agileroute.com/blog/how-to-emulate-antial-aliasing-in-opengl-es-1-1) ist defekt –