Skocz do zawartości

[c++]Biblioteki graficzne


Qbe

Polecane posty

Witam wszystkich.

 

Założony temat ma na celu jedynie pomoc w wyborze odpowiedniej biblioteki graficznej dla projektu w C++.

Muszę zrobić (jako projekt na uczelnię) popularną grę "Statki" z użyciem biblioteki graficznej, którą mogę sobie dowolnie wybrać.

Zależy mi na tym by w miarę sobie uprościć pracę nie zagrzebując się w skomplikowanych instrukcjach.

 

Cały sens wątpliwości zamyka się w tym, by dana biblioteka zapewniała taką możliwość implementacji:

Rysuje planszę 10x10 (pól) i klikając w odpowiednie pole, mogę programowo rozróżnić który to rząd i która kolumna, by móc sprawdzać czy pod tym polem przeciwnik zaznaczył statek, bądź czy jest to "pudło". Kwestię dekoracji tych pól, ewentualnych obrazków, animacji itp. na razie pomijam. Zostawię to w kwestii możliwość danej biblioteki. Najbardziej mi zależy, by biblioteka zapewniała powyższą implementację i by była w miarę prosta.

 

Jest to mój pierwszy kontakt z bibliotekami graficznymi, więc proszę o wyrozumiałość.

Link do komentarza
Udostępnij na innych stronach

Polecam OpenGL + picking do wyboru pól. DirectX jest z tego co wiem trudniejsze, no chyba że chcesz spróbować. Jeżeli zdecydujesz się na OGL, to w internecie jest dużo tutoriali jak go używać, o pickingu też znajdziesz.

 

Pozdrawiam.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Tak naprawdę OpenGL to API, tak więc jest rozbudowany, ale nie jest bardzo trudny - wszystko sprowadza się do napisania lub ściągnięcia jednego kodu inicjującego, który potem używasz w każdym programie (jeśli jesteś bardziej ambitny to możesz go zanalizować i spróbować zrozumieć ;)), i tylko dodajesz nowe funkcje w zależności od tego, co ma robić czy jak wyglądać dany program. Allegro jest prostsze, ale ma o wiele mniej możliwości, być może dla początkującego jest lepsze, bo łatwiej i szybciej można coś stworzyć. Jest jeszcze SDL, to jest biblioteka mniej więcej na poziomie Allegro, ale można dodatkowo jej funkcjonalność połączyć z OGL. Poszukaj w internecie opisów każdej z tych bibliotek, niemało jest porównań każdej z nich, być może któraś Ci przypadnie do gustu. Ja od siebie powiem tak - jeżeli zależy Ci na prostocie, to Allegro albo SDL, jeżeli chcesz mieć większe możliwości i robić coś więcej (choćby 3D) to OpenGL.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Dziękuje za wyczerpującą odpowiedź.

Nie wiem jeszcze co będę chciał robić w przyszłości, ale kto wie czy to nie będzie właśnie C++ - pomimo, że na razie jestem na drugim roku informatyki i dopiero jestem po kursie samego języka.

Więc chyba wezmę się za OpenGL.

 

A która biblioteka jest najczęściej używa w firmach? Jest jakaś taka "uniwersalna"? Czy może "co kraj to obyczaj"?

Bo oprócz nauki "czysto pod projekt" - chyba lepiej pouczyć się takiej co się kiedyś przyda (może nawet w pracy - kto wie?!)

 

Kurrrrcze... Zapomniałem dodać (jeśli to robi różnicę), że pracuje pod Linuksem... Dokładnie Ubuntu...

Link do komentarza
Udostępnij na innych stronach

