Tài nguyên tốt để học OpenGL hiện đại (3.0 trở lên)? [đóng cửa]


73

Tôi tình cờ tìm kiếm một tài nguyên tốt để bắt đầu với OpenGL (3.0 trở lên). Chà, tôi đã tìm thấy rất nhiều sách nhưng không ai trong số chúng có thể được coi là một tài nguyên tốt!

Dưới đây là hai ví dụ:

Hướng dẫn lập trình OpenGL (ấn bản thứ 7) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Đây là ĐẦY ĐỦ tài liệu không dùng nữa! Hầu như tất cả các chương bắt đầu với một lưu ý về điều đó.

OpenGL Superible (Phiên bản thứ 5) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Cuốn sách này sử dụng một thư viện được tạo bởi tác giả để giải thích các đối số chính, ẩn những gì bạn muốn tìm hiểu! Tôi không muốn học cách sử dụng thư viện của bạn! Tôi muốn học OpenGL!

Tôi hy vọng rằng bạn hiểu đây không phải là câu hỏi giống như "hey tôi không thể sử dụng Google ... hãy cho tôi biết cách học OpenGL". Tôi vừa hoàn thành một tìm kiếm đầy đủ và sâu sắc nhưng tôi không thể tìm thấy một nguồn tài nguyên tốt và đầy đủ để tìm hiểu OpenGL "mới" tránh các chủ đề không dùng nữa.

Ai đó có thể hướng tôi đi đúng hướng? Tôi biết C ++ và tôi có 10 năm kinh nghiệm phát triển ... nơi tôi có thể tìm thấy một nguồn tài nguyên tốt?! Tôi muốn dành thời gian cho nó và tôi muốn tìm hiểu sâu.

Câu trả lời:


69

Tôi đồng ý về những cuốn sách trên với một vài lưu ý:

  • Hướng dẫn thứ 8 về lập trình OpenGL hiện đã được phát hành và đã được làm lại cho OpenGL 4.3 hiện đại.

  • Phiên bản SuperBible 5, sẽ cung cấp cho bạn một thư viện nạng để bắt đầu nhưng khi bạn đọc cuốn sách, bạn sẽ thực hiện lại chức năng của thư viện đó, vì vậy đến cuối của nó, bạn nên hoàn toàn thành thạo. Tôi cũng khuyên bạn nên gói nội dung OpenGL vào thứ gì đó nếu bạn sử dụng ngôn ngữ hướng đối tượng. Tôi đang làm việc trên thư viện của riêng mình để giải trí, dường như là hướng đi, tự mình thực hiện nó Tôi hiểu tất cả mọi thứ trong và ngoài tôi chỉ cần đưa vào các bit tôi thực sự sử dụng. Ngoài ra, bạn có thể trừu tượng hóa một số thứ như gửi dữ liệu tới các shader (không phải là ShinyM vật liệu.setColor (Đỏ) đẹp hơn nhiều), điều này cũng có thể cho phép bạn nhập một số nội dung bằng cách cung cấp các lựa chọn thay thế. Ngoài ra còn có oglplus .

Vấn đề chính với việc học OpenGL 'cốt lõi' hiện đại là để có được một đường ống cơ bản và chạy ngay cả khi chỉ để vẽ một khối lập phương, bạn cần hiểu những điều sau:

  • Các hoạt động ma trận (sử dụng GLM nếu bạn sử dụng C ++, bạn cũng sẽ cần một phiên bản SDK không chính thức của MatrixStack OpenGL tại đây hoặc đơn giản của tôi ở đây .)
  • Lập trình shader GLSL.
  • liên kết dữ liệu với shader và Vertex Buffer Object. Nếu bạn muốn học chỉ là hồ sơ cốt lõi thực sự, tất cả chúng sẽ cần phải được thực hiện đồng thời và nếu bất cứ điều gì bị hỏng, bạn sẽ không nhìn thấy bất cứ điều gì và gần như không có manh mối nào. Điều đó cũng không bao gồm những thứ như ánh sáng cơ bản (nơi bạn cần học các thuật toán tạo bóng ngoài ngôn ngữ lập trình).

