GUI tốt cho OpenGL? [đóng cửa]


65

Tôi đang bắt đầu học OpenGL với FreeGLUT bằng cách sử dụng Siêu nhân và kiến ​​thức tôi có từ đồ họa cơ bản để cải thiện các kỹ năng của mình.

Để có được nhiều hơn từ trải nghiệm này, tôi muốn tích hợp GUI để ghi đè lên một ứng dụng FreeGLUT, bây giờ câu hỏi của tôi là: điều này có thể không và tôi nên sử dụng thư viện nào?

Một số đặc điểm cho thư viện:

  • Mã nguồn mở
  • Đa nền tảng (Linux và Windows)
  • C / C ++

Nếu bạn có bất kỳ đề xuất nào khác xin vui lòng gửi chúng cùng với câu trả lời của bạn cho vấn đề của tôi.


2
OpenGL sử dụng GUI theo mặc định từ khi nào? : L
Vịt Cộng sản

Đồng nghĩa với việc nói rằng thư viện tôi đang sử dụng, còn gọi là FreeGLUT.
Cristina

Đã thêm tiền thưởng - yêu cầu bổ sung: phải có hộp thoại io tệp đa nền tảng.
Jari Komppa

1
trên sourceforge, các hộp thoại tệp nhỏ có một số lệnh gọi hàm phương thức. đó là một tệp đa nền tảng C C ++ đơn giản để thêm vào dự án của bạn.
tinyfiledialogs

Câu trả lời:


33

Tôi chưa thử bản thân mình, nhưng điều này có vẻ rất thú vị:

giảm giá

EDIT: Vì bạn sẽ cần một bối cảnh để kết xuất, tôi sẽ đề xuất SFML hoặc SDL 1.3.


thực sự nó trông rất thú vị
Sẽ

2
Tôi sử dụng libRocket và nó hoàn toàn tuyệt vời! Pains of HTML cũng có mặt trong thư viện, nhưng với một số trò đùa với nó, bạn có thể tìm thấy mọi thứ gần như: D
Grimshaw

Có vẻ như đã bị đình trệ (không có bản cập nhật trong một vài năm). Ngoài ra, duyệt qua các tài liệu không cung cấp một cái nhìn thực sự tốt về những gì nó thực sự thích. Các tài liệu nói chung là cách quá thấp.
Jari Komppa

Không có gói chính thức nào cho Fedora hoặc Ubuntu (theo như tôi có thể thấy).
ilent2

Bạn cũng có thể dùng thử GLFW để tạo bối cảnh kết xuất

19

GUI của Crazy Eddie (CEGUI) rất phổ biến và bạn có thể đặt một trong các phụ trợ kết xuất hiện có hoặc viết mục tiêu của riêng bạn bất cứ API nào được hỗ trợ OpenGL mà bạn muốn. Nó là mã nguồn mở, đa nền tảng và C ++. Tuy nhiên, nó đánh giá cao tính nhất quán, không phải lúc nào cũng là nguyên tắc UI tốt cho các trò chơi, có thể có hàng tá điều khiển tùy chỉnh được sử dụng ở chính xác một nơi.

Một mẫu phổ biến gần đây là GUI chế độ ngay lập tức (IMGUI) , đây là loại "không có thư viện GUI". Nó có ưu điểm và nhược điểm - rất đơn giản, nhưng có thể khó tối ưu hóa và tôi vẫn chưa thấy các mô hình IMGUI thực sự tốt cho các điều khiển nâng cao như hộp tổ hợp hoặc chế độ xem dạng cây. Tôi cũng chưa thấy triển khai tốt hệ thống cửa sổ IMGUI (và tôi dành một chút thời gian để viết một cái mà tôi chưa bao giờ hài lòng) - tuy nhiên, nó rất tuyệt vời đối với các yếu tố HUD đơn giản và đơn giản để thực hiện các điều khiển một lần.


2
Tôi đã có trải nghiệm đầu tiên về IMGUI gần đây và cảm thấy rằng đó là một bước lùi lớn. Như bạn nói, thật tuyệt vời cho một HUD đơn giản hoặc một thanh công cụ tĩnh, nhưng thật kinh khủng cho bất cứ điều gì năng động, thù địch với việc các nghệ sĩ hoặc nhà thiết kế tạo bố cục và ép buộc bạn hướng tới việc trình bày và mã logic cùng nhau ở một nơi.
Kylotan

