Những gì thay thế cho GLUT tồn tại?


12

Tôi đang cố gắng học OpenGL và tôi phát hiện ra rằng GLUT đã lỗi thời . Tôi đã biết SDL, và có vẻ như đó là một lựa chọn tốt. Tôi có nên sử dụng SDL để phát triển các trò chơi với OpenGL không, hoặc có giải pháp thay thế nào tốt hơn không. Tôi chưa quen với việc phát triển trò chơi, vì vậy tôi không biết nhiều về tình trạng của nghệ thuật.

Câu trả lời:


27

Tôi chỉ phát hiện ra rằng GLUT đã lỗi thời.

Đó là những gì xảy ra khi bạn chấp nhận câu trả lời đầu tiên bạn gặp; bạn nhận được thông tin xấu. GLUT 3.7 không nên được sử dụng, nhưng FreeGLUT hoàn toàn tương thích ngược với nó.

Tuy nhiên, câu hỏi của bạn đi nơi khác. Để tạo một trò chơi thực tế, GLUT của mẫu * là không phù hợp. Nó không cung cấp cho bạn quyền kiểm soát vòng lặp chính và bạn thực sự cần điều đó trong một trò chơi (FreeGLUT có cách để kiểm soát vòng lặp chính, nhưng nó vẫn kỳ quặc). GLUT là để viết các bản trình diễn đồ họa. Điều đó rất quan trọng khi thử nghiệm các hiệu ứng đồ họa mới, vì vậy nó sẽ có trong hộp công cụ của bạn khi cần. Nhưng mã trò chơi chính của bạn không bao giờ nên sử dụng nó.

GLFW là một thay thế nhẹ trung tâm trò chơi cho GLUT. Nó cung cấp hỗ trợ cơ bản cho những thứ ngoài việc tạo một cửa sổ OpenGL. Nó cho phép bạn nhận đầu vào, tải hình ảnh dưới dạng kết cấu và một vài thứ khác.

SDL , SFMLAllegro 5 đều là các bộ công cụ đa phương tiện. Họ có thể tạo các cửa sổ OpenGL, nhưng họ còn làm được nhiều hơn thế. Họ cung cấp hỗ trợ đầy đủ cho đầu vào, âm thanh và nhiều thứ khác mà bạn cần để tạo trò chơi. Nếu bạn đang làm một trò chơi, bất kỳ trong số này là một điểm khởi đầu tốt. Cá nhân tôi thích Allegro 5, nhưng đó chỉ là sự thiên vị của tôi đối với tài liệu tốt và API sạch.


1
Các tiêu đề AAA (cả pc và đa nền tảng) sử dụng cái gì? Họ có sử dụng những thứ này (GLFW, Allegro) mà bạn đã đề cập, để xử lý cửa sổ opengl không? hoặc họ tự viết 'mọi thứ' từ đầu?
Quazi Irfan

@iamcreasy: "AAA title" (Tôi thực sự ghét thuật ngữ đó) không sử dụng bất kỳ trong số này. Nói chung, họ không sử dụng bất cứ thứ gì nguồn mở. Họ có thể, nhưng nếu họ sẽ sử dụng một thư viện, họ muốn sử dụng một thư viện được hỗ trợ. Có một số trường hợp ngoại lệ như ODL hoặc Bullet. Nhưng đó là những ngoại lệ chứ không phải là quy tắc.
Nicol Bolas

Từ khi nào GLFW 'tải hình ảnh dưới dạng kết cấu'? Chắc chắn không có trong danh sách tính năng; cũng không có bất kỳ chức năng nào phục vụ mục đích đó từ xa trong tiêu đề glfw của tôi.
giảm tốc

