2010-02-10 44 views
5

Tôi cần chống răng cưa trong iPhone 3G (OpenGL ES1.1), KHÔNG phải iPhone 3G với OpenGL ES.2.0. Tôi đã vẽ mô hình 3D và tiếp theo: pixel trên các cạnh của mô hình trông giống như răng.chống răng cưa iPhone OpenGLES

Tôi đã thử đặt bất kỳ bộ lọc nào cho kết cấu, nhưng bộ lọc này chỉ làm cho kết cấu CHỈ trông đẹp hơn.

Làm cách nào để tôi có thể thực hiện tốt việc chống độc quyền? Tôi có nên sử dụng trơn tru để vẽ hình tam giác không? Nếu có, thì làm thế nào nó có thể trong OpenGL ES1.1?

cảm ơn.

Trả lời

4

Bạn có thể kết xuất thành một FBO lớn hơn và sau đó sử dụng làm kết cấu trên hình vuông.

Hãy xem bài viết this để được giải thích.

+0

Bạn có thể giải thích chi tiết hơn không? cảm ơn. –

+0

Cảm ơn bạn rất nhiều vì liên kết này! Và tôi sẽ thử "kết xuất thành một FBO lớn hơn". –

+0

Tôi đã đăng một câu trả lời mới: khái niệm này giống nhau nhưng có một cách dễ dàng hơn để làm điều đó trong các phiên bản iOS mới hơn. – benzado

2

Kiểm tra tham số EGL_SAMPLE_BUFFERS và EGL_SAMPLES tới eglChooseConfig(), cũng như glEnable(GL_MULTISAMPLE).

EDIT: Hrm, apparently bạn đã hết may mắn, ít nhất là theo cách tiếp cận chuẩn hóa. Như đã đề cập trong chủ đề đó, bạn có thể kết xuất với một kết cấu lớn ngoài màn hình và mở rộng thành một hình nhỏ hơn trên màn hình hoặc jitter ma trận xem nhiều lần.

+0

Cảm ơn, nhưng OpenGL trên iPhone không hỗ trợ eglChooseConfig(). Hay tôi nhầm? Nhưng khi tôi thiết lập GL_LINE_SMOOTH và sử dụng glDrawArrays với GL_LINE_STRIP tôi có dòng siêu antialiased. Nhưng khi tôi đặt GL_TRIANGLES thì hiệu ứng này sẽ biến mất. –

+0

Có vẻ như bạn đã đúng. Odd. Dù sao, tìm thấy một sợi với một số phương pháp thay thế và chỉnh sửa câu trả lời. – genpfault

+0

genpfault, có thể. Tôi đã googled các trang web nhiều hơn và cảm thấy rằng chỉ có một cách - cố gắng sử dụng này http://www.gamedev.net/community/forums/topic.asp?topic_id=548956 hoặc tương tự. –

8

Kể từ iOS 4.0, tính năng chống răng cưa toàn màn hình được hỗ trợ trực tiếp thông qua tiện ích mở rộng của Apple cho OpenGL. Khái niệm cơ bản tương tự như gợi ý của epatel: đưa khung cảnh vào một bộ đệm khung lớn hơn, sau đó sao chép nó xuống một framebuffer có kích thước màn hình, sau đó sao chép bộ đệm đó vào màn hình. Sự khác biệt là, thay vì tạo ra một kết cấu và vẽ nó lên một quad, thao tác sao chép/mẫu được thực hiện bởi một cuộc gọi hàm duy nhất (cụ thể, glResolveMultisampleFramebufferAPPLE()).

Để biết chi tiết về cách thiết lập bộ đệm và sửa đổi mã vẽ của bạn, bạn có thể đọc a tutorial on the Gando Games blog được viết cho OpenGL ES 1.1; cũng có a note on Apple's Developer Forums giải thích điều tương tự.

Nhờ Bersaelor cho pointing this out in another SO question.

2

Chúng tôi đã tìm thấy một cách khác để đạt được điều này. Nếu bạn chỉnh sửa họa tiết của mình và thêm ví dụ 2 pixel pixel trong suốt, các pixel màu trong kết cấu được pha trộn với các pixel trong suốt khi cần thiết cho hiệu ứng chống răng cưa cơ bản. Bạn có thể đọc toàn bộ bài báo tại đây trong our blog.

Lợi thế của phương pháp này là bạn không hiển thị hình ảnh lớn hơn hoặc sao chép bộ đệm hoặc thậm chí tệ hơn, tạo kết cấu từ bộ đệm, do đó không có tác động gì đến hiệu suất.

+0

Liên kết này tới [blog của chúng tôi] (http://agileroute.com/blog/how-to-emulate-anti-aliasing-in-opengl-es-1-1) bị hỏng –

Các vấn đề liên quan