Làm cách nào để quyết định sử dụng OpenGL ES 1.0 hoặc 2.0 cho Android? [đóng cửa]


7

Tôi bắt đầu học một số phát triển Android và một trong những điều đầu tiên tôi nghĩ tôi có thể làm là một trò chơi đơn giản. Tuy nhiên, tôi phải đối mặt với một câu hỏi khó ngay lập tức. Tôi nên sử dụng OpenGL ES 1.0 hay 2.0?

Trò chơi mà tôi đã hình dung sẽ khá đơn giản về mặt đồ họa, sử dụng 2D (đồ họa loại từ trên xuống) và chế độ xem isometric của máy ảnh cố định. Tôi chưa bao giờ sử dụng OpenGL trong môi trường máy tính để bàn, vì vậy tôi không biết liệu shader sẽ là thứ tôi sẽ sử dụng, v.v.

Theo trang này, tôi nên sử dụng OpenGL ES 2.0 để phát triển mới. Tuy nhiên, điện thoại của riêng tôi mới đây (năm ngoái) đã có bản cập nhật để đưa nó lên Android 2.2 cần thiết. (Tôi thậm chí không biết nó có hỗ trợ OpenGL ES 2.0 không)

Vì vậy, về cơ bản câu hỏi của tôi là, tôi sẽ được hưởng lợi từ bất kỳ tính năng nào của OpenGL ES 2.0 trên 1.0 và / hoặc nó có đáng về mặt tương thích không?


Hoặc sử dụng một thư viện đồ họa mã nguồn mở để làm hầu hết công việc cho bạn: libgdx
ToolmakerSteve

Câu trả lời:


7

Nếu bạn không có hoặc có ít kinh nghiệm với OpenGL, tôi sẽ không đề xuất 2.0.

Với OpenGL ES 2.x, bạn sẽ phải viết các thói quen của riêng mình để thao tác ma trận và viết các shader của riêng bạn. Đây là rất nhiều công việc, rất nhiều có thể đi sai, và gỡ lỗi rất nhiều những điều này là rất đau khổ.

Chỉ khi bạn nghĩ rằng bạn sẽ cần một số tính năng mà OpenGL ES 2.0 có thì bạn mới nên sử dụng nó.

Chỉnh sửa: Nếu những điều trên không đủ để làm bạn sợ, tôi khuyên bạn nên thử tạo một ví dụ tầm thường trong OpenGL ES 1.x và sau đó thử tạo ví dụ tương tự trong OpenGL ES 2.x. Bạn có thể, ví dụ, vẽ một khối xoay với kết cấu được áp dụng cho nó.


Đầu tiên, nó là 0, nhưng -1 cho chỉnh sửa, đặc biệt là phần "sợ hãi" - phần này chỉ mang tính chống chỉ định.
Christian Rau

Tôi sẽ bắt đầu với sự dễ dàng hơn của hai người sau đó. Tôi đã sẵn sàng học Android và tiếp tục sử dụng Java, vì vậy tôi sẽ học một thứ dễ học hơn bây giờ
Earlz

@ChristianRau - và "sợ" là chính xác những gì 2.0 yêu cầu để viết shader để làm những việc cơ bản đã làm với tôi, khi tôi gặp thông số kỹ thuật. Tôi ngạc nhiên rằng trừ khi một người rơi trở lại API 1.0, Android yêu cầu mọi lập trình viên thực hiện GLSurfaceView.Renderer để xử lý các shader, ngay cả khi các yêu cầu của họ đơn giản. Tôi dự kiến ​​sẽ thấy một cái gì đó giống như lớp Canvas, nhưng được viết lại với trọng tâm 3D và hiệu suất tuyệt vời. Tôi dự kiến ​​sẽ sử dụng shader cuối cùng, nhưng ngay cả đối với những thứ cơ bản nhất ?? (Tôi có thể sẽ sử dụng libgdx, nhưng thật ngạc nhiên khi đó không phải là một giải pháp tích hợp.)
ToolmakerSteve

@ToolmakerSteve Vâng, nếu yêu cầu của bạn đơn giản, shader của bạn cũng vậy. Một cặp shader đơn giản, ví dụ như cho thấy một đối tượng được biến đổi hoàn toàn và được thắp sáng và kết cấu không cần phải mất nhiều hơn khoảng 10 dòng mã cho mỗi shader đỉnh và mảnh hoàn chỉnh. Trình tạo bóng và xử lý ma trận (dù sao có rất nhiều thư viện sẵn sàng để sử dụng) thực sự đơn giản, đó không phải là khoa học tên lửa (nhưng cũng không phải là javascript). Ngay khi bạn muốn làm nhiều hơn là xoay một khối lập phương (tức là sau ngày đầu tiên của GL), bạn không muốn tránh các shader.
Christian Rau

1

Vâng, nó phụ thuộc. Tôi không có bất kỳ kinh nghiệm nào với ES, nhưng câu hỏi chung luôn giống nhau: Hàm cố định cũ và không dùng nữa so với cách tiếp cận tập trung vào shader hiện đại.