11
-1. Tôi có cảm giác rằng CEGUI chỉ phổ biến vì nó tồn tại và mọi người đề cập đến nó như một goto mặc định (như thế này). Khi tôi sử dụng nó, tôi thấy nó vụng về và cực kỳ cồng kềnh.
bobobobo

@bobobobo Đồng ý. Nó phổ biến vì nó tồn tại. Nó là gui "chính thức" cho ogre (bất kể điều đó có nghĩa là gì) nhưng tôi thấy nó khá cồng kềnh khi viết mã. Ngoài ra, trình xây dựng RAD gui là lỗi (vẫn đang được phát triển).
cheshirekow

1
imgui thân yêu dường như là một ví dụ điển hình về cách linh hoạt của IMGUI. Tôi vẫn chưa thử nhưng có vẻ khá hứa hẹn.
huyền thoại2k

13

Gần đây tôi tình cờ gặp Gwen . Đó là một thư viện GUI được viết bởi tác giả của Gary's Mod. MIT được cấp phép như bất kỳ thư viện trò chơi tốt nào.
Logo Gwen
Thư viện có một số thứ đi cho nó.

  • Bộ phụ tùng lớn
    Gwen đã được phát triển trong một vài năm và nó cho thấy.
  • Dễ dàng tùy chỉnh trình kết xuất phụ trợ
    Đây là một lớn. Thư viện đi kèm với trình kết xuất OpenGL được xây dựng lại. Nhưng việc tạo một trình kết xuất đủ đơn giản để bạn có thể muốn xây dựng một trình kết xuất cụ thể cho hệ thống kết xuất trò chơi của bạn.
  • Việc điền ít hơn
    Gwen dường như nằm ở phía nhẹ hơn của GUI trò chơi. Không có XML, không có trình kết xuất HTML, chỉ đơn giản là C ++. Gwen cũng không xuất xưởng với bộ tải hình ảnh. Nó hy vọng phụ trợ kết xuất để xử lý tải. Tôi thích tính năng này vì nó giữ cho thư viện nhỏ và hệ thống kết xuất trò chơi của tôi đã quản lý họa tiết.
  • Skinable
    Không phải là điều đầu tiên trong các cột mốc của bạn nhưng cuối cùng bạn sẽ cần tùy chỉnh GUI của bạn cho trò chơi của bạn.
  • C ++ skinning
    Tôi không phải là một nhà phát triển web và thấy GUI GUI trung tâm html css khó khăn.
  • Đầu vào tiêm
    Đây là lớn cho các trò chơi. Luôn luôn là một nỗi đau khi sử dụng các hệ thống GUI muốn sở hữu bỏ phiếu đầu vào.
  • đa nền tảng
    Thư viện cố gắng trở thành đa nền tảng nhưng họ thừa nhận rằng bạn có thể tìm thấy sự cố trên các nền tảng ít sử dụng hơn.
  • tích cực phát triển
    Hơn nữa, nó nhỏ hơn nhiều so với CEGUI hoặc MyGUI vì vậy việc hack nó hoặc gửi các bản vá là thực tế hơn nhiều.

Tuy nhiên, đây là nhược điểm của nó:

  • Không có một trang tài liệu nào. Thậm chí không phải là một trang web nữa, chỉ là repo github.
  • Các trình kết xuất đóng gói thiếu tính di động, vì vậy bạn sẽ cần phải tự viết trong trường hợp bạn cần.
  • ???

2
Thiếu tài liệu, không di động (chưa), chưa hoàn thành, chưa hoàn thành, v.v. Không thể tìm ra từ các tài liệu trực tuyến cho dù nó có hộp thoại io tập tin (hoặc hộp thoại, đối với vấn đề đó).
Jari Komppa

Tôi đồng ý các tài liệu là thiếu. Thư viện cốt lõi là đa nền tảng. Tuy nhiên, trình kết xuất và hệ thống đầu vào đang thiếu cho các nền tảng khác. Đối với tôi đó không phải là vấn đề khi tôi xây dựng một trình kết xuất phù hợp với hệ thống kết xuất của tôi.
deft_code

1
Không có xaml / html / css không phải là một điểm cộng chắc chắn. Đó là những gì những thứ này được tạo ra và chúng làm nó tốt hơn nhiều so với C ++.
user441521

7