Jeżeli używasz Linuksa, to z bibliotek o większych możliwościach zostaje tylko OGL - DirectX działa jedynie na produkcjach Microsoftu, czyli na Windowsie. Jednak chyba DirectX jest częściej używany do pisania gier przez różne firmy, chociaż OGL nadaje się równie dobrze, jest do tego przenośny. Ciężko powiedzieć, czego jest się lepiej uczyć - jeżeli nie planujesz pisać tylko dla siebie, to najlepiej jest nauczyć się obydwu API, bo nie wiadomo co kiedy się może przydać, ale tak jak pisałem wcześniej, na nie-Windowsie DirectX'em się nie pobawisz.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Tak jak pisał Adam. Z tego co wnioskuje, to używasz tylko Linux'a (nic nie wspomniałeś o Windzie), także dla Ciebie pozostaje tylko OpenGL (jeśli chodzi o te poważniejsze API). Fakt DirectX ze względu na markę i z racji tego, że większość gier pisanych jest na Windę jest popularniejsze. Ale jeśli grałeś kiedykolwiek w jakąś grę stworzoną przez Carmack'a (np. Doom 3), to widziałeś zapewne, ze OpenGL niczym nie ustępuje DirectX'owi.

 

Powiadasz, że jesteś o kursie języka? To może rzeczywiście zacznij od np. SDL lub Allegro?(te biblioteki też są dostępne na pingwina), bo po:

 

1. Masz prosty projekt do wykonania, także SDL lub Allegro spokojnie by wystarczyło.

 

2. Rzeczywiście OpenGL jest prostszym API niż DX, ale i tak na początku można się pogubić w mnogości wywołań.

 

i po:

 

3. Lepiej poznać na początku coś prostszego i zobaczyć szybko rezultaty, niż bawić się kombajnem (takie jest moje skromne zdanie). :)

Link do komentarza
Udostępnij na innych stronach

Dziękuje wam bardzo za pomoc... Na prawdę doceniam wasze porady:)

 

Teraz tylko nie wiem czego właściwie się uczyć... Czy na początek prostych bibliotek takich jak SLD i Allegro czy od razu zacząć od OpenGL...

 

Proszę o jednoznaczną odpowiedź: zacząć od prostych bibliotek (SDL, Allegro) czy od razu zacząć od kombajnów - OpenGL?

Bo projekt projektem, ale utylitaryzm mówi - ucz się tego co przydatne....

Dodam, że jestem człowiekiem ambitnym, rządnym przygód informatycznych i nie bojących się wyzwań w C++ - gdyż coraz częściej myślę o nim poważnie w kwestii mojej przyszłości...

 

Krótka piłka: bawić się w SDL i Allegro, czy ruszyć od razu z OGL??

Link do komentarza
Udostępnij na innych stronach

Ja zaczynałem od OGL i nie miałem z nim dużych trudności. Jeżeli jesteś ambitny, to Tobie też proponuję od razu OGL - nie będziesz się przyzwyczajał do prostych bibliotek, po których być może nie chciałoby Ci się przenosić na coś trudniejszego ;).

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Czyli zaczynam zabawę z OpenGL:)

 

Mam używać GLUT? czy to złe narzędzie do tego?

 

