Việc học OpenGL 2.1 có vô dụng không?


44

Tôi mới tham gia thế giới OpenGL / DirectX 3D và tôi phát hiện ra rằng các thông số kỹ thuật OpenGL 4.1 và GLSL vừa được phát hành hôm nay.

Một người bạn của tôi đã tặng tôi Sách đỏ cho OGL v2.1, nhưng theo như tôi đã đọc, 3.x và 4.x khác rất nhiều so với 2.x và hiện tại có rất nhiều thứ không được dùng nữa.

Tôi có thể sử dụng cuốn sách để bắt đầu tìm hiểu những điều cơ bản về 3D và CG hay tốt hơn là tìm một bản sao mới hơn?


10
Tôi không biết nhiều về OpenGL / DirectX, nhưng tôi thích chơi game trên một chiếc máy hơn một năm tuổi. Tôi tưởng tượng việc bạn biết trước 3.x OpenGL sẽ có ích cho thói quen chơi game của tôi. Chỉ là một ý nghĩ.
Simurr

Tôi không thích cách đặt câu hỏi này. Bạn có thể tạo một trò chơi trong OpenGL 2.1 không? Câu trả lời: dứt khoát . Bạn có ý khi vô dụng ? Bạn có thể tìm hiểu những điều cơ bản về 3D từ một cuốn sách cũ hơn hoặc API đã lỗi thời không? Lại một cách dứt khoát . Đây có phải là cách tốt nhất để làm điều đó không? Có lẽ là không .
bobobobo

Câu trả lời:


18

Trong những lúc như vậy, tôi luôn hướng đến Khảo sát phần cứng hơi nước: http://store.steampowered.com/hwsurvey/ - bạn sẽ thấy tỷ lệ thâm nhập thị trường của các hệ thống lớp DX10 / 11 là gần 80%; điều này tương đương với GL3.3 trở lên. 80% này được giới hạn cho người dùng Vista / 7 - thêm GPU DX10 / 11 với XP và bạn tăng lên chỉ hơn 90%.

Hãy nhớ rằng chúng ta đang nói về những game thủ khó tính hơn một chút ở đây, sau đó bạn cần bắt đầu suy nghĩ về đối tượng mục tiêu của mình. Đây có phải là những người bạn muốn nhắm mục tiêu? Thay vào đó, bạn đang nhắm đến những người có phần cứng downlevel hơn? Còn đồ họa Intel thì sao? Còn người dùng Mac và Linux thì sao? Đây là tất cả các câu hỏi mà bạn cần phải tự trả lời, vì vậy, các hướng dẫn chung chung là cách tốt nhất bạn sẽ nhận được.

Thêm vào đó, bạn cần tính đến thực tế là nếu bạn bắt đầu học ngày hôm nay với ý định vận chuyển thứ gì đó, bạn sẽ xem xét khoảng thời gian tối thiểu khoảng một năm trước khi bạn đến đó (trừ khi chúng ta đang nói về những trường hợp thực sự tầm thường / đơn giản). Với xu hướng tăng dần của các khả năng của gfx đang tiếp tục, chúng tôi đang xem xét việc thực sự gần với sự hấp thu 100% của phần cứng GL3.3 +.

Sau đó, yếu tố đó là với GL2.1 hoặc thấp hơn, bạn sẽ học và sử dụng rất nhiều thứ vớ vẩn cũ kỹ, ngay cả khi bạn hạn chế sử dụng shader và tập con VBO của GL2.1 (phiên bản GLSL downlevel rất khó sử dụng và các VBO phát trực tuyến đều không thể sử dụng được nếu không có GL_ARB_map_buffer_range) - GL3.3 + đã giới thiệu nhiều cách xử lý tốt hơn (và hiệu quả hơn), bạn sẽ sử dụng phần cứng của người chơi tốt hơn (và họ sẽ biết ơn bạn vì điều đó) và bạn sẽ dành nhiều thời gian hơn để viết mã hiệu quả hơn là chiến đấu với một API thực sự không muốn hợp tác với bạn.

Và dĩ nhiên, có tình huống lái xe đáng sợ. Sự thật phũ phàng nhưng sự thật là các trình điều khiển GL trên Windows đang ở trạng thái xin lỗi - NV hỗ trợ những thứ họ không nên, AMD không hỗ trợ những thứ họ nên và với Intel, bạn thực sự cần phải hạn chế chức năng GL mà có một tương đương trong D3D. GL_VERSION càng mới thì càng có nhiều khả năng bạn sẽ gặp phải lỗi trình điều khiển, nhưng đối với GL3.3 thì mọi thứ đã ổn định một cách hợp lý.