Xin lỗi vì đã trả lời trễ, nhưng bạn có thể muốn xem qua khung giao diện người dùng OpenGL có tên là GG . GG được phát triển như một phần của dự án FreeOrion và được bao gồm trong kho SVN của họ (và SDK có thể tải xuống của họ). Có vẻ như khá có khả năng. Tôi đã bao gồm một ảnh chụp màn hình bên dưới; bạn có thể nhấp vào hình ảnh để xem phiên bản đầy đủ.

Ảnh chụp màn hình giao diện người dùng dựa trên GG của FreeOrion


Có vẻ như GG được chuyển đến một dự án riêng biệt trên sourceforge.
deft_code

Sẽ không làm tôi ngạc nhiên. Họ cố tình giữ nó tách rời khỏi FreeOrion.
Mike Strobel

Tôi chỉ dành toàn bộ buổi tối cho nó và nó thực sự, thực sự cần một tệp CMake. Tôi thích giao diện, tôi không thích nó sử dụng Boost.
hiệp sĩ666

GG có thể được tìm thấy ở đây: gigi.sourceforge.net
MichaelHouse

Chúc may mắn nhận được rằng để xây dựng dưới cửa sổ.
3Dave


4

Hãy xem AntTweakBar , nó đang được Cinder sử dụng . Ngoài ra còn có một thư viện GUI mới được phát triển cho Cinder trong các tác phẩm: SimpleGUI .

Nếu bạn muốn dùng HTML + CSS, có Awesomium (được Wolfire Games sử dụng trong trò chơi Phát triển quá mức của họ ) và một giải pháp thay thế miễn phí có tên Berkelium .


AntTweakBar là tuyệt vời, nhưng khá hạn chế. Thật tuyệt vời cho những gì nó được thiết kế để - điều chỉnh các giá trị và tích hợp cực kỳ đơn giản - nhưng không hữu ích như một bộ công cụ UI chung.
Jari Komppa

3

Tôi đã đấu tranh với cả QuickGUIMyGUI . Cả hai thư viện GUI của Ogre gần đây đã bỏ yêu cầu yêu tinh. Tôi chưa có quá nhiều kinh nghiệm với nó, nhưng có vẻ như tôi sẽ gắn bó với QuickGUI, vì nó nhỏ hơn và đơn giản hơn nhiều.

Tôi không chắc liệu wiki QuickGUI đã được cập nhật chưa để chỉ ra phiên bản mới nhất của Ogre-free. Đây là bản phát hành mới nhất.

http://www.stormsonggames.com/doads/QuickGUI_10_8.zip

Có repo đã thấy một vài cập nhật đa nền tảng, vì vậy bạn sẽ tốt hơn khi sử dụng svn trực tiếp.

http://stormsonggames.com/svn/SSE/Gaia2/QuickGUI
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgreDemo
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgrePl

Tên đăng nhập:
Mật khẩu ẩn danh : QuickGUI

Cuối cùng ở đây là wiki ngắn gọn về cách thêm các phụ trợ kết xuất khác nhau. http://www.ogre3d.org/tikiwiki/QuickGUI+Integration+Tutorial

MyGUI dường như có nhiều tính năng hơn với chi phí bị đầy hơi. Và một cách trung thực nếu đơn giản không phải là một yêu cầu CEGUI thổi MyGUI lên khỏi mặt nước.


Tôi đã thử MyGUI và nó thực sự rất bồng bềnh, không thực sự khuyên dùng nếu bạn muốn tiết kiệm không gian. Vẫn loay hoay để QuickGUI hoạt động.
Cristina

1
Tôi đã thử cả hai, sử dụng CEGUI trong thời gian dài nhất nhưng nó hoàn toàn khủng khiếp khi không đề cập đến cực kỳ chậm với nhiều văn bản. Tôi đã chuyển sang MyGUI gần đây và nó đã hoạt động tốt. Bố cục và biên tập da của họ rất rất gọn gàng. Tôi không chắc chắn về sự phình to, tôi nghĩ rằng CEGUI là rất lớn so với. Một số thực tiễn trong MyGUI rất kỳ lạ (ví dụ: toán tử + = để gán đại biểu và việc truyền cũng được thực hiện theo cách kỳ lạ - các tác giả đang tích cực phát triển nó và lắng nghe những gợi ý tuyệt vời) nhưng nói chung tôi thích nó hơn CEGUI.
Samaursa

Toán tử @Samaursa + = có nghĩa là bạn có thể thêm nhiều hơn một đại biểu.
Ocelot

3

