2010-02-10 156 views
5

我需要在iPhone 3G(OpenGL ES1.1)中進行抗鋸齒,而不是使用OpenGL ES.2.0的iPhone 3Gs。 我畫了3d模型,然後有:模型邊上的像素看起來像牙齒。反鋸齒iPhone OpenGLES

我已經嘗試設置紋理的任何過濾器,但是這個過濾器只讓紋理內部看起來更好。

我怎麼能好好antialising? 可能我應該使用任何光滑繪製三角形?如果是,那麼在OpenGL ES1.1中如何可能呢?

謝謝。

回答

4

您可以渲染成更大的FBO,然後將其用作正方形上的紋理。

看看this文章的解釋。

+0

你能詳細解釋一下嗎? 謝謝。 – 2010-02-11 18:08:23

+0

非常感謝您的鏈接! 我會嘗試「渲染成一個更大的FBO」。 – 2010-02-12 17:49:07

+0

我已經發布了一個新的答案:這個概念是一樣的,但有一種更簡單的方法可以在較新版本的iOS中實現。 – benzado 2010-11-04 23:40:53

2

查看EGL_SAMPLE_BUFFERS和EGL_SAMPLES參數爲eglChooseConfig()以及glEnable(GL_MULTISAMPLE)

編輯:Hrm,apparently你運氣不好,至少就標準化方法而言。正如在該線程中提到的那樣,您可以渲染到較大的屏幕外紋理,並縮放到較小的屏幕四邊形或抖動視圖矩陣幾次。

+0

謝謝,但iPhone上的openGL沒有支持eglChooseConfig()。 還是我誤會了? 但是,當我設置GL_LINE_SMOOTH並使用GL_LINE_STRIP glDrawArrays我有SUPER antialiased線。 但是,當我設置GL_TRIANGLES那麼這個效果就消失了。 – 2010-02-11 15:17:29

+0

看起來你是對的。奇。無論如何,找到一個線程與一些替代方法並編輯答案。 – genpfault 2010-02-11 15:46:46

+0

genpfault, 可能。我搜索了更多的網站,並覺得只有一種方法 - 嘗試使用這個http://www.gamedev.net/community/forums/topic.asp?topic_id=548956或類似的。 – 2010-02-11 17:28:11

8

從iOS 4.0開始,全屏抗鋸齒直接通過Apple OpenGL Open Extension支持。基本概念與epatel的建議類似:將場景渲染到更大的幀緩衝區,然後將其複製到屏幕大小的幀緩衝區,然後將該緩衝區複製到屏幕。不同之處在於,不是創建紋理並將其渲染到四邊形,而是通過單個函數調用(具體地,glResolveMultisampleFramebufferAPPLE())執行復制/樣本操作。

有關如何設置緩衝區和修改繪圖代碼的詳細信息,您可以閱讀爲OpenGL ES 1.1編寫的a tutorial on the Gando Games blog;也有a note on Apple's Developer Forums解釋相同的事情。

感謝Bersaelor的pointing this out in another SO question

2

我們找到了另一種實現此目的的方法。如果編輯紋理並添加例如2像素幀的透明像素,則紋理中的彩色像素會在必要時與透明像素混合,從而提供基本的抗鋸齒效果。您可以在our blog閱讀完整的文章。

這種方法的優點是您不會渲染更大的圖像或複製緩衝區,甚至更糟糕,從緩衝區製作紋理,因此不會影響性能。

+0

此鏈接至[我們的博客](http://agileroute.com/blog/how-to-emulate-anti-aliasing-in-opengl-es-1-1)已損壞 – 2013-02-01 09:35:34