Brakuje mi jakiś wskazówek dotyczących objaśnienia jak działać z OpenGL na Linuksie. Nie wiem jakie wykorzystać do tego biblioteki (co włączyć przez #include), jakich parametrów używać do kompilacji, jak to tworzyć (obowiązkowe instrukcje, metody, etc.)

Do tego byłby mi bardzo pomocny jakiś toturial. Poleci mi ktoś dobrą publikację, bądź kurs on-line?

 

Tak działa ten GLUT (poniżej przykładowy program). Czy to ma jakiś związek z OpenGL?

 

 
#include <GL/glut.h>
#include <GL/gl.h>

void init();
void display();

int main(int argc, char *argv[])
{
       glutInit(&argc,argv);
       glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
       glutInitWindowSize(500,500);
       glutInitWindowPosition(100,100);
       glutCreateWindow("Simple");
       init();
       glutDisplayFunc(display);
       glutMainLoop();
       return 0;
}

void init(void)
{
       glClearColor(0.0f ,0.0f ,0.0f ,1.0f);
       glColor3f(0.0f,0.0f,1.0f);
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       gluPerspective(45.0f,(GLfloat)250/(GLfloat)250,0.1f,100.0f);
       glFlush();
}

void display(void)
{
       glClear(GL_COLOR_BUFFER_BIT);

       glBegin(GL_TRIANGLES);
               glColor3f(1.0f,0.0f,0.0f);                      // Czerwony             
               glVertex3f( 0.0f, 1.0f, -3.0f);
               glColor3f(0.0f,1.0f,0.0f);                      // Zielony
               glVertex3f(-1.0f,-1.0f, -3.0f);
               glColor3f(0.0f,0.0f,1.0f);                      // Niebieski
               glVertex3f( 1.0f,-1.0f, -3.0f);
       glEnd();

       glutSwapBuffers();
}

Link do komentarza
Udostępnij na innych stronach

A skoro już temat istnieje to chciałbym jeszcze by ktoś mi wytłumaczył technicznie jak to działa.

 

Jeśli gra składa się z części: menu, rozmieszczenie statków oraz właściwa gra (gdzie gracz i komputer zatapiają statki), to robi się to tworząc trzy okna i po kolei się po nich porusza? czy może robi się jedno okno i w jakiś sposób po wykonaniu pierwszego, ekran się "czyści" i wyświetla kolejny?

 

Dobrze by było gdyby można było otworzyć trzy okna i móc po otwarciu każdego uzyskać jakiś jego numer, bądź stworzyć jakaś zmienną, która zidentyfikuje te okna. Wtedy w funkcji obsługi myszki (i klawiatury) za pomocą SWITCH podejmować działanie (inaczej myszka ma działać podczas umieszczania statków na planszy, a inaczej podczas gry).

 

Chce zaplanować sensownie mechanizmy i klasy całego projektu, ale jeszcze nie wiem jak to będzie wyglądało w praktyce z grafiką.

Link do komentarza
Udostępnij na innych stronach

Rysowanie sceny odbywa się najpierw w buforze OGL, z którego następnie cała zawartość jest kopiowana do okna, na którym chcemy scenę wyświetlić. W funkcji rysującej możesz więc zawrzeć warunki: jeżeli ma być wyświetlone menu, to wykonujesz instrukcje które wyświetlą menu, jeżeli ma być rysowana plansza gry, to również wywołujesz funkcje które ją wyświetlą. Pamiętaj, że funkcję rysującą wywołuje się w każdej klatce (co kilka ms), więc możesz co chwilę wyświetlać coś innego, a ekran "czyści się" automatycznie kiedy każesz mu wyświetlić nową scenę. W ten sposób możesz zrobić wszystko na jednym oknie.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

W życiu bym nie wpadł, że to tak działa...

 

To gry nawet takie z potężnym kombajnem graficznym również są robione na zasadzie instrukcji warunkowych i co kilka ms cały ekran jest "odświeżany", niezależnie czy cokolwiek się zmieniło?

Przecież to w wielu przypadkach absorbuje kolosalnie pamięć i procesor bez najmniejszego sensu... Który gracz jest w stanie choćby kliknąć myszką, czy wcisnąć klawisz w tak małej jednostce czasu?

 

Szczerze powiedziawszy, to myślałem, że bufor sprawdza np. po rozmiarze danych w pamięci, czy coś zostało zmienione i jak zostawimy grę w której nic się nie dzieje (np. na pauzie) to cały proces renderingu grafiki jest bezczynny. Myślałem, że taki bufor grafiki działa jak "demon" i "nasłuchuje" jak protokół komunikacyjny na ewentualną komunikację...

Link do komentarza
Udostępnij na innych stronach

Witam.

 

Kolego, jesteś zielony w temacie i to Ty gadasz bez sensu!!!

 

Jedno pytanie zaczynasz zmieniać w 100 innych, zamiast przysiąść i poczytać.

 

Google, mówi Ci to coś?

 

Wpisz tam np.: pętla czasu rzeczywistego.

 

Przeczytaj ten artykuł oraz kolejne jego części.

 

Pozdrawiam.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...