Trong khi đó steprcton chính xác ở chỗ API ES 1 cũ dễ hiểu hơn đối với người mới bắt đầu và dễ dàng đạt được những điều đơn giản mà không cần hiểu toàn bộ API (và điều đó ngăn bạn trở thành một trong những kẻ sử dụng shader mà không hiểu họ đang làm gì ), Tuy nhiên tôi sẽ khuyên bạn nên bắt đầu với cách hiện đại để làm đồ họa thời gian thực ngay lập tức. Mặc dù ban đầu bạn có thể không cần sự linh hoạt của các shader, nhưng nó cực kỳ có giá trị một khi bạn quản lý được những điều cơ bản. Và đó là cách để làm đồ họa thời gian thực tăng tốc phần cứng ngày hôm nay (và ngày mai).

Trong khi đó khả năng tương thích có thể là một mối quan tâm (và tôi không có cái nhìn tổng quan về giá trị hiện tại của các thiết bị ES), mặt khác, nếu sử dụng máy tính để bàn GL, bạn sẽ không giới hạn một cách giả tạo các tính năng chỉ GL 1.1, chỉ để hỗ trợ 15 đến card đồ họa 20 tuổi. Có nghĩa là, tiến độ phải bắt đầu từ đâu đó.


1
Tôi hoàn toàn không đồng ý với điều này. Số lượng công việc cần thiết để chạy một ứng dụng tầm thường (có lẽ là một khối kết cấu xoay) với ES là đầy đủ và có rất nhiều điều có thể sai. Hiểu rằng trong ES 2, bạn không có bất kỳ chức năng ma trận nào (đẩy / bật, dịch, xoay, chia tỷ lệ ...) và bạn phải viết tất cả các shader của mình từ đầu. Nếu một người chưa bao giờ tiếp xúc với những khái niệm này, họ chắc chắn sẽ không có được chúng ngay lần đầu tiên.
thịt

1
Không giống như OpenGL bình thường, (<= 3.0), những thứ này không bị phản đối, chúng không tồn tại. Vì vậy, bạn không thể sử dụng chúng như một cái nạng trong khi bạn xây dựng xung quanh chúng; bạn phải xây dựng tất cả từ đầu. Đối với người mới bắt đầu, OpenGL ES 2.x sẽ giống như cố gắng xây dựng một tòa nhà văn phòng từ đầu mà không biết gì về kiến ​​trúc.
thịt

1
@stephelton Nhưng dù sao bạn cũng cần hiểu những điều đó (công cụ ma trận). Và loại bỏ nó khỏi OpenGL không khiến bạn nghĩ rằng chúng được triển khai trong phần cứng nữa. Ai đó phải thực hiện các công cụ ma trận và thực sự không phải là công việc của OpenGL để làm điều này vì nó không liên quan gì đến phần cứng đồ họa. Nhận một thư viện cho nó nếu bạn chưa muốn gây rối với nó. Chỉ cần sử dụng các tài nguyên học tập tốt và đừng cố gắng tiếp nhận thế giới ngay từ đầu. Sau đó, bắt đầu với ES 2 chỉ shader sẽ không có vấn đề gì.
Christian Rau

1
@stephelton Và tốt, đồ họa không hề đơn giản và sử dụng cách tiếp cận chức năng cố định cũ để thực hiện chuyển đổi, chiếu sáng và kết cấu cho bạn, chỉ để bạn không cần phải hiểu những gì nó thực sự, không phải là sự thay thế thực sự (và không ' t làm cho nó dễ dàng hơn nhiều dù sao). Khi bạn làm một việc gì đó liên quan nhiều hơn khối xoay (mặc dù đó là điều mà người mới bắt đầu chắc chắn sẽ làm trước), chi phí bổ sung sẽ biến mất, hơn nữa, nó sẽ dẫn đến ít chi phí hơn bằng cách cho phép bạn thực hiện ý tưởng của mình thẳng hơn bằng cách nào đó phá vỡ chúng vào các tính năng chức năng cố định.
Christian Rau

1
@ChristianRau, tôi nghĩ rằng bạn đang phân cực hai phiên bản OpenGL một chút. Anh ta không hỏi liệu anh ta nên tập trung sự nghiệp của mình vào người này hay người kia; Anh ta hỏi liệu ES 2.x có phù hợp và cần thiết cho trò chơi đơn giản của mình không. Mặc dù tôi đồng ý rằng ES 2.x chắc chắn tốt hơn 1.x và việc học 2.x là một điều tốt, tôi không thể khuyên ai đó mới sử dụng OpenGL bắt đầu với ES 2.x. Học cách bò trước khi bạn đi bộ. ES 2.x không chỉ liên quan nhiều hơn (học nhiều hơn, làm việc nhiều hơn, gỡ lỗi nhiều hơn ...), mà nó sẽ khóa anh ta khỏi một phần đáng kể của thị trường Android.
thịt
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.