Nhưng bạn không cần phải bắt đầu trong phần sâu hơn với hồ sơ cốt lõi. Sử dụng một số chức năng không dùng nữa lúc đầu, mọi thứ vẫn sẽ hỗ trợ, sau đó hiện đại hóa nó.

Một vấn đề khác là OpenGL 'hiện đại' thực sự có thể đề cập đến 3 điều:

  • Đầu tiên là đường ống đổ bóng lập trình trái ngược với đường ống chức năng cố định. Các kỹ thuật 'hiện đại' cốt lõi đã có thể kể từ khi OpenGL 2.0 được phát hành năm 2004 khi các shader được giới thiệu (các hướng dẫn không được cập nhật) cũng có 1.5 đối tượng đệm của Vertex, một nền tảng khác của OpenGL hiện đại. Một vấn đề là ngay cả ngày nay các nhà phát triển OpenGL thậm chí có thể không tận dụng được tất cả những thứ đó, có rất nhiều netbook tồi tệ với những chipset Intel chỉ hỗ trợ OpenGL 1.5 và các điện thoại như iPhone / Android cũ chỉ hỗ trợ OpenGL ES 1.1. Sự khác biệt thực sự duy nhất giữa công cụ này trong OpenGL 2.0 và OpenGL 3.x / 4.x là bắt buộc đối với cấu hình cốt lõi.

  • OpenGL hiện đại cũng có thể đề cập đến những thứ mới trong 3.x, 4.x. Những điều như Vertex mảng đối tượng , bộ đệm khung Objects , Uniform Buffer Objects / std140 , vòng loại bố trí , thủ tục con GLSLvân vân Nhiều người trong số tôi đã tìm thấy có thể làm cho mọi thứ tốt hơn nhiều để lập trình với. Họ cũng có thể tinh tế thay đổi đường ống động cơ tổng thể của bạn. Chúng cũng là những thứ mà với một chút nỗ lực, bạn có thể sao lưu bằng cách tạo các hàm trợ giúp, v.v. (Ví dụ viết một đối tượng trình quản lý đổ bóng chung mà bạn có thể sử dụng để đặt đồng phục, nếu UBO được hỗ trợ, hãy sử dụng cách khác để quản lý tải lên các giá trị cho trình đổ bóng theo cách thủ công , có thể đặt một công cụ viết lại shader nhỏ vào đó để tự động hóa nó). Công cụ này chỉ chạy trên thẻ video mới, bạn sẽ không thấy bất kỳ netbook nào hỗ trợ nó hoặc bất kỳ máy chơi trò chơi video thế hệ hiện tại nào (chúng sử dụng tập hợp con OpenGL của riêng chúng tương tự như OpenGL ES). OSX mới nhất chỉ có 3.

  • OpenGL thế hệ tiếp theo cực kỳ hiện đại. OpenGL 4.3 vừa được phát hành. Nó đi kèm với các shader tính toán, bộ đệm lưu trữ shMultiDrawElementsInirect và shader. Điều này cho phép một đường ống cơ bản khác nhau, nơi bạn tải tất cả dữ liệu đỉnh lên GPU và sau đó sử dụng các trình đổ bóng tính toán để tính toán những gì sẽ được rút ra thay vì thực hiện trong chương trình của bạn. Thật không may, điều này là rất mới vì vậy tôi không biết bất kỳ hướng dẫn phong nha nào về nó. Hãy xem bài đánh giá OpenGL 4.3 đưa ra phác thảo về cách thức hoạt động của nó (tác giả cũng nói rằng có một bài viết GPU Pro sẽ được phát hành giải thích về nó). Là thương hiệu mới, nó sẽ không được hỗ trợ ở bất cứ đâu trong giai đoạn này (trừ khi bạn sử dụng thẻ nvidia mới hơn với trình điều khiển beta). Mặc dù bạn có thể sử dụng OpenCL / CUDA để triển khai một số phần mềm.