1
Nhược điểm lớn khác của GLUT là mô hình đầu vào của nó không đặc biệt phù hợp với các trò chơi; không có cách nào để lấy mã khóa thô hoặc nhận các sự kiện nhấn / phát hành trên các phím bổ trợ (ví dụ: sử dụng ctrl làm nút bắn), cũng không có cách nào để lấy bối cảnh GL bên dưới (cần thiết để bật vsync trên X11, ví dụ).
lông mịn

1
@NicolBolas ah, tôi đã quên 2.7, họ [chủ đề, hình ảnh] đã được tuyên bố 'ngoài ngữ cảnh' cho bản phát hành GLFW 3.0.
giảm tốc


2

Nếu mục tiêu của bạn là phát triển một trò chơi,

Nó phụ thuộc vào việc bạn có muốn trò chơi của mình đa nền tảng hay không. Đối với các trò chơi di động (Windows, Mac, Linux) SDL dường như là lựa chọn duy nhất.

Nếu bạn chỉ nhắm mục tiêu Windows và / hoặc XBox, có nhiều lựa chọn thay thế tốt hơn, ví dụ XNA giúp bạn không phải viết nhiều mã theo cách thủ công.

Nếu mục tiêu của bạn là học OpenGL,

Chỉ cần lập trình trong OpenGL thô, nhưng hãy chuẩn bị để đối mặt với nhiều khái niệm không trực quan, toán học và hướng dẫn sử dụng khổng lồ.


Như Takumi đã nói, cũng có SFML như một thư viện di động. Tốt hơn so với SDL imho (cập nhật hơn.)
kaoD

8
-1: "Đối với các trò chơi di động (Windows, Mac, Linux) SDL dường như là lựa chọn duy nhất." Điều này thậm chí không đúng sự thật. Cả SFML và Allegro 5 đều tồn tại dưới dạng các lựa chọn thay thế hoàn toàn hợp lệ và cả hai đều có cơ sở nền tảng rộng hơn.
Nicol Bolas

1

GLUT là một API cũng như một thư viện. Thư viện ban đầu thực sự đã lỗi thời. API là một điều khác biệt, nó khá tốt để bắt đầu, nó chỉ cần sửa đổi để khắc phục những hạn chế và giải quyết các nhu cầu mới. Việc triển khai chính hiện tại là FreeGLUT, được hỗ trợ và không bị lỗi thời. Điều đó có nghĩa là một sự thay thế tốt cho GLUT (như trong thư viện GLUT) là GLUT (như trong FreeGLUT).

Vấn đề được lưu ý ở trên với "điều khiển vòng lặp chính" là không chính xác. Với các phiên bản GLUT mới hơn, bạn có thể kiểm soát tốt hơn vòng lặp trò chơi của mình (nếu điều đó quan trọng với bạn). Giới hạn đã được sửa bởi glutMainLoopEvent (). Điều này và các hạn chế khác được giải quyết ở đây:

http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit


" Với các phiên bản mới hơn GLUT bạn có thể kiểm soát tốt hơn vòng lặp trò chơi của bạn (nếu đó là quan trọng với bạn). " Đó là một trận đấu, nên , đó là quan trọng với bạn. Ngoài ra, glutMainLoopEventhầu như không phải là một cách tốt để quản lý vòng lặp chính. Nó vẫn sử dụng mô hình hướng sự kiện để cung cấp cho bạn dữ liệu, thay vì mô hình bỏ phiếu nơi bạn có được dữ liệu bạn muốn khi bạn muốn.
Nicol Bolas

Tôi phải lập luận rằng mô hình hướng sự kiện hiệu quả hơn so với bỏ phiếu, trừ khi bạn bỏ phiếu vào dữ liệu được lưu trữ từ các sự kiện (điều này rất tốt). Tài nguyên hệ thống bỏ phiếu nên được thực hiện cẩn thận.
Ingemar Ragnemalm

0

Qt không hỗ trợ OpenGL. Hãy xem Open Inventor và xem xét liệu có hợp lý không khi bạn đi thẳng tới API 3D cấp cao hơn.

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.