Vì vậy, tóm tắt là, trong trường hợp không có bất kỳ thông tin nào khác (đối tượng mục tiêu, v.v.), tôi sẽ nhắm mục tiêu GL3.3 làm đường cơ sở (có thể lấy chức năng từ GL_VERSION cao hơn ở nơi có sẵn và nơi nó không phá vỡ cơ sở mã hóa quá nhiều) trừ khi có một lý do rất cụ thể và được xác định rõ ràng để đi xuống thấp hơn (và tôi muốn hoàn toàn chắc chắn 100% về điều đó thay vì sử dụng một số khái niệm mơ hồ về " nhưng những gì về phần cứng cũ "). Trong trường hợp sau, tôi sẽ không xuống dưới GL2.1 và tôi sẽ tìm kiếm chức năng 3.x càng nhiều càng tốt.


Điểm tuyệt vời trên GL3.3 ~ = DX10 / 11 và chỉ số phần cứng của Steam.
Nate

Chỉ cần cập nhật các số liệu thống kê này - GPU DX10 / 11 + Vista / 7 hiện ở mức ~ 88%, thêm 4,38% khác cho DX10 / 11 GPU + XP và bạn đang nhìn vào mức độ thâm nhập khá thoải mái hơn 90%. Uptake đang tăng nhanh hơn nhiều so với tôi dự đoán khi tôi thực hiện bài viết gốc đó.
Maximus Minimus

"GL3.3 + đã giới thiệu nhiều cách xử lý nhiều thứ tốt hơn (và hiệu quả hơn)" - Giá vé 3,2 so với thế nào? Người dùng Mac chưa nhận được 3.3. Tôi đã cho rằng nó gần giống nhau, nhưng không muốn giả định quá nhiều.
michael.bartnett

38

Tôi sẽ đề nghị gắn bó với giao điểm 2.1 và 3. Vẫn còn nhiều phần cứng và trình điều khiển chỉ hỗ trợ OpenGL 2.1, nhưng các thực tiễn được khuyến khích bởi lõi OpenGL 3 thì tốt hơn. Hướng dẫn này là một nơi khá tốt để bắt đầu (dạy OpenGL 2.0 mà không có các tính năng đã bị phản đối trong 3).


3
+1 cho hướng dẫn Joe Groff. Anh ta đưa bạn qua toàn bộ đường ống trong Chương 2. Và bất kỳ mã "tiện ích" nào anh ta thêm vào chỉ là hai chức năng: một để đọc trong tệp (cho GLSL) và một để đọc hình ảnh TGA (và bạn cũng có thể sử dụng một mã khác thư viện hình ảnh hoặc viết trình tải hình ảnh của riêng bạn sau khi bạn lấy ví dụ làm việc). Mọi thứ khác được giải thích và một phần của hướng dẫn.
michael.bartnett

18

Tôi sẽ nói nó không vô dụng.

Tại sao? Chà, trong khi phần còn lại của thế giới đang hỗ trợ OpenGL 3.x và 4.0, Mac OS X vẫn chỉ hỗ trợ OpenGL 2.1. Và, OpenGL ES, được sử dụng trên hầu hết các nền tảng di động, vẫn được hỗ trợ rộng rãi ở tất cả các phiên bản: 1.0, 1.1 và 2.0; tương đương với OpenGL 1.4, 1.5 và 2.1 tương ứng.

Vì vậy, cho đến khi OpenGL ES 1.0 biến mất hoàn toàn khỏi bề mặt Trái đất, việc biết OpenGL 2.x sẽ không lãng phí.

Tất nhiên, điều đó không có nghĩa là không có giá trị khi sử dụng OpenGL 3.x hoặc 4.0 trên các nền tảng hỗ trợ nó.

Cập nhật: Kể từ khi phát hành Mac OS X Lion (10.7), cấu hình OpenGL 3.2 Core hiện được hỗ trợ trên Mac. Bản phát hành này không dùng phần lớn OpenGL 1.x để đơn giản hóa API. Người dùng các phiên bản OS X cũ hơn (và đồ họa Intel cấp thấp) vẫn bị giới hạn ở OpenGL 2.0 và 2.1. Biết OpenGL 2.x vẫn còn hữu ích và sẽ duy trì như vậy trong một thời gian.


Snow Leopard hỗ trợ hầu hết các phần mở rộng của OpenGL 3 - ngay cả các shader hình học.
Axel Gneiting

@Alex Hỗ trợ các tiện ích mở rộng "nhất" không có nghĩa là lõi GL3 được hỗ trợ. Và chúng ta chỉ nói về 3.x
Matias Valdenegro

@Axel Gneiting: Nó không giống nhau. Hầu hết các tính năng thú vị của OpenGL 3.0+ không có sẵn dưới dạng tiện ích mở rộng. Có một số lượng lớn các thay đổi cốt lõi.
greyfade

