Phiên bản OpenGL nào để tìm hiểu và / hoặc sử dụng?


16

Vì vậy, tôi chưa quen với OpenGL ... Tôi có kiến ​​thức chung về lập trình trò chơi nhưng ít kinh nghiệm thực tế.

Tôi đã xem xét nhiều bài báo và sách khác nhau và cố gắng tìm hiểu về OpenGL, nhưng tôi đã tìm thấy các phiên bản khác nhau và cách làm mới so với cách làm mới khó hiểu.

Tôi đoán câu hỏi đầu tiên của tôi là có ai biết một số số liệu về tỷ lệ phần trăm các game thủ có thể chạy từng phiên bản OpenGL không. Thị phần như thế nào? 2.x, 3.x, 4.x ...

Tôi đã xem xét các yêu cầu đối với Half Life 2 vì tôi biết Valve đã cập nhật nó với OpenGL để chạy trên Mac và tôi biết họ thường cố gắng đạt được một cơ sở người dùng rất rộng và họ nói rằng tối thiểu là GeForce 8 Series. Tôi đã xem 8800 GT trên trang web của Nvidia và nó liệt kê hỗ trợ cho OpenGL 2.1. Điều mà, có lẽ tôi đã sai, nghe có vẻ cổ xưa đối với tôi vì đã có 4.x. Tôi đã tra cứu một trình điều khiển cho 8800GT và nó nói rằng nó hỗ trợ 4.2! Một chút khác biệt ở đó, lol.

Tôi cũng đã đọc những thứ như XP chỉ hỗ trợ tối đa một phiên bản nhất định hoặc OS X chỉ hỗ trợ 3.2 hoặc tất cả các loại khác. Nhìn chung, tôi chỉ bối rối về việc có bao nhiêu hỗ trợ cho các phiên bản khác nhau và phiên bản nào để tìm hiểu / sử dụng.

Tôi cũng đang tìm kiếm tài nguyên học tập. Kết quả tìm kiếm của tôi cho đến nay đã chỉ cho tôi đến OpenGL SuperBible. Phiên bản thứ 4 có những đánh giá tuyệt vời trên Amazon, nhưng nó dạy 2.1. Phiên bản thứ 5 dạy 3.3 và có một vài điều trong các đánh giá đề cập đến phiên bản thứ 4 là tốt hơn và phiên bản thứ 5 không dạy đúng các tính năng mới hay cái gì đó? Về cơ bản, ngay cả trong tài liệu học tập tôi cũng thấy sự khác biệt và tôi thậm chí không biết bắt đầu từ đâu.

Theo những gì tôi hiểu, 3.x đã bắt đầu một cách làm việc hoàn toàn mới và tôi đã đọc từ nhiều bài báo và đánh giá khác nhau mà bạn muốn "tránh xa các tính năng không dùng nữa như glBegin (), glEnd ()" nhưng vẫn còn rất nhiều sách và hướng dẫn tôi đã thấy sử dụng phương pháp đó. Tôi đã thấy mọi người nói rằng, về cơ bản, cách làm việc mới phức tạp hơn nhưng cách cũ là xấu>.>

Chỉ là một ghi chú bên lề, cá nhân tôi biết rằng tôi vẫn còn nhiều điều phải học trước đó, nhưng tôi quan tâm đến việc điều khiển; vì vậy tôi đoán rằng các yếu tố đó cũng vậy, bởi vì, theo như tôi hiểu thì chỉ có trong 4.x?

[chỉ btw, máy tính để bàn của tôi hỗ trợ 4.2]


Câu hỏi này (trên Stack Overflow) dường như là một bản sao: stackoverflow.com/questions/6823371/ mẹo
Anderson Green

Câu trả lời:


21

Nếu bạn đang tự hỏi về phạm vi bảo hiểm OpenGL, một nơi tốt để bắt đầu là Khảo sát phần cứng Steam.

http://store.steampowered.com/hwsurvey?pl platform = pc

Thật không may, nó dường như bị phá vỡ ngay bây giờ và nó không hiển thị bất kỳ số liệu thống kê nào cho băng video. : \

Tôi cũng đã đọc những thứ như XP chỉ hỗ trợ tối đa một phiên bản nhất định

DirectX 9 có thể so sánh với OpenGL 2.1, DirectX 10 với OpenGL 3.0 và DirectX 11 với OpenGL 4.0. Đây là nơi mà sự nhầm lẫn bắt nguồn từ.

