Bắt đầu với OpenGL khi hầu hết các hướng dẫn đã hết hạn [đã đóng]


16

Tôi chắc chắn đã có một loạt các câu hỏi như thế này được hỏi, nhưng việc cập nhật liên tục thư viện OpenGL sẽ ném chúng đi, và trong một hoặc hai tháng nữa, các câu trả lời ở đây sẽ lại vô giá trị.

Tôi đã sẵn sàng để bắt đầu lập trình trong OpenGL bằng C ++. Tôi đã có một trình biên dịch hoạt động (DevCpp; KHÔNG yêu cầu tôi chuyển sang VC ++ và đừng hỏi tôi tại sao). Bây giờ tôi chỉ tìm kiếm một hướng dẫn vững chắc về cách lập trình với OpenGL. Trợ lý của tôi đã tìm thấy hướng dẫn được cung cấp bởi NeHe Productions, nhưng khi tôi đến tìm hiểu, đó là CÁCH RA NGÀY! (mặc dù tôi đã kéo một cửa sổ cơ bản để hỗ trợ khung nền OpenGL)

Sau đó, tôi lên mạng và tìm thấy OpenGL SuperBible, có vẻ như sử dụng freeglut? Nhưng điều tôi muốn biết là liệu phiên bản thứ 5 của SuperBible có được cập nhật nữa hay không. Đề xuất về freeglut tôi thấy rằng phiên bản mới nhất là 2.6.0 nhưng bây giờ là 2.8.0!

  • OpenGL SuperBible vẫn là một nơi tốt và khá cập nhật để bắt đầu?
  • Có nơi nào tốt hơn để học OpenGL không?
  • Tôi có được phép lưu trữ freeglut trong thư mục bao gồm DevCpp (có thể trong GL) không, hoặc có một số thủ tục quan trọng không?
  • Có bất kỳ ý kiến ​​hoặc đề xuất nào mà tôi không nghĩ sẽ hỏi vì tôi chỉ mới bắt đầu?

@dreta đã xóa một số thứ cho tôi, vì vậy bây giờ tôi có một ý tưởng tốt hơn về những gì cần hỏi:

Tôi nghĩ rằng tôi muốn bắt đầu với OpenGL bằng thư viện trình bao bọc thay vì truy cập trực tiếp vào OpenGL.
Tôi chỉ nghĩ rằng, đối với người mới bắt đầu, tôi sẽ dễ dàng hơn để lập trình và có được kết quả tốt, trong khi tôi chưa phải hiểu tất cả các chi tiết nghiệt ngã (như @stephelton đã đề cập).

Vấn đề là, tôi không thể tìm thấy bất kỳ thư viện nào không có tài liệu tham khảo không xác định đến các chức năng không còn được hỗ trợ. Freeglut âm thanh hoạt động, nhưng nó vẫn sử dụng GLU.
Có ai biết tôi có thể làm gì không?
Ngoài ra, tôi đã thử biên dịch nguồn SuperBible đầu tiên, nhưng tôi đã gặp lỗi do GLAPI không được xác định là một loại, lỗi bắt nguồn từ thư viện GLU.

Tôi muốn sử dụng SuperBible, nhưng tôi không biết cách khắc phục điều này.


2
Bạn nên chuyển sang GCC.
thịt

DevCpp chỉ là một IDE; chạy GCC (mingw để được cụ thể). Nhưng vì nó đã được đề cập, CDT Eclipse sẽ thích hợp hơn, vì nó đã không bị bỏ rơi trong 10 năm qua.
Casper Beyer

4
@Casper Người thừa kế của di sản DevCpp là Code :: Blocks và vẫn được cập nhật thường xuyên.
Alex Shepard

1
Nếu bạn muốn có một thư viện trình bao quanh OpenGL, tôi khuyên bạn nên thử SFML . SFML cung cấp những thứ thông thường như tạo cửa sổ, bộ hẹn giờ, v.v. đồng thời cho phép bạn vẽ văn bản và hình dạng đơn giản. Bạn có thể giảm dần việc sử dụng OpenGL "thô" bất cứ khi nào bạn muốn, trộn các hàm SFML và các lệnh gọi API thô.
Oskar N.