12

Câu trả lời của mh01 bao gồm nhiều điều cơ bản, vì vậy tôi sẽ thêm một vài sự thay thế.

OpenGL ES

Hãy nói về ES 2.0 so với máy tính để bàn GL 2.1 so với máy tính để bàn GL 3.3. Với mục đích của cuộc thảo luận này, thuật ngữ "GL XY" sẽ đề cập đến phiên bản OpenGL máy tính để bàn XY, trong khi "ES XY" sẽ đề cập đến OpenGL ES XY

Về mặt cấu trúc , ES 2.0 có nhiều điểm chung với lõi GL 3.3 hơn so với GL 2.1. GL 3.3 và ES 2.0 đều dựa trên shader thuần túy. Cả hai đều dựa trên đối tượng đệm thuần túy. V.v. GL 2.1 có nhiều bẫy hiệu suất và mã hóa giúp bạn dễ dàng viết một ứng dụng GL 2.1 mà không dễ dàng mang theo ES 2.0.

Tuy nhiên, về mặt cú pháp ngôn ngữ tô bóng , GLSL ES 1.00 (ánh xạ sang ES 2.0) trông giống GLSL của GL 2.1 hơn so với GL 3.3. Các từ khóa attributevaryingkhông tồn tại trong 3,3 lõi; nó sử dụng inout, phù hợp và hợp lý hơn rất nhiều khi bạn xử lý hơn 2 giai đoạn đổ bóng (đó là lý do ES 3.0 áp dụng cú pháp GL 3.3).

Thật dễ dàng để ánh xạ các khái niệm đã học trong GL 3.3 đến ES 2.0. Vì vậy, nếu bạn học GL 3.3 cho bất kỳ công cụ nào để làm như vậy, bạn sẽ hiểu cách làm việc trong thế giới ES 2.0. Tất nhiên, bạn sẽ cần phải tìm ra tập hợp con ở đâu (ví dụ: những điều mà GL 3.3 có thể làm mà ES 2.0 không thể), nhưng các khái niệm là như nhau.

Ánh xạ cú pháp của GLSL, để bạn có thể sao chép các shader từ cái này sang cái khác, khó hơn một chút. Nhưng thực sự, tất cả chỉ cần một vài #defines ở đúng nơi. Ngoài ra, GLSL 3.30 có một vài tính năng tương thích ES, tương tự ( highpv.v. (không làm gì trong GLSL trên máy tính để bàn).

Vì vậy, bạn có được một cái gì đó cho ES 2.0 khi học từ GL 3.3 thay vì GL 2.1.


8

Đối với các trò chơi không yêu cầu các thay đổi lớn hơn đối với OpenGL chỉ được hiển thị trong các phiên bản mới hơn, chỉ sử dụng 3.x + giới hạn bạn với loạt nvidia 8 trở lên (không chắc chắn về các nhà cung cấp đồ họa khác mà bạn muốn tìm kiếm). Vì vậy, nếu bạn không sử dụng các tính năng 3.x +, bạn chỉ đang tạo giới hạn nhân tạo, ngăn những người có card đồ họa cũ hơn nhưng mạnh mẽ hơn chơi trò chơi của bạn.

Vì lý do này, tôi khuyên bạn nên tìm hiểu tập hợp con tương thích về phía trước và các phiên bản mới hơn, sau đó chọn phiên bản thấp nhất mà bạn có thể đẩy trò chơi của mình vào một cách hiệu quả. Bạn có thể

Tôi cũng sẽ lưu ý khi trả lời một câu hỏi khác rằng OpenGL: ES 2.0 loại bỏ đường ống chức năng cố định, do đó, nó tương đương với 3.0 hơn 2.1. Cũng luôn hỗ trợ các tính năng khác nhau cho mỗi phiên bản gl được hỗ trợ khi chạy.


4

Tôi muốn nói rằng sẽ tiết kiệm khi học OpenGL bằng Sách đỏ của bạn, chỉ cần bỏ qua những thứ không được dùng trong các phiên bản mới hơn (như glBegin (), glEnd () - thay vào đó hãy sử dụng VBO). Hầu hết các chức năng trong các phiên bản mới hơn đã có sẵn trước khi thông qua các tiện ích mở rộng.


4

Tôi hầu hết đồng ý với thbusch. Nhưng tôi sẽ không hoàn toàn bỏ qua các API không dùng nữa: vẫn còn quá nhiều mã sử dụng chúng. Tôi sẽ trả cho họ ít chú ý hơn, mặc dù. Chẳng có điểm nào, ví dụ, khi học glBegin (), glEnd () đủ kỹ lưỡng để viết mã của riêng bạn bằng cách sử dụng chúng. Nhưng bạn nên nhận ra chúng khi bạn nhìn thấy chúng, và có một số ý tưởng về những gì chúng đang làm.

