Có rất nhiều điều bạn có thể học hỏi từ. Đây là suy nghĩ của tôi về từng người, từ góc nhìn của một người mới đối với OpenGL.
Ví dụ về OpenGL
Có rất nhiều mã ví dụ ngoài đó mà bạn có thể đọc. Các ví dụ của G-truc khá rộng rãi và bao gồm rất nhiều tính năng nâng cao.
Tuy nhiên, nếu bạn là người mới bắt đầu , học từ các ví dụ là một cách học kinh khủng. Đọc mã mà bạn không thực sự hiểu sẽ không dạy bạn tại sao nó hoạt động. Thật vậy, văn bản trên trang được liên kết ở trên nói rõ và đúng rằng các ví dụ không dành cho người mới bắt đầu.
Học từ mã nguồn trần, trừ khi nó được bình luận nhiều (tại thời điểm đó là hướng dẫn) không phải là một điều dễ dàng. Cố gắng làm như vậy khuyến khích lập trình theo kiểu sùng bái hàng hóa và mã hóa sao chép và dán. Rất dễ để thuyết phục bản thân rằng bạn hiểu cách thức hoạt động của một cái gì đó khi tất cả những gì bạn thực sự làm chỉ là sao chép mã từ nơi này sang nơi khác. Bạn có thể kết hợp và kết hợp mọi thứ, nhưng sự hiểu biết thực sự rất khó đạt được nếu không có tài liệu giảng dạy đúng đắn.
Sách OpenGL
Có một số lượng khá lớn các sách có thể mua thực tế để phát triển OpenGL. Tôi sẽ che đậy suy nghĩ của tôi về hai lớn nhất ở đây.
Sách đỏ OpenGL
Điều này là một số vấn đề từ quan điểm hoàn toàn thực tế. Xem, phiên bản thứ 7 bao gồm GL 3.0 và 3.1. Cái nào khá cũ. Đã có rất nhiều tính năng hữu ích được thêm vào OpenGL kể từ đó, các tính năng thay đổi cách bạn sẽ viết mọi thứ. Và không phải tất cả chúng đều là tính năng phần cứng.
Phiên bản thứ 8 sẽ sớm ra mắt và sẽ bao gồm 4.1. Không có thông tin về việc liệu nó có bao gồm các công cụ cố định cũ hay không.
Tôi muốn nói cuốn sách này là OK. Vấn đề lớn nhất với nó là tổ chức thông tin. Nó giống như một hướng dẫn tham khảo toàn diện hơn là một cuốn sách dành cho học tập. Ý tôi là đây.
Một trong những điều quan trọng nhất mà người ta nên làm khi giảng dạy là không gây quá tải cho học sinh với thông tin không quan trọng. Nhưng Redbook làm chính xác điều đó. Khi giới thiệu tài liệu, nó giới thiệu rất nhiều tài liệu. Phần lớn nó không cần thiết cho nhiệm vụ trong tầm tay.
Những gì bạn nói về và khi bạn nói về nó là rất quan trọng để làm cho cuốn sách của bạn trở thành một tài nguyên học tập tốt. Sách đỏ không bao giờ giữ lại thông tin cho đến một thời điểm thích hợp hơn. Khi nó nói về cách vẽ hình tam giác và nguyên thủy, nó nói về tất cả mọi thứ về việc vẽ chúng, tất cả cùng một lúc. Nó bao gồm mọi tùy chọn, mọi chức năng, mọi tham số, v.v.
Đó không phải là một tổ chức thông tin tốt.
OpenGL tuyệt vời
Phiên bản thứ năm của cuốn sách này chỉ bao gồm lõi GL 3.x, do đó không có chức năng cố định.
Tuy nhiên, tổ chức chung của cuốn sách ít nhiều giống với tổ chức của phiên bản thứ tư. Điều này dường như là không thể vì phiên bản thứ 4 đã sử dụng chức năng cố định và không giới thiệu các shader cho đến sau này.
Cách thức này được thực hiện là khiếu nại số 1 của tôi về cuốn sách. Về cơ bản, tác giả đã xây dựng một thư viện thực hiện một dạng OpenGL chức năng cố định. Nó bao bọc các VAO, đối tượng đệm, đổ bóng và nhiều thứ khác, để anh ta có thể vẽ các đối tượng, toán ma trận và kết cấu mà không cần phải nói chi tiết về cách thức hoạt động của đường ống GL.
Bằng cách ẩn tất cả các chi tiết này, nó làm cho vật liệu dễ tiêu hóa hơn. Nhưng bạn sẽ thường thấy mọi người rời khỏi Siêu thị mà không biết làm thế nào để thực sự hoạt động mà không có thư viện. Họ không thực sự hiểu cách các shader kết nối với các đối tượng đệm, cách dữ liệu chảy lên đường ống, v.v.
Đó là một cuốn sách phục vụ, moreso hơn Redbook. Nếu vẫn thất bại, nó sẽ thực hiện công việc. Nhưng tôi nghĩ nó có thể tốt hơn.
Ngoài ra, theo một số nhà phê bình, dường như bỏ lỡ một số thông tin hữu ích nhất định, như đóng gói dữ liệu thuộc tính bằng cách sử dụng các giá trị chuẩn hóa và như vậy.
Tài liệu trực tuyến OpenGL
Có nhiều tài liệu trực tuyến mà người ta có thể học hỏi.
Hướng dẫn của NeHe
Các hướng dẫn của NeHe , như những người khác đã nêu, cực kỳ lỗi thời. Họ tập trung vào OpenGL chức năng cố định. Người ta thường nói rằng rất dễ để học GL chức năng cố định, điều này đúng. Nhưng điều đó không làm cho nó một ý tưởng tốt.
Hiểu làm thế nào các đường ống chức năng cố định thực sự hoạt động là khó khăn. Tôi sẽ đi xa hơn để nói rằng nó khó hơn học shader. Một khi bạn nhận được nó, shader rất đơn giản. Hiểu được sự phức tạp của công cụ môi trường kết cấu, bộ kết hợp và không có gì, rất khó và đòi hỏi phải thường xuyên truy cập tài liệu tham khảo để đảm bảo mọi thứ được thiết lập đúng. Ngay cả khi bạn hiểu chính xác mọi thứ, thật dễ dàng mắc một lỗi nhỏ khiến mọi thứ bị phá vỡ.
Sự khác biệt là bạn có thể làm cho chức năng cố định hoạt động mà không hiểu nó. Điều này khuyến khích lập trình sùng bái hàng hóa. Nó làm cho nó có thể có được một cái gì đó trên màn hình mà không thực sự biết những gì một người đang làm. Trên các diễn đàn OpenGL.org, chúng tôi thấy các câu hỏi liên tục về các chi tiết vụn vặt xung quanh chức năng cố định, từ những người không biết cách hoạt động của gluLookAt, đến những khó khăn với ánh sáng, đến những người đang cố gắng để có được hiệu ứng đặc biệt nào đó để làm việc với môi trường kết cấu.
Vì vậy, không, tôi không nghĩ NeHe là một cách tốt để học OpenGL.
Bình luận ở trên có thể được sử dụng cho bất kỳ hướng dẫn không dựa trên shader nào, như Swiftless , Ngọn hải đăng , v.v.
Lập trình OpenGL của Wikibook
Lập trình OpenGL Wikibook có lẽ tương đương với NeHe. Nó bao gồm GL phiên bản 2.1, vì họ muốn giữ cho nó phù hợp với các nền tảng di động. Nếu điều đó quan trọng với bạn, thì bằng mọi cách hãy nhìn vào đây.
Vấn đề khác với NeHe, và do đó Wikibook này, là sự tập trung lớn vào mã nguồn. Tỷ lệ văn bản trên mã là rất nhỏ; có rất nhiều mã, nhưng văn bản không thực sự giải thích cách thức hoạt động của tất cả.
Ví dụ, nhìn vào phần dưới của Hướng dẫn 2. Nó giới thiệu sự pha trộn. Nó không nói cách pha trộn hoạt động. Nó không nói những gì glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
thực sự có nghĩa hoặc làm. Nó chỉ nói, "Đây là một số mã làm cho mọi thứ minh bạch."
Đó không phải là môi trường học tập tốt nhất.
Hướng dẫn chưa hoàn thành
Swiftless có một tập hợp các hướng dẫn 4.x OpenGL . Phần mềm sầu riêng cũng có một số hướng dẫn OpenGL dựa trên shader . Và có hướng dẫn "OpenGLBook.com" .
Điểm chung của tất cả là ... chúng chưa hoàn thiện và bị bỏ rơi. Tất cả họ có khoảng 4-5 hướng dẫn, và sau đó đã bị loại bỏ. Không ai trong số họ đạt được kết cấu, ánh sáng, hoặc bất cứ điều gì như thế. Vâng, Durian đã nhấn kết cấu nhưng không chiếu sáng.
Nhiều thứ có thể được gleemed từ họ, nhưng cũng có nhiều thứ còn thiếu.
Tự xấu hổ
Xem lại các hướng dẫn Đồ họa 3D hiện đại của riêng tôi sẽ là một xung đột lợi ích khủng khiếp. Vì vậy, thay vào đó, tôi sẽ nói rõ về tổ chức đằng sau họ và lý do tại sao tôi nghĩ họ tốt.
Ồ và vâng, tôi đang làm việc trên Hướng dẫn 17. Dự án chưa chết.
Ba chương đầu tiên thực sự là về cách học đường ống OpenGL hoạt động. The Superible thất bại vì nó cố gắng che giấu chi tiết. Thay vào đó, tôi cố gắng giải thích những chi tiết đó thực sự, thực sự tốt. Nhiều lần. Giới thiệu giải thích các đường ống trong văn bản đơn giản. Hướng dẫn đầu tiên giải thích nó với mã đệm. Và hướng dẫn thứ hai ghé thăm nó nhiều hơn.
Từ đó, tôi tự nhiên chuyển sang định vị đồ vật. Điều này giới thiệu đồng phục, nhưng tôi không muốn gây nhiễu đồng phục và chiếu phối cảnh cùng một lúc. Vì vậy, tôi tách hai khái niệm. Sau khi chiếu, bộ đệm sâu dường như là một bước tiếp theo hợp lý, tiếp theo là cách các phép biến đổi và ma trận hoạt động. Sau đó, máy ảnh. Xoay vòng với tứ phương là một bổ sung muộn, nhưng tôi cảm thấy rằng đó là một điều quan trọng để nói về lập trình viên đồ họa vừa chớm nở.
Các hướng dẫn ánh sáng một lần nữa xây dựng cái khác. Khuếch tán, sau đó chiếu sáng mỗi mảnh, sau đó đầu cơ. Phạm vi năng động là một lựa chọn thú vị. Hầu hết các tài liệu giới thiệu cố gắng tránh xa điều đó, nhưng tôi nắm lấy nó. Bạn không phải là một lập trình viên đồ họa ngày nay nếu bạn nghĩ cường độ ánh sáng luôn nằm trong phạm vi [0, 1]. Và bạn không phải là một lập trình viên đồ họa ngày nay nếu bạn không biết cách duy trì một đường ống màu tuyến tính.
Cái cuối cùng trong ánh sáng, trên những kẻ mạo danh, là một thứ kỳ lạ. Tôi cố gắng thiết kế các hướng dẫn giải quyết vấn đề thay vì chỉ hiển thị một số chức năng OpenGL, đặc biệt khi cuốn sách tiếp tục. Rất nhiều thiết kế hướng dẫn của tôi đến từ việc tìm cách nói về một số chủ đề nhất định trong khi vẫn biến chúng thành vấn đề thực sự và không rõ ràng, "chúng ta đang học X ngay bây giờ." Các shader hình học là một khó khăn, bởi vì chúng không thực sự giải quyết được rất nhiều vấn đề.
Những kẻ mạo danh đại diện cho một vấn đề mà GS thực sự hữu ích để giải quyết. Ngoài ra, nó cho phép tôi nói về những thứ ít được sử dụng khác như discard
và thay đổi độ sâu của một mảnh. Và nó thực sự cho thấy sức mạnh của shader: bạn có thể biến một hình vuông phẳng trở thành một hình cầu.
Các hướng dẫn kết cấu cũng thú vị. Một trong những lý do tôi không nói về kết cấu màu khuếch tán cho đến khi lý do thứ ba là không nói về kết cấu sRGB trong một thời gian. Bằng cách này, tôi có thể nói về các vấn đề cơ bản xung quanh kết cấu (tải dữ liệu, đưa chúng vào shader, lọc, kẹp, v.v.) mà không phải xử lý các vấn đề tuyến tính. Vì vậy, sau đó tôi có thể dành toàn bộ hướng dẫn về chủ đề đó. Điều đó cho phép tôi thực sự, thực sự nhấn mạnh tầm quan trọng của việc duy trì một đường ống màu tuyến tính.
Đó là một trong những thú cưng của tôi.