1
Bạn không thể "đóng" một câu hỏi bằng cách thêm "{ĐÃ ĐÓNG CỬA}" vào tiêu đề. Các câu hỏi sẽ được đóng bởi người điều hành hoặc nếu đủ người dùng bỏ phiếu để đóng câu hỏi. Tôi sẽ khôi phục lại các chỉnh sửa của mình .. "ĐÃ ĐÓNG" sẽ tự động được thêm vào tiêu đề của bạn nếu người kiểm duyệt quyết định đóng nó ..
bummzack

Câu trả lời:


19

Nicol Bolas thường trú của chúng tôi duy trì một cuốn sách trực tuyến về lập trình đồ họa hiện đại . Nó sử dụng OpenGL hiện đại, mọi thứ đều được giới thiệu với tốc độ dễ tiêu thụ, đó là một nơi tốt để bắt đầu. Tôi đã sử dụng nó để học OpenGL hiện đại và nó đã làm tôi ngạc nhiên trong 2 tháng qua.

Bên cạnh đó có một chút kiến ​​thức ở đây và đó. Wiki OpenGL được duy trì khá tốt. Mã không phải là "thực tiễn tốt nhất" và đôi khi có sự mơ hồ khi nói đến phiên bản OpenGL, nhưng ngoài những dịp hiếm hoi đó, đó là một tài nguyên tuyệt vời.

Nếu bạn muốn tìm hiểu về GLSL, có Hướng dẫn GLSL Core từ lighthouse3D. Mặc dù đây là kiến ​​thức cốt lõi duy nhất tôi "tin tưởng" trên trang web, phần còn lại có xu hướng bị lỗi thời.

Khi bạn bắt đầu hiểu cách OpenGL hiện đại được thực hiện, bạn sẽ dễ dàng tìm kiếm thông tin cụ thể, lọc ra mã lỗi thời và quan trọng nhất là đọc thông số kỹ thuật. Bạn chỉ cần bắt đầu ở đâu đó.

Hầu hết, nếu không phải tất cả thực sự, các sách OpenGL có sẵn đã lỗi thời. SuperBible mới là một thứ kỳ dị và tôi sẽ không giới thiệu nó cho bất cứ ai. Hướng dẫn lập trình OpenGL cho OpenGL 4.1 ra mắt vào ngày 16 tháng 9, thật không may là phiên bản thứ 7 sử dụng mã không dùng nữa, vì vậy bạn chỉ cần chờ, tôi chắc chắn là như vậy.

Và dĩ nhiên, bạn luôn có thể đặt câu hỏi ở đây.


1
Tại sao bạn không đề xuất SuperBible?
Codmith

3
@AUTO Phiên bản thứ 5 của SuperBible sử dụng trình bao bọc tùy chỉnh xung quanh OpenGL để làm cho nó "có thể truy cập". Rất nhiều ví dụ sử dụng trình bao bọc tùy chỉnh quá mức. Nó không dạy cho bạn những gì nó được áp dụng, đó là đặc tả lõi OpenGL. Theo cách tôi thấy, nếu bạn không nhất thiết phải học OpenGL, thì hãy quên nó đi. Không có điểm nào học nó cả. Các đặc điểm kỹ thuật cốt lõi rõ ràng và mạnh mẽ hơn nhiều.
dreta

@AUTO Đặc điểm kỹ thuật cốt lõi đòi hỏi khắt khe hơn lúc ban đầu, đó là một điều tốt. Nó sẽ buộc bạn phải chăm sóc hầu hết quá trình kết xuất, cung cấp cho bạn sự hiểu biết và kiểm soát hoàn toàn về nó. Nó mở ra nhiều, nhiều khả năng hơn so với mã không dùng nữa. Sau đó, nếu bạn có thể tìm hiểu API của hệ điều hành và OpenGL theo hệ điều hành mà không cần những thứ như glut thì bạn đang ở xứ sở thần tiên.
dreta

OK, vì vậy hãy để tôi hỏi bạn một câu hỏi quan trọng: thư viện GLU dường như không được hỗ trợ và hoàn toàn không được hỗ trợ; bằng cách sử dụng thông số kỹ thuật, tôi có được truy cập trực tiếp, bỏ qua nhu cầu về GLU không? Như vậy, tôi sẽ không nhận được bất kỳ lỗi liên kết nào đến các chức năng không tồn tại được thư viện GLU tham chiếu?
Codmith