Tôi sẽ bỏ qua glBegin, glEnd, glVertex *, glN normal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix, v.v. Thay vào đó, hãy bắt đầu với việc học Đối tượng đệm của Vertex mà không cần đổ bóng, đừng thử 3D tại thời điểm này chỉ là một hình tam giác trắng phẳng để bạn không phải làm việc với các thao tác 3d bằng ma trận (vì bạn sẽ cần phải học cách liên kết chúng với trình tạo bóng sớm không có ý nghĩa trong việc học theo cách cũ). Tiếp theo thêm vào trong các shader, bạn sẽ cần thay đổi cách các đối tượng bộ đệm đỉnh của bạn bị ràng buộc vì bây giờ bạn sẽ muốn sử dụng các thuộc tính đỉnh. Tìm hiểu làm thế nào để giao tiếp tài sản với họ thông qua đồng phục. Sau đó tìm hiểu các hoạt động ma trận với GLM, liên kết các ma trận với các shader và thực hiện 3D. Một khi bạn đã hoàn thành thì về cơ bản, đó chỉ là học những thứ nâng cao hơn như kết cấu,

Một số hướng dẫn OpenGL hiện đại trực tuyến nói chung, bao gồm các đường dẫn lập trình shader mà hầu hết chúng hoạt động với OpenGL 2.0+:

Đối với các tài nguyên học tập chung khác. OpenGL ES có thể là một điểm khởi đầu tốt. OpenGL ES đã loại bỏ tất cả những thứ không dùng nữa. OpenGL 4.1 có khả năng tương thích hoàn toàn với OpenGL ES, do đó, có thể lấy một chương trình OpenGL ES và chạy nó trong OpenGL 4.1. Và các nguyên tắc cơ bản là giống nhau cho cả hai.

Một số điều cần lưu ý là OpenGL ES 3.0 vừa được phát hành nhưng vì nó mới, nó sẽ không có bất kỳ hướng dẫn hoặc hỗ trợ phần cứng nào. Nó dường như không có bất kỳ thay đổi cơ bản chính nào (như sự khác biệt giữa mô hình đường ống cố định và mô hình đổ bóng mà chúng ta đã thấy với OpenGL ES 1.0-> 2.0). Vì vậy, bạn có thể sẽ không học được bất kỳ thứ lỗi thời.

Ngoài ra, OpenGL ES thường sẽ sử dụng EGL, do đó bạn sẽ cần học một cách khác để mở Cửa sổ nhưng điều đó không quá khó. Mặt khác, có một vài trình bao bọc / trình giả lập OpenGL ES xung quanh hoặc bạn có thể tìm hiểu trên Android / iPhone nếu bạn có (hoặc xem xét bằng cách sử dụng trình giả lập của chúng).

Hướng dẫn lập trình Addison Wesley OpenGL ES 2.0 tương đương với sách đỏ.

Bạn cũng có thể xem các công cụ tập trung vào trình tạo bóng GLSL vì đó là nơi phần lớn cuộc sống OpenGL hiện đại. Bạn chỉ cần đảm bảo những gì bạn học được bao gồm các mặt 'keo' ràng buộc OpenGL.

Kiểm tra phiên bản OpenGL Shading Language 2nd (Orange Book).

Sách dạy nấu ăn ngôn ngữ OpenGL 4.0 bao gồm một số nội dung OpenGL hay nhưng không phải là một hướng dẫn toàn diện. Nó chắc chắn đáng xem để có được một số hiểu biết trong các thực tiễn OpenGL thế giới thực mới nhất như các đối tượng bộ đệm thống nhất và các chương trình con GLSL.

Cuối cùng, bạn có thể có một cái nhìn về WebGL, mặc dù trong JavaScript sẽ có một chút khác biệt và khó gỡ lỗi hơn nhiều.


3
+1, wow. Sự thay đổi nhỏ duy nhất mà tôi đề xuất là sử dụng mảng đỉnh phía khách hàng khi bắt đầu vì chúng là đường dẫn dễ dàng hơn đến VBO nhưng không có một số bẫy gấu mà người mới bắt đầu có thể rơi vào.
Maximus Minimus