Tôi muốn giới thiệu QT, vì nó là nền tảng chéo, C ++ và bạn có thể có phiên bản Nguồn mở của nó với giấy phép LGPL. Nó cũng dễ sử dụng và có rất nhiều thành phần được tạo sẵn mà bạn có thể sử dụng.


6
Đừng nghĩ rằng đó là một giao diện người dùng dựa trên OpenGL.
DeadMG

Nó không nói rằng nó nên dựa trên OpenGL, hoặc tôi hoàn toàn hiểu sai câu hỏi? Tôi đọc nó khi anh ta không có thứ gì để tiếp quản freeGLUT, mà QT không có khả năng.
martiert

Tôi muốn thứ hai này! Tôi sử dụng qt và nó có hầu hết mọi thứ người ta cần khi họ bắt đầu. Trong những năm qua, nó đã trở nên rất ổn định, với sự hỗ trợ tốt. Họ cũng có một khuôn khổ cho các trò chơi gọi là gluon.
brainydexter

8
Vấn đề với QT và các khung nói chung là chúng điều khiển vòng lặp chính. Điều đó thường không cho vay chính nó trò chơi tốt.
deft_code

1
Nếu UI không phải là OpenGL, thì tôi khuyên bạn nên thoát khỏi vòng lặp chính, sử dụng UI dựa trên sự kiện và các sự kiện và bộ hẹn giờ cho đồ họa + trò chơi. Dù sao, tôi đã sử dụng QT và tôi không khuyên dùng nó.
Daniel Varod

3

Những người sáng tạo có thể bắn tôi vì đã nói như vậy, nhưng tôi thấy GLFW thật tuyệt vời khi tạo các khung GUI đa nền tảng. Những người phát triển GLFW tiếp tục và về GLFW không xử lý GUI. Nó không tuy nhiên làm một công việc tốt đẹp, đơn giản, sạch sẽ và hoàn toàn di động xử lý đồ họa, sự kiện và nhiệm vụ chuột / bàn phím / phím điều khiển.

Điều tuyệt vời về GLFW đối với tôi là nó khá nhỏ, không yêu cầu mã cụ thể của hệ thống, không GLUT được bảo trì tốt. Cho đến nay đã ổn định để sử dụng cho các dự án OpenGL 4.1. So với một cái gì đó như SDL, tôi thích chi phí nhỏ và thật dễ dàng để viết các lớp xử lý GUI.

Ngoài ra, hãy xem FLTK . Nó có thể được sử dụng cho tất cả các loại và tái mục đích rất đơn giản. Nó được sử dụng thực sự để xây dựng ứng dụng nhưng hoàn toàn có khả năng xử lý các đối tượng 3D và được xây dựng trên OpenGL. Rất nhỏ, được hỗ trợ tốt và trong khi tôi không thấy nhiều người tạo giao diện tùy chỉnh ở cấp độ thiết kế trò chơi, có một số dường như hoạt động rất tốt.


1
Không phải glfw chỉ là một thư viện để trừu tượng mã cửa sổ trên nền tảng máy tính để bàn? Làm thế nào bạn có thể tạo đồ họa với nó?

1
@GabrieleVierti cũng như tôi đã nói nó cũng xử lý đầu vào tăng tốc đa nền tảng. ngoài ra, nó đặc biệt hơn giúp bạn có được một bối cảnh OpenGL hoặc Vulkan và xử lý rất nhiều bản tóm tắt. Với bối cảnh tôi chỉ thực hiện một kim tự tháp biểu đồ của các điểm nóng trên màn hình và sử dụng nó làm phần chính của trình xử lý sự kiện nhấp / loại. sau đó điều khiển liên kết đến một nơi nào đó trên kim tự tháp. lệnh vẽ bình thường để thiết lập đồ họa thực tế. bất kỳ bộ giao diện người dùng nào cho nội dung web đều hoạt động tốt hoặc nghệ thuật cụ thể theo miền hơn
Garet Claborn

Sẽ dễ dàng hơn nhiều nếu chỉ cần thêm một khung gui được tạo sẵn (như ImGui thân yêu)

1
ImGui hoạt động ở chế độ ngay lập tức, vì vậy bạn sẽ mất khả năng tăng tốc phần cứng. những điều tôi đã đề cập dù sao tôi cũng phải theo dõi để kết xuất trò chơi nên việc thêm một số lớp phủ 2D không phải là một vấn đề chính. tôi có thể thấy điều đó sẽ gây rắc rối cho một số dự án như thế nào
Garet Claborn
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.