XP hỗ trợ tất cả các phiên bản OpenGL, nhưng nó không hỗ trợ DirectX 10 trở lên. Đây là cách Microsoft muốn buộc mọi người nâng cấp lên Vista, nhưng nó không hoạt động tốt. OpenGL là một tiêu chuẩn mở, miễn là các nhà sản xuất videocard sẵn sàng sản xuất trình điều khiển cho XP, nó sẽ hỗ trợ các phiên bản OpenGL mới hơn.

Theo những gì tôi hiểu, 3.x đã bắt đầu một cách làm việc hoàn toàn mới và tôi đã đọc từ nhiều bài báo và đánh giá khác nhau mà bạn muốn "tránh xa các tính năng không dùng nữa như glBegin (), glEnd ()" nhưng vẫn còn rất nhiều sách và hướng dẫn tôi đã thấy sử dụng phương pháp đó. Tôi đã thấy mọi người nói rằng, về cơ bản, cách làm việc mới phức tạp hơn nhưng cách cũ là xấu>.>

Đây là một vấn đề rất lớn đối với OpenGL. Về cơ bản, vào thời xa xưa, bạn sẽ gửi công cụ tới băng video bằng cách sử dụng "chế độ ngay lập tức". Bắt đầu với glBegin, làm một số thứ, kết thúc với glEnd. Tuy nhiên, trình điều khiển card màn hình không thích điều này cả . Làm thế nào họ có thể biết bạn sẽ gửi bao nhiêu thứ? Nó sẽ là 4 đỉnh cho một hình tứ giác hoặc 100.000 cho một mô hình da? Đây là lý do tại sao họ giới thiệu các đối tượng bộ đệm đỉnh (VBO's). Trong khi chế độ ngay lập tức là một danh sách được liên kết, VBO là một mảng tĩnh. Nhà phát triển biết nó lớn như thế nào, người lái xe biết nó lớn như thế nào. Mọi người đều hạnh phúc. Vì vậy, hội đồng tiêu chuẩn OpenGL (Khronos Group) đã quyết định từ chối chế độ ngay lập tức cho OpenGL 3.0 trở lên. Tuy nhiên, đây là vấn đề, vì tôi sẽ trình bày với một ví dụ đơn giản.

Giả sử bạn muốn hiển thị một hình tứ giác có kết cấu, bắt đầu từ đầu.

Trong OpenGL 2.1:

  • Thiết lập ma trận chiếu và đặt nó vào GL_PROJECTION.
  • Thiết lập ma trận modelview và đặt nó vào GL_MODELVIEW.
  • Tải một hình ảnh và đặt nó trong một GL_TEXTURE_2Dtay cầm.
  • Xác định vị trí, tọa độ kết cấu và màu sắc cho các đỉnh của bạn.
  • Ràng buộc các kết cấu.
  • glBegin... glVertex2f... glTexCoord2f... glEnd.

Trong OpenGL 3.0:

  • Xây dựng một ma trận để chiếu và modelview.
  • Tải một hình ảnh và đặt nó trong một GL_TEXTURE_2Dtay cầm.
  • Xác định vị trí, tọa độ kết cấu và màu sắc cho các đỉnh của bạn và đặt chúng vào VBO.
  • Tạo một đối tượng mảng đỉnh (VAO) và đính kèm VBO của bạn.
  • Viết một shader để xuất ra một quad có kết cấu và đưa nó vào một chương trình shader.
  • Đính kèm ma trận vào chương trình đổ bóng bằng đồng phục.
  • Ràng buộc các kết cấu.
  • Đính kèm kết cấu cho chương trình đổ bóng.
  • glDrawArrays.

Vì vậy, những gì có thể đi sai trong phiên bản đầu tiên?

  • Vị trí của bạn không chính xác.
  • Đỉnh của bạn quanh co là sai cách xung quanh.
  • Kết cấu của bạn không tải đúng cách.
  • Kết cấu của bạn không liên kết đúng.
  • Ma trận chiếu của bạn là sai.
  • Ma trận modelview của bạn là sai.
  • Bạn không gửi đúng đỉnh.

Và trong phiên bản thứ hai, bạn có thể gặp vấn đề với những điều trên :

  • VBO của bạn sai.
  • VAO của bạn sai.
  • Shader của bạn là sai.
  • Kết cấu của bạn liên kết với shader là sai.

Không có các công cụ gỡ lỗi thích hợp, điều này trở thành một vấn đề nghiêm trọng. Đây là lý do tại sao mọi người nói bạn nên bám vào chế độ ngay lập tức. May mắn thay, bây giờ chúng ta có gDEBugger miễn phí và xuất sắc , nhưng nó không phải là một viên đạn ma thuật.

Để trả lời câu hỏi của bạn: nó phụ thuộc vào trò chơi của bạn. Nếu bạn muốn tiếp cận nhiều đối tượng (ví dụ: trò chơi thông thường hoặc nền tảng 2D), bạn nên nhắm mục tiêu 2.1. Nếu bạn đang tạo một trò chơi không gian hoành tráng sẽ không chạy trên phần cứng sáu năm tuổi, hãy nhắm mục tiêu 3.3. Và nếu bạn cần bản mới nhất và tốt nhất để tương thích trong tương lai, hãy nhắm mục tiêu 4.0.


2
Tôi nghĩ rằng bạn đang thể hiện một số thành kiến ​​so với VAO / VBO ở đây. Trong thực tế nếu bạn muốn vẽ một hình tứ giác có kết cấu, bạn sẽ có một bộ VAO / VBO đầy đủ, cùng với các trình tạo bóng và kết cấu đã được tạo (trong khi khởi động chương trình - không ai tạo ra chúng khi chạy). Vẽ một hình tứ giác có kết cấu thông qua cách mới trong thực tế chỉ là một số ít các cuộc gọi - phải thừa nhận rằng nó tải trước sự phức tạp khi khởi động chương trình trong khi cách cũ phơi bày sự phức tạp khi chạy.
Maximus Minimus

2
Nhưng đó chính xác là những gì tôi muốn nói: bây giờ lỗi của bạn có thể nằm trong dữ liệu của bạn (dữ liệu đỉnh và đối tượng kết cấu), chương trình đổ bóng, mã đổ bóng, ma trận, tải lên thống nhất hoặc liên kết VAO của bạn. Nếu bạn bắt đầu từ không có gì , đó là rất nhiều hệ thống con để kiểm tra! Và bạn phải theo dõi trạng thái nhiều hơn nữa.
hiệp sĩ666

1
Lưu ý rằng gDEBugger từ trang web gremedy đã hết hạn. Tôi cho rằng bị bỏ rơi vì diễn đàn của họ đã ngừng hoạt động trong một thời gian dài. Công cụ đã được AMD chọn: gDEBugger .
MichaelHouse

2
"glBegin ... glVertex2f ... glTexCoord2f ... glEnd." Không. glBegin, glVertex, vv không bao giờ đúng. glDrawArrays đã được giới thiệu trong OpenGL 1.1 (1997) và phải luôn được sử dụng trên glBegin và End.
API-Beast

9

Để biết một số thống kê về khả năng tương thích phần cứng, bạn có thể xem khảo sát của Steam: http://store.steampowered.com/hwsurvey/ Mặc dù nó liệt kê DX10 và DX11, khả năng tương thích phần cứng tương tự như OpenGL 3 và OpenGL 4. Mặc dù lưu ý rằng trạng thái cài đặt trình điều khiển OpenGL trên người thường kém hơn DX.

Windows XP không hỗ trợ DX10 hoặc DX11, nhưng OpenGL 3 và 4 sẽ ổn, miễn là các trình điều khiển đều ổn. OSX hỗ trợ OpenGL 3 (tối đa), trên Linux bạn có OpenGL 4 với trình điều khiển nhà cung cấp ATI / NVIDIA (tất nhiên chỉ khi phần cứng hỗ trợ).

Sau đó, còn có các phiên bản ES di động của OpenGL. Trên thực tế, tôi khuyên bạn nên tìm hiểu về OpenGL ES 2.0, vì nó nhỏ hơn, dễ học hơn, nhưng bạn cũng cần sử dụng các thực tiễn hiện đại, ví dụ như shader và VBO. Đó cũng là những gì được sử dụng trên hầu hết các thiết bị di động (vì vậy bạn có thể tạo ra các trò chơi di động) và WebGL về cơ bản là giống nhau, vì vậy bạn thực sự có thể thực hiện tất cả việc học trên trình duyệt web với lợi thế phát triển nhanh chóng. OpenGL ES 3.0 sẽ ra mắt vào mùa hè này.

Tessname là một tính năng OpenGL 4.0. Trước tiên bạn nên tìm hiểu các loại shader khác, nói gì đến tất cả những điều cơ bản, nhưng tôi đồng ý rằng điều đó thật thú vị - thực tế tôi đã viết một bài kiểm tra nhỏ với nó: http : //blog.tapagu.net/post/15189341463/playing- với-opengl-4-tessname


4
Chết tiệt, hiệp sĩ đã đánh bại tôi với nó, với một câu trả lời chi tiết hơn. Tuy nhiên, phần ES đáng để suy nghĩ.
Tapio
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.