Cập nhật trò chơi iPhone dựa trên OpenGL ES 1.1 để sử dụng Open GL ES 2.0


7

Tôi khá mới đối với mọi thứ OpenGL nói chung. Tôi đã tạo một trò chơi iPhone 2D dựa trên OpenGL ES 1.1 bằng cách làm việc từ mã mẫu. Tôi có ấn tượng rằng OpenGL ES 2.0 khác biệt đáng kể so với 1.1. Vì vậy, việc cập nhật mã 1.1 lên 2.0 đòi hỏi gì?

Tôi đã quen với kiểu vẽ cơ bản của "ma trận đẩy, dịch, xoay, vẽ kết cấu 2D, ma trận pop". "Tương đương" trong 2.0 là gì?

Câu trả lời:


9

OpenGL ES 2.0 rất khác so với ES 1.1. Bạn không còn đường ống chức năng cố định nữa, do đó, "ma trận đẩy, dịch, xoay" quen thuộc của bạn đã biến mất.

Thay vào đó, bạn có khái niệm về shader: đỉnh và mảnh. Chúng là những chương trình nhỏ được thực thi cho từng đỉnh và từng pixel. Đó là nơi tất cả các biến đổi và hiệu ứng khác xảy ra. Mã của bạn sẽ chuẩn bị dữ liệu đỉnh, cho OpenGL biết cấu trúc của nó và bàn giao nó cho các shader.

Nhưng không mất tất cả: Một số phần của OpenGL không thay đổi, như cài đặt các trạng thái khác nhau (chế độ hòa trộn, so sánh độ sâu) hoặc tạo kết cấu.

Để sử dụng OpenGL ES 2.0 một cách hiệu quả, bạn cần nắm vững những kiến ​​thức cơ bản về đồ họa máy tính 3D, vì vậy hãy lấy một cuốn sách giới thiệu tốt và tìm hiểu các nguyên tắc. Sau đó, bạn có thể chuyển sang OpenGL ES 2.0 và bắt đầu viết shader. Đây là một cuốn sách OpenGL ES 2.0 tốt .

Cuối cùng, đừng cho rằng bạn phải chuyển sang OpenGL ES 2.0. Trừ khi có một cái gì đó cụ thể mà bạn cần mà bạn không thể làm trong ES 1.1, bạn có thể tiếp tục sử dụng ES 1.1 vì các thiết bị mới hơn đều tương thích ngược.


2
Ma trận đẩy, dịch, xoay, v.v ... tất cả vẫn còn đó. Đó là bản vẽ chế độ ngay lập tức đã biến mất. Vì vậy, không còn glVertex () glN normal (), v.v. Bạn cần sử dụng các mảng đỉnh hoặc các đối tượng bộ đệm đỉnh để đưa hình học của bạn vào thẻ thay thế.
Bob Bolog

3
@Bob Bolog Tôi khá chắc chắn rằng ngăn xếp ma trận đã bị xóa trong OpenGL 2.0 ES trên iPhone, vì vậy không có ma trận đẩy, dịch, v.v.
5 giờ

Hmm, tôi phải thừa nhận rằng tôi không chắc chắn 100%, vì tôi thực sự không làm OpenGL cho thiết bị di động nhiều như vậy, và chắc chắn không phải cho iPhone. Tôi sẽ nghĩ rằng ngăn xếp ma trận phải ở đó, mặc dù. Làm thế nào bạn có thể hình học mà không có nó?
Bob Bolog

@Bob Nhận xét của bạn sẽ chính xác nếu bạn so sánh OpenGL ES 1.1 với OpenGL 1.5. ES 2.0 là một con thú hoàn toàn khác và các hoạt động ma trận thực sự đã biến mất. Tất nhiên có rất nhiều nơi bạn có thể chọn thư viện các lớp ma trận C ++.
U62

@Bob Bolog: bạn thể hiện hình học bằng cách chuyển đồng phục ma trận mà bạn tự tính toán cho các shader đỉnh (cái gọi là ma trận Model-view).
Bahbar

7

Tôi đã chuyển Công cụ 3D của mình từ OpenGL ES 1.X sang OpenGL ES 2.X vì tôi thích các trình đổ bóng. Các trình kết xuất là phân biệt và không chia sẻ bất kỳ mã nào.

Bạn có thể dịch dễ dàng:

  • quản lý kết cấu
  • đối tượng framebuffer
  • pha trộn

Khó khăn hơn (Cần shader):

  • biến đổi đường ống cố định (xoay, tỷ lệ ...)
  • sương mù
  • thắp sáng

Để chuyển mã của bạn, tôi khuyên bạn và bạn:

Bước một

  • tìm hiểu GLSL 1.2: bạn có thể đọc hướng dẫn về WebGL
  • cố gắng viết một số shader shader toy

Bước hai

  • liệt kê tất cả các tài liệu bạn có (hoặc kỹ thuật kết xuất)
  • liệt kê tất cả các thông tin về đỉnh như tọa độ đỉnh, bình thường, tọa độ kết cấu, thông tin màu bạn cần cho mỗi vật liệu

    Với các thông tin này, bạn sẽ biết Chương trình GLSL nào (shader đỉnh + mảnh) mà bạn phải viết.

Bước thứ ba

  • viết các hàm biên dịch shader của bạn và ghi lại từng thông tin
  • triển khai chương trình tối thiểu OpenGL ES 2.X với một hình tứ giác (hai hình tam giác)
  • triển khai và kiểm tra từng chương trình GLSL của bạn

Bước bốn: Tối ưu hóa


3

OpenGL ES 2.0 không phải là phiên bản mới của OpenGL ES 1.1. Hay nói cách khác, OpenGL ES 2.0 không phải là OpenGL ES 1.1 tốt hơn.
Vâng không duh, họ đã thay đổi mọi thứ.

Việc nhập câu lệnh đơn giản đó rất dễ bị bỏ qua. Xem xét:
OpenGl 2.0 phiên bản mới của OpenGL 1.5. OpenGL 2.0 một OpenGL 1.5 tốt hơn.

Điều này có nghĩa là Nếu bạn đang sử dụng OpenGl 1.5 và muốn duy trì khả năng tương thích về phía trước, bạn nên chuyển sang 2.0.

Điều tương tự không đúng với OpenGL ES. 1.1 không được thay thế bởi 2.0. Họ là những tiêu chuẩn khác nhau. Sự nhầm lẫn có thể đã được loại bỏ nếu chúng được đặt tên:

  • Đã sửa lỗi OpenGL ES
  • Trình tạo bóng OpenGL ES

LƯU Ý: về mặt kỹ thuật điều này không hoàn toàn đúng. Lý do là, bạn có thể triển khai chuỗi 1.0 với loạt 2.0. Bạn chỉ cần đặt các chức năng đường ống cố định làm trình đổ bóng.


2

Ngoài các câu trả lời khác ở đây, gần đây tôi đã tìm thấy gles2-bc, một thư viện C ++ 'làm cho API OpenGL ES 2.0 tương thích không tương thích ngược'.

Có một số hạn chế đã biết và tôi đã không sử dụng nó cho mình, nhưng tôi nghĩ rằng tôi đã đăng liên kết để tham khảo.

http://code.google.com.vn/p/gles2-bc/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.