1
Tôi nghĩ rằng tốt nhất là tránh học tập / sử dụng chức năng không dùng nữa vì đó sẽ là điều không thể học được. Những thứ không dùng nữa mà tôi đề xuất sử dụng là những thứ mà OpenGL sẽ làm theo mặc định, như có thể kết xuất mà không cần sử dụng shader và giả sử thuộc tính đỉnh 0 là vị trí cả hai sẽ phát nổ khi bật cấu hình lõi.
David C. Giám mục

2
Phiên bản thứ 6 của SuperBible vừa được phát hành và nó RẤT NHIỀU so với phiên bản thứ 5. Tôi rất, rất khuyến khích điều đó, thật dễ dàng để theo dõi và tìm hiểu OpenGL hiện đại.
Philip

2
Trang web gltut Arcsynt tổng hợp không còn nữa, nhưng hướng dẫn vẫn có thể được tải xuống từ bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

15

Hãy quên sách ít nhất cho đến khi phiên bản thứ 8 của hướng dẫn lập trình xuất hiện.

Bên cạnh hướng dẫn được đề cập , tôi thấy trang web này hữu ích, vì nó đi qua những điều cơ bản khá nhanh. Cả hai đều là một giới thiệu tuyệt vời về OpenGL hiện đại. Khi bạn đã vượt qua điều đó, bạn sẽ chỉ cần tài liệu, OpenGL rất dễ sử dụng một khi bạn đã quen với nó. Phần còn lại là lý thuyết đồ họa máy tính và toán học.


11

Tôi đã ở trong hoàn cảnh giống hệt như bạn và cuối cùng đã tìm thấy những gì tôi cần để đi.

Đầu tiên ở đây: http : //www.arcsynt tổng hợp.org / gltut / . Trang web này là tuyệt vời, ví dụ làm việc tốt và giải thích sâu sắc về những gì đang xảy ra. Mặc dù mã được viết bằng C ++, tôi đang sử dụng mã này để dạy tôi viết các bản demo OpenGL trong Lisp. Nó cũng hoàn toàn không có cách làm cũ, vì vậy bạn không phải lo lắng về việc từ bỏ thói quen xấu.

Tôi sẽ nhấn mạnh rằng mặc dù "chỉ là một trang web khác" tôi chưa tìm thấy bất kỳ cuốn sách nào đưa ra lời giải thích rõ ràng và súc tích về những điều cơ bản như điều này.

Khi bạn đã truy cập vào trang web ở trên, bạn sẽ có một nắm bắt cơ bản về shader và rất nhiều điều bạn cần biết bây giờ có thể được googled (có một cái nhìn tốt về tài nguyên opengl es hoặc webgl khi họ loại bỏ tất cả những thứ không dùng nữa) hoặc được tìm thấy trong trang wiki opengl. Cái sau là khó hiểu khủng khiếp nếu bạn không có các nguyên tắc cơ bản từ trang web tổng hợp dưới vành đai của mình nhưng khá hữu ích khi bạn biết đại khái những gì bạn đang tìm kiếm.

Ngoài ra, để có cái nhìn thực sự sâu sắc về GLSL, hãy tham gia: Ngôn ngữ Shader OpenGL (Sách Cam) Tôi đang làm việc rất chậm nhưng sẽ cho bạn hiểu về cách viết shader để cho phép bạn tiếp tục theo đuổi điều này. Tôi sẽ cảnh báo bạn rằng cuốn sách này có, theo lời của một nhà phê bình, "200 trang nội dung chất lượng hàng đầu được đóng gói thành một cuốn sách 600 trang" nhưng lịch sử và thông tin bổ sung có thể cung cấp ngữ cảnh bạn cần để hiểu các tuyến đường mà OpenGL như một tiêu chuẩn đã đi xuống (dù sao nó cũng giúp tôi!)

Tôi hy vọng điều này sẽ giúp và may mắn nhất, tôi mong được thấy / chơi công việc của bạn trong tương lai!

CẬP NHẬT