@AUTO GLU là hoàn toàn không cần thiết, tôi chỉ từng chạm vào nó với một cột 10 feet trong lớp lập trình đồ họa (chúng tôi phải sử dụng mã không dùng nữa, thật đau đớn, các tiêu chuẩn thay đổi nhanh hơn chương trình bài học, tôi đoán vậy). Nó chỉ là một thư viện giúp với mã không dùng nữa. Nếu bạn đã thiết lập mã của mình với GLU thì nó có thể bị hôi thối.
dreta

1

Đã được một thời gian kể từ khi câu hỏi này được hỏi nhưng tôi hy vọng điều này sẽ giúp những người có cùng câu hỏi với bạn.

Tôi đã bắt đầu với OpenGL bằng cách đọc một chiếc xe buýt nhỏ arcsynthesis.org. Không chắc ai đã viết nó. Có vẻ như đăng ký của trang web đã mất hiệu lực hoặc một cái gì đó nhưng bạn sẽ có thể tìm thấy nó ở đây: http://web.archive.org/web/20140209181347/http://www.arcsynt tổng hợp.org / gltut / . Nó sử dụng OpenGL 3.3, vì vậy bạn sẽ sử dụng đường ống hiện đại và tất cả các hoạt động đòi hỏi, nhưng bạn sẽ không được tiếp xúc với các trình điều khiển hoặc tính toán shader.

Một trang web khác đáng xem là https://open.gl/ . Nó có vẻ là RẤT mới bắt đầu tập trung và không bao gồm những thứ sâu sắc như các tài liệu trên, nhưng nó có thể là một điểm khởi đầu tốt cho những người mới bắt đầu.

Hãy nhớ đọc wiki OpenGL và google tên hàm của bạn nếu bạn cần trợ giúp. Một số trang trên wiki hoàn toàn vô dụng nhưng những trang khác khá hữu ích, vừa là tài liệu tham khảo vừa là tài liệu học tập.


1
Người được đề cập trong câu trả lời được chấp nhận đã viết nó Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

Những hướng dẫn cũ vẫn rất phù hợp với người mới bắt đầu. Trên thực tế, tôi sẽ đề xuất bắt đầu từ đó thay vì với các phiên bản OpenGL gần đây. Các phiên bản gần đây đã loại bỏ một số phương pháp vẽ hình học dễ dàng hơn (cụ thể là vẽ chế độ ngay lập tức).

Với các phiên bản gần đây, bạn phải chuẩn bị và gửi các mảng đỉnh và cho thẻ video biết cách các đỉnh của bạn được sắp xếp trong mảng bạn cung cấp. Những thứ này là cồng kềnh để gỡ lỗi.

Một số phiên bản (cụ thể là OpenGL ES 2.x) yêu cầu bạn cung cấp các phương trình chiếu sáng của riêng bạn (dưới dạng Mảnh vỡ mảnh) và chuyển đổi dữ liệu đỉnh của chính bạn để nó kết thúc trên màn hình nơi bạn muốn (Vertex Shader). Điều này thậm chí còn khó hơn để gỡ lỗi, và không có chỗ cho người mới bắt đầu (theo ý kiến ​​của tôi).

Vì vậy, tôi thực sự sẽ đề nghị bạn quay lại những hướng dẫn NeHe đó (v.v.) và bắt đầu từ đó. Họ có thể "hết hạn" nhưng họ vẫn làm việc. Khi bạn bắt đầu hiểu những gì thực sự xảy ra trong đường truyền kết xuất trong OpenGL và cảm nhận về một số khái niệm toán học làm cho những điều này hoạt động, thì bạn sẽ sẵn sàng xem xét một số phương pháp cập nhật hơn về kết xuất trong OpenGL.


Thật ra họ KHÔNG làm việc. Đó là lý do tại sao tôi đăng câu hỏi này. Họ đang sử dụng chức năng gluPers perspective không dùng nữa và không có sự thay thế tuyệt đối.
Codmith

