2011-01-24 42 views
31

Tôi sẽ bắt đầu một dự án openGL plattform mới (chính cho iPhone & PC). Vì vậy, có câu hỏi chính: nhắm mục tiêu cho OpenGL ES 1.1 hoặc OpenGL ES 2.0? Hoặc cả hai? Cho đến nay tôi đọc Open GL ES 1.1 không thực sự bị phản đối, phải không? Vì vậy, những gì sẽ nói cho OpenGL ES 2.0? Lập trình đỉnh- & fragmentshader - Còn gì khác không? Tôi nghe nói về hiệu suất giảm với pha trộn alpha hoặc như vậy - có thể đó là sự thật? Tôi giả sử mã OpenGL ES 2.0 cũng nên chạy trên PC - Vậy là OpenGL ES 2.0 có thực sự nhận thức được trong tương lai không?Chọn OpenGL ES 1.1 hoặc OpenGL ES 2.0?

Các nhà phát triển khác hiện có mã hóa cho OpenGL ES 1.1 hoặc 2.0 không? Và tại sao? Tôi giả sử trong trường hợp tôi chọn OpenGL ES 2.0, sẽ có rất nhiều chi phí cho khả năng tương thích ngược với OpenGL ES 1.1. Nhưng có rất nhiều iPhone ở ngoài mà không có hỗ trợ OpenGL ES 2.0 - tôi nên thực hiện điều này như thế nào? Có kinh nghiệm nào không?

Tôi chỉ tìm thấy câu hỏi này: OpenGL ES 1.1 or 2.0 on iPhone loại có liên quan, nhưng nó không thực sự sâu về việc triển khai ... Vì vậy, mọi lời khuyên đều được hoan nghênh! Cảm ơn bạn rất nhiều!

Trả lời

52

Cho dù sử dụng OpenGL ES 1.1 hay 2.0 phụ thuộc vào những gì bạn muốn làm trong ứng dụng của mình và số lượng thiết bị bạn cần để tương thích. Tất cả các thiết bị iOS đều hỗ trợ OpenGL ES 1.1, nơi chỉ có iPhone 3G S và các thiết bị mới hơn (iPhone 3G S, iPhone 4, iPad và iPod touch thế hệ thứ 3 và thứ 4) hỗ trợ OpenGL ES 2.0. Tuy nhiên, tất cả các thiết bị iOS mà Apple hiện đang vận chuyển đều tương thích với OpenGL ES 2.0. Tỷ lệ phần trăm thiết bị không hỗ trợ OpenGL ES 2.0 giảm mỗi ngày. Tất cả iPad đã hỗ trợ OpenGL ES 2.0 từ khi khởi động, vì vậy bạn được đảm bảo có hỗ trợ nếu bạn nhắm mục tiêu đến yếu tố hình thức đó.

OpenGL ES 2.0 và 1.1 sử dụng các đường dẫn hiển thị khác nhau và không tương thích. OpenGL ES 1.1 sử dụng đường ống chức năng cố định, nơi bạn nạp dữ liệu hình học và kết cấu, thiết lập trạng thái chiếu sáng, v.v. và để OpenGL xử lý phần còn lại cho bạn. OpenGL ES 2.0 dựa trên một đường ống có thể lập trình, nơi bạn cung cấp các trình đổ bóng đỉnh và mảnh để xử lý các chi tiết cụ thể về cách nội dung của bạn được hiển thị trên màn hình.

Vì bạn phải viết mã của riêng mình để thay thế ngay cả các chức năng cơ bản nhất, sử dụng OpenGL ES 2.0 cho các ứng dụng 3-D đơn giản có thể đòi hỏi nhiều nỗ lực hơn OpenGL ES 1.1. Ngoài ra, hầu hết các ứng dụng mẫu và bản ghi mà bạn tìm thấy sẽ có hướng tới 1.1, vì vậy có thể khó khăn hơn để bắt đầu với API 2.0. Tuy nhiên, thực tế là bạn có thể viết thói quen của riêng bạn để xử lý hình học và kết cấu của bạn và cách chúng được hiển thị trên màn hình có nghĩa là OpenGL ES 2.0 cho phép bạn thực hiện những việc đơn giản nhất có thể (hoặc sẽ yêu cầu nỗ lực to lớn) để làm trong OpenGL ES 1.1. Chúng bao gồm các hiệu ứng như bóng phim hoạt hình và ánh sáng bao quanh môi trường xung quanh, cũng như cho phép bạn làm điều gì đó thú vị như giảm tải công việc song song một cách ồ ạt cho GPU.