Có vẻ như arcsynt tổng hợp là đáng buồn ngoại tuyến, tuy nhiên trang web đã được chuyển đổi thành pdf ở đây và mã đã được nhân đôi ở đây .

Cũng trong vài năm kể từ khi câu trả lời ban đầu của tôi learnopengl.com/ trở nên tuyệt vời. Mặc dù tôi vẫn đề xuất tổng hợp cho sự xuất sắc thô của phần giới thiệu về opengl hiện đại, trang web learnopengl đã trình bày nhiều hơn về việc arcsystulation đã làm và quản lý nó bằng ngôn ngữ có thể tiếp cận, chúng tôi đã tạo ra các ví dụ và mã nguồn mở. Về cơ bản, nó rất tốt, hãy kiểm tra xem!

Đối với sách tôi không đi quá xa với sách màu cam nhưng có thể đề xuất phiên bản thứ ba của 'Kết xuất thời gian thực' . Một khi bạn đã sẵn sàng cho các công cụ kỹ thuật, cuốn sách này là một mỏ vàng.


2
CHÚA ƠI! liên kết đầu tiên là tuyệt vời!
MatterGoal

Trang web gltut không còn nữa, nhưng hướng dẫn vẫn có thể được tải xuống từ bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

Điểm hay, tôi cũng sẽ cập nhật bài viết của mình với các khuyến nghị bổ sung.
Baggers


5

Hai trang web rất hữu ích cho tôi là: http : //www.arcsynt tổng hợp.org / gltut /http://ogldev.atspace.co.uk/

Ngoài ra, wiki OpenGL là một tài nguyên cực kỳ tốt và cập nhật.

Khi bạn đã vượt qua những điều này, tôi khuyên bạn nên cắn viên đạn và đọc thông số kỹ thuật OpenGL. Sau đó, bạn sẽ là một pro.


Vâng, tôi thấy các hướng dẫn trực tuyến hữu ích hơn nhiều so với hầu hết các cuốn sách. Phiên bản SuperBible thứ 5 cực kỳ đáng thất vọng.
Philip

Trang web gltut không còn nữa, nhưng hướng dẫn vẫn có thể được tải xuống từ bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

Cuốn sách hay nhất mà tôi đã đi qua bao gồm OpenGL "hiện đại" là http://www.packtpub.com/opengl-4-0-shading-lingu-cookbook/book

Mặc dù là "sách dạy nấu ăn", nhưng nó sẽ hướng dẫn bạn các bước cần thiết để thiết lập kết xuất và loại thư viện đồng hành nào bạn sẽ cần (hình ảnh lib, lib toán học vector).

Ngoài ra, nó còn trải qua tất cả các loại phổ biến mà bạn có thể muốn sử dụng OpenGL, mà không đào sâu vào bất cứ thứ gì (như đối với bóng, nó bao gồm ánh xạ bóng và lọc bản đồ bóng, nhưng không đi sâu vào bất kỳ thứ gì nữa phương pháp ánh xạ bóng phức tạp).

Tôi cũng khuyên bạn nên lấy cuốn sách màu cam.


Cảm ơn bạn @Jari. Không phải là "chỉ" về shader sao? Ý tôi là, cuốn sách này có giới thiệu về các kỹ thuật OpenGL cũng như các shader không?
MatterGoal

2
@MatterGoal: OpenGL hiện đại gần như hoàn toàn dựa trên shader. Cuốn sách này đề cập đến khía cạnh ràng buộc OpenGL của mọi thứ. Tôi cũng giới thiệu cuốn sách này nhưng với tư cách là người bạn đồng hành với một thứ khác, nó không thực sự dành cho cuốn sách học tập cốt lõi nhưng cho thấy một số cách sử dụng thực tế tuyệt vời trong thực tiễn moddrn.
David C. Giám mục

4

Một số hướng dẫn và nội dung khác không được đề cập nhưng hữu ích


+1 Để thêm vào danh sách, có các hướng dẫn OpenGL của Aks không có cấu trúc lắm nhưng có đủ thông tin để thiết lập mọi thứ.
huyền thoại2k
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.