1
Đó không phải là một chức năng OpenGL. Đây là một chức năng tiện ích riêng được cung cấp bởi một thư viện khác. Bạn có thể tìm mã dễ dàng - không khó lắm.
thịt

Cảm ơn, nhưng tôi chỉ tìm thấy một sự thay thế không hoàn hảo mà tôi không biết cách sử dụng. Nó chấp nhận một đối số "float * matrix", trong khi cái cũ sử dụng một số ma trận bên trong. Tôi phải làm gì cho nó sau đó?
Codmith

Lần đầu tiên nhấn vào google cho "triển khai gluPers perspective" chính xác là những gì bạn đang tìm kiếm. nó gọi glFrustum, không có sẵn trong một số phiên bản gần đây của OpenGL (ES 2.x không bao gồm nó). Thậm chí điều đó không quá khó để tìm ra impl cho.
thịt

0

Như những người khác đã nói, hầu hết các cuốn sách đều bị phản đối hoặc quá cao cấp. Tuy nhiên, tôi muốn giới thiệu phiên bản thứ 5 của SuperBible nhưng chỉ để có cái nhìn tổng quan nhanh về những gì có thể thực hiện trong OpenGL và để làm quen với những thứ như chế độ xem / chiếu, v.v.

Lặn ngay vào OpenGL hiện đại có thể khiến bạn choáng ngợp ngay từ đầu, vì vậy, hãy cân nhắc việc học cách làm một số điều cơ bản trong các phiên bản hiện không dùng nữa.

Tôi cũng muốn thêm một trang web với các hướng dẫn tốt mà tôi đã tìm thấy gần đây http://ogldev.atspace.co.uk/


Cảm ơn, tôi sẽ kiểm tra hướng dẫn đó; nhưng để sử dụng OpenGL SuperBible, câu hỏi của tôi vẫn là: Làm cách nào để sửa GLU, vì freeglut dựa trên nó?
Codmith

@AUTO: FreeGLUT không "dựa trên" GLU. Một số chức năng FreeGLUT gọi GLU, nhưng nếu bạn không gọi các chức năng đó, thì bạn sẽ không gặp vấn đề gì.
Nicol Bolas

Nhưng có khả năng SuperBible gọi các chức năng này không? Và nếu có, tôi không thể sử dụng .
Codmith

Thực sự, ý kiến ​​của tôi là không bận tâm với mã nguồn được cung cấp với SuperBible. Đọc nó nhưng cố gắng làm mọi thứ từ đầu. Về vấn đề của bạn với GLU, tôi đoán tốt nhất là bạn đã cấu hình / cài đặt thư viện chính xác. Tải xuống phiên bản mới nhất của MinGW. Đồng thời tải xuống phiên bản mới nhất của freeglut và biên dịch nó, hoặc tìm một thư viện được biên dịch sẵn. Dù sao, bạn nên bắt đầu học một số thứ thay vì dành quá nhiều thời gian cho việc lên kế hoạch bắt đầu.
Grieverlove

@AUTO: Tại sao có khả năng SuperBible gọi họ? Nếu nó gọi cho họ, mã của SuperBible sẽ không hoạt động. Đó là lý do tại sao nó không gọi cho họ.
Nicol Bolas

0

arcsynt tổng hợp.org (trang web được đề cập trong câu trả lời được chấp nhận) dường như không hoạt động. (EDIT: nó có sẵn tại liên kết này !).

Các hướng dẫn của Anton Gerdelan cho OpenGL 4 rất dễ đọc và cập nhật vào giữa năm 2014. Một số đầu tiên là miễn phí, phần còn lại có sẵn trên amazon, nơi họ có những đánh giá tuyệt vời, với một mức giá nhỏ. Cho đến nay tôi đã hài lòng.

Có một số hướng dẫn miễn phí khác cho OpenGL 3.3+ tại http://www.opengl-tutorial.org/ . Chúng có từ năm 2012, nhưng có thể là tài liệu bổ sung tốt cho các nguồn khác.


OGLDev là hiện tại, chuyên sâu và miễn phí. ogldev.atspace.co.uk/index.html
Yattabyte


Thật tuyệt khi thấy nó có sẵn! Tôi cũng sẽ kiểm tra các tài liệu này.
iHateCamelCase
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.