Nếu bạn quan tâm để xem một số ví dụ về những gì bạn có thể làm với OpenGL ES 2.0, video cho lớp tôi đã dạy về chủ đề có sẵn on iTunes U và tôi đã tạo hai ứng dụng mẫu herehere.

Khi nói đến khả năng tương thích nền tảng, trình đổ bóng đã có sẵn trên OpenGL trên máy tính để bàn trong một thời gian ngắn, vì vậy mọi thứ bạn xây dựng bằng OpenGL ES 1.1 hoặc 2.0 đều khá dễ dàng với máy tính để bàn.

Nếu bạn có thể thực hiện hiển thị mà bạn muốn trong OpenGL ES 1.1, bạn có thể đi theo cách đó để cung cấp khả năng tương thích thiết bị tối đa. Tuy nhiên, phần lớn các thiết bị iOS hiện đang sử dụng hỗ trợ OpenGL ES 2.0 (Tôi không thể tìm thấy số liệu thống kê về điều này ngay bây giờ, nhưng nó dựa trên các đơn vị được vận chuyển), và con số đó sẽ chỉ tăng theo thời gian. OpenGL ES 2.0 cho phép bạn rút ra một số hiệu ứng tuyệt đẹp (xem Epic Citadel) có thể giúp bạn thiết lập ứng dụng của bạn ngoài những ứng dụng khác.

+0

Câu trả lời rất chi tiết - Cảm ơn bạn! – Constantin

+0

Để bổ sung câu trả lời cổ điển và tuyệt vời này, tại liên kết này http://en.wikipedia.org/wiki/List_of_iOS_devices#Tính năng cuộn xuống OpenGL ES để có một màn hình hiển thị đáng giá. – Fattie

+1

@ Brad Larson: 1,5 năm sau, bạn sẽ đưa ra một câu trả lời tương tự cho điều đó hay bạn sẽ mang đến [GLKit] (http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKit_Collection/GLKit_Collection. pdf) là sự lựa chọn tốt nhất? –

-2

tôi đã chọn 2.0 chỉ dành riêng cho Cubemap

0

Về cơ bản chỉthe iPhone 3G and prior (ngưng 2010) và iPod thế hệ thứ 2 và trước đó (cũng ngưng tháng 9 năm 2010) cần bạn sử dụng OpenGL ES 1.0.

Tất cả iPad, iPad minis và iPhone 3GS trở đi, hỗ trợ OpenGL ES 2.0. Trên thực tế, bất kỳ thiết bị iOS nào được bán (dưới dạng thiết bị hoàn toàn mới) sau tháng 9 năm 2010 đều hỗ trợ OpenGL ES 2.0.

OpenGL ES hỗ trợ 3,0

Không chỉ để bạn có được ES 2.0 hỗ trợ, nhưng iPhone 5S + iPad Air (iPad thế hệ thứ 5) bây giờ OpenGL ES 3.0, tính đến tháng mười một năm 2013.

0

Hiện nay, tôi nghiêm túc nghi ngờ có bất kỳ thiết bị ra khỏi đó mà không hỗ trợ OpenGLES 2.0! Hãy nỗ lực nhiều hơn một chút vào OpenGLES 2.0 và bạn sẽ được chứng minh trong tương lai, đặc biệt khi OpenGLES 3.0 đã hết. Trên thực tế, tôi thấy OpenGLES 2.0 dễ dàng hơn 1.1, đơn giản bởi vì tôi có thể thực hiện các phép tính ma trận của riêng tôi và chỉ định chính xác những gì đi vào một shader.

Điều khác là, nếu bạn định sử dụng API OpenGLES 1.1, bạn cần biết rằng nó thực sự được triển khai dưới dạng trình đổ bóng và không phải là phần cứng, nếu điều đó có ý nghĩa. OpenGLES 2.0 chạy một bóng đổ đỉnh thực hiện một đường ống chức năng cố định OpenGLES 1.1.

Đó là không có trí tuệ - ít nhất là OpenGLES 2.0!