Nó vẫn đáng để đọc qua toàn bộ Sách đỏ ít nhất một lần, ngay cả khi bạn không xây dựng mã mẫu và thực hiện các bài tập bao gồm các tính năng đã ngừng trong OpenGL 3.x.


3

Câu trả lời ngắn gọn:

Không. Học OpenGL 2.1 là một ý tưởng hay, ngay cả ngày nay, miễn là bạn học được "những phần tốt".

Câu trả lời dài:

OpenGL về cơ bản có thể được chia thành hai phần: "Phần tốt" và "Chức năng kế thừa".

Thành thật mà nói, tôi không thấy nhiều lợi ích trong việc học các chức năng kế thừa ("chức năng cố định"). Tuy nhiên, một phần đáng kể của OpenGL 2.1 (phần tốt) vẫn có sẵn cho đến ngày nay với những thay đổi tương đối nhỏ.

Như vậy, học một số phần của OpenGL 2.1 có thể có lợi. Đặc biệt, OpenGL ES 2 rất phổ biến hiện nay và ES 2 chủ yếu (nhưng không chính xác) là một tập hợp con của OpenGL 2.1. Để lập trình 3D trong điện thoại thông minh, OpenGL ES 2 là điều bắt buộc.

Vậy "tốt" là gì? Về cơ bản, mọi thứ nằm trong "hồ sơ cốt lõi" của OpenGL 3.x (trái ngược với "hồ sơ tương thích") và / hoặc trong OpenGL ES 2.

  • Vertex và mảnh Shader: Tìm hiểu chúng
  • Hoạ tiết: Vẫn tốt.
  • Ma trận: Biết cách chúng hoạt động là có lợi, nhưng glLoadIdentityloại chức năng đó đã lỗi thời và nên tránh
  • Ánh sáng: Biết cách ánh sáng có thể được mô phỏng trong đồ họa máy tính là hữu ích, nhưng glLightfvnên tránh các chức năng ánh sáng chức năng cố định khác.
  • Bộ đệm mảng: Tốt
  • glBegin, glVertex, glColor, glEnd: Tránh họ. Có thể tốt cho thử nghiệm nhanh, nhưng có nhiều cách khác tốt hơn để làm điều tương tự.
  • Danh sách hiển thị: Tránh

Câu hỏi ban đầu tôi đăng câu trả lời này hóa ra là một bản sao, vì vậy tôi đang đăng lại nó ở đây.


1

Tôi không tin đó là một ý tưởng tồi. Rất nhiều khái niệm GL trải rộng trên tất cả các phiên bản OpenGL và cuối cùng vẫn sẽ giúp bạn. Tôi có một số sách OpenGL từ 10 năm trước vẫn còn giúp ích cho đến ngày nay. Tôi sẽ nói rằng nếu bạn chưa quen với OpenGL và có một số sách hay hơn cũ hơn, bạn sẽ học được nhiều và mã vẫn hoạt động. Hầu hết OpenGL đều tương thích ngược (tôi tin).


1

Tôi khuyên bạn nên tìm hiểu những thứ hiện đại trước tiên và chỉ giả vờ những thứ cũ không tồn tại cho đến khi bạn cần nó.

Các công cụ lỗi thời có thể hữu ích trong một số trường hợp, ví dụ nếu bạn đang cố gắng lập trình cho thứ gì đó chỉ hỗ trợ OpenGL 1.5 trở lên (có thể tìm thấy trên các netbook cũ hơn và hệ thống MacOS cũ hơn), OpenGL ES 1.x (iPhone cũ hơn và Android trước 1.6) hoặc OpenGL SC (Tập hợp con quan trọng của Saftey nếu bạn tình cờ lập trình màn hình trên máy bay chiến đấu phản lực). Ví dụ, Minecraft được xây dựng dựa trên OpenGL 1.3 để nó có thể hỗ trợ phần cứng thực sự cũ (nhưng ngay cả điều đó cũng có tùy chọn 'nâng cao').

Nó cũng có thể hữu ích nếu bạn chỉ muốn lấy pixel trên màn hình và không quan tâm đến việc thực hiện theo cách 'đúng'.

Thật hữu ích khi dựa vào một số tính năng mà OpenGL làm theo mặc định khi tìm hiểu, chẳng hạn như thiết lập chế độ xem -1.0 đến 1.0 và hiển thị mà không cần đổ bóng. Điều này cho phép bạn học mà không cần phải làm mọi thứ trong 1 đi.

Nhưng khác hơn là nó nên được bỏ qua nếu có thể.

Tôi đề nghị bạn kiểm tra câu trả lời của tôi ở đâyđây để biết thêm thông tin chi tiế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.