2012-03-09 37 views
11

Từ những gì tôi đã đọc, có vẻ như OpenGL ES 2.0 không phải là bất cứ điều gì như OpenGL 2.1, đó là những gì tôi đã giả định trước đây.OpenGL ES 2.0 vs OpenGL 3 - Điểm tương đồng và khác biệt

Điều tôi tò mò muốn biết là OpenGL 3 có tương đương với OpenGL ES 2.0 hay không. Nói cách khác, cho rằng tôi sắp tạo ra một công cụ trò chơi cho cả máy tính để bàn và Android, có bất kỳ sự khác biệt nào mà tôi nên biết cụ thể về OpenGL 3.x + và OpenGL ES 2.0 không?

Điều này cũng có thể bao gồm các phiên bản OpenGL 4.x.

Ví dụ: nếu tôi bắt đầu đọc sách this, tôi có lãng phí thời gian của mình không nếu tôi dự định chuyển động cơ sang Android (sử dụng NDK tất nhiên;))?

Trả lời

20

Từ những gì tôi đã đọc, có vẻ như OpenGL ES 2.0 không giống với OpenGL 2.1, đó là những gì tôi đã giả định trước đây.

Xác định "không giống như". Desktop GL 2.1 có một loạt các chức năng mà ES 2.0 không có. Nhưng có một tập hợp con phổ biến nhất của cả hai sẽ làm việc trên cả hai (mặc dù bạn sẽ phải fudge những thứ để tải hình ảnh kết cấu, bởi vì có một số khác biệt đáng kể ở đó).

Desktop GL 3.x cung cấp nhiều chức năng mà ES 2.0 không được kéo dài đơn giản là không. Các đối tượng Framebuffer là lõi trong 3.x, trong khi chúng là các phần mở rộng trong 2.0 (và thậm chí sau đó, bạn chỉ nhận được một hình ảnh đích mà không có phần mở rộng khác). Có chuyển đổi phản hồi, kết cấu nguyên, đối tượng đệm đồng bộ và trình tạo bóng hình học. Đây là tất cả các tính năng phần cứng cụ thể không có sẵn trong ES 2.0 hoặc chỉ có sẵn thông qua tiện ích mở rộng. Một số trong đó có thể là nền tảng cụ thể.

Nhưng cũng có một số tính năng tiện lợi API tốt có sẵn trên máy tính để bàn GL 3.x. địa điểm rõ ràng thuộc tính (layout(location=#)), VAOs vv

Ví dụ, nếu tôi bắt đầu đọc cuốn sách này, tôi lãng phí thời gian của tôi nếu tôi có kế hoạch cho ra những động cơ để Android (sử dụng NDK of course;))?

Điều đó phụ thuộc vào số lượng công việc bạn định làm và những gì bạn chuẩn bị thực hiện để làm cho nó hoạt động. Ít nhất, bạn nên đọc về những gì OpenGL ES 2.0 làm, để bạn có thể biết nó khác với máy tính để bàn GL như thế nào.

Thật dễ dàng để tránh các tính năng phần cứng thực tế. Hiển thị kết cấu (hoặc nhiều họa tiết) là thứ được gọi bởi thuật toán của bạn. Như là chuyển đổi thông tin phản hồi, shaders hình học, vv Vì vậy, bao nhiêu bạn cần nó phụ thuộc vào những gì bạn đang cố gắng để làm, và có thể có lựa chọn thay thế tùy thuộc vào thuật toán.

Điều bạn có nhiều khả năng bị bắt gặp là tính năng tiện lợi của máy tính để bàn GL 3.x. Ví dụ:

layout(location = 0) in vec4 position; 

Điều này không thể thực hiện được trong ES 2.0. Một định nghĩa tương tự sẽ là:

attribute vec4 position; 

Điều đó sẽ làm việc trong ES 2.0, nhưng nó sẽ không nguyên nhân thuộc tính position được liên kết với các chỉ số thuộc tính 0.Điều đó phải được thực hiện thông qua mã, sử dụng glBindAttribLocation trước khi chương trình được liên kết. Desktop GL cũng cho phép điều này, nhưng cuốn sách bạn liên kết không làm điều đó. Vì lý do rõ ràng (đó là một cuốn sách dựa trên 3,3, không phải là một cố gắng để duy trì khả năng tương thích với các phiên bản GL cũ).

Bộ đệm đồng bộ là bộ đệm khác. Cuốn sách làm cho việc sử dụng tự do, đặc biệt là cho các ma trận phối cảnh được chia sẻ. Đó là một kỹ thuật đơn giản và hiệu quả cho điều đó. Nhưng ES 2.0 không có tính năng đó; nó chỉ có đồng phục cho mỗi chương trình.

Một lần nữa, bạn có thể mã hóa cho tập hợp con chung nếu muốn. Đó là, bạn có thể cố tình bỏ qua sử dụng các vị trí thuộc tính rõ ràng, bộ đệm đồng bộ, các đối tượng mảng đỉnh và tương tự. Nhưng cuốn sách đó không chính xác giúp bạn làm điều đó.

Sẽ lãng phí thời gian của bạn? Vâng, cuốn sách đó không phải là để dạy cho bạn API OpenGL 3.3 (nó làm điều đó, nhưng đó không phải là vấn đề). Cuốn sách dạy bạn lập trình đồ họa; nó chỉ xảy ra khi sử dụng API 3.3. Các kỹ năng bạn học ở đó (ngoại trừ những kỹ năng dựa trên phần cứng) chuyển sang bất kỳ API hoặc hệ thống nào bạn đang sử dụng có liên quan đến trình tạo bóng.

Đặt theo cách này: nếu bạn không biết nhiều về lập trình đồ họa, việc bạn sử dụng API để học là gì không quan trọng. Khi bạn đã nắm vững các khái niệm, bạn có thể đọc các tài liệu khác nhau và hiểu cách áp dụng các khái niệm đó cho bất kỳ API mới nào đủ dễ dàng.

+0

Hoàn hảo - chỉ là những gì tôi cần. Cảm ơn bạn. :) – zeboidlund

+0

Trình định dạng bố cục thực sự có sẵn trong ES 2.0. Bạn cần chỉ định "#extension GL_EXT_separate_shader_objects: bật" trong GLSL của bạn và bạn vẫn sử dụng "thuộc tính" thay vì "trong". –

+1

@NicolBolas không chính xác. Thông số kỹ thuật nêu rõ "cũng có chức năng ARB_explicit_attrib_location" – Speed

1

OpenGL ES 2.0 (và 3.0) phần lớn là tập con của OpenGL trên máy tính để bàn.

Sự khác biệt lớn nhất là không có đường ống hàm cố định cũ trong ES. Đường ống chức năng cố định là gì? Bất cứ điều gì phải làm với glVertex, glColor, glNormal, glLight, glPushMatrix, glPopMatrix, glMatrixMode, vv ... trong GLSL sử dụng bất kỳ của các biến truy cập dữ liệu chức năng cố định như gl_Vertex, gl_Normal, gl_Color, gl_MultiTexCoord, gl_FogCoord, gl_ModelViewMatrix và các ma trận khác từ đường ống chức năng cố định.

Nếu bạn sử dụng bất kỳ tính năng nào trong số những tính năng đó, bạn sẽ có một số công việc bị cắt bỏ cho bạn. OpenGL ES 2.0 và 3.0 chỉ là các trình đổ bóng đơn giản. Không có "3d" được cung cấp cho bạn. Bạn được yêu cầu viết tất cả các phép chiếu, ánh sáng, tham chiếu kết cấu, v.v.

Nếu bạn đã làm điều đó (trò chơi hiện đại nhất có thể làm), bạn có thể không có quá nhiều việc. Nếu mặt khác, bạn đã sử dụng những tính năng OpenGL cũ không được sử dụng mà từ trải nghiệm của tôi vẫn rất phổ biến (hầu hết các hướng dẫn vẫn sử dụng nội dung đó). Sau đó, bạn đã có một chút công việc cắt ra cho bạn khi bạn cố gắng tái tạo các tính năng này một mình.

Có một thư viện mã nguồn mở, regal, mà tôi nghĩ rằng đã được bắt đầu bởi NVidia. Nó được cho là để tái tạo những thứ đó. Hãy nhận biết rằng toàn bộ hệ thống chức năng cố định là khá kém hiệu quả, đó là một trong những lý do nó không được chấp nhận nhưng nó có thể là một cách để làm cho mọi thứ hoạt động nhanh chóng.

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