C++ i grafika 3D, od czego zacząć?

Tak więc, umiem napisać HelloWorlda w C++, więc wpadłem na pomysł, żeby napisać drugiego Crysisa, oczywiście z o wiele lepszą grafiką, tylko niemam pojęcia, jak się za to zabrać. Oczywiście to, co wcześniej napisałem to tylko żart, ale załóżmy, że chciałbym napisać jakąś aplikację w C++ z wykorzystaniem grafiki 3D, tylko od czego zacząć, jakie biblioteki?

Na początek polecam pouczyć się Matematyki, potem poszukać tutoriali OpenGL, a następnie ćwiczyć, ćwiczyć i jeszcze raz ćwiczyć.

Od jakichś bibliotek, np.:

SDL: http://www.libsdl.org/

Allegro: http://www.talula.demon.co.uk/allegro/

Ale najpierw trzeba znać język w którym się chce pisać, bez tego raczej trudno używać zewnętrznych bibliotek, szczególnie o tak rozbudowanych jak powyższe.

Matematyka… z tym to chyba będą problemy, ponieważ umiem tylko to, co jest w szkole (1 klasa gim.) a to jest bardzo mało. A co do OpenGL, to może mógłbyś jakieś książki polecić?

Allegro to nie byłby głupi pomysł, ponieważ trochę tą bibliotekę znam, ale potrzebuję coś, co sobie radzi z plikami blendera i w miarę zależy mi na polskich tutorialach i/lub kursach.

Z książek polecam “OpenGL i wprowadzenie do programowania gier” Nakom-u. Co tam jest? Z matematyki byłoby to: wektory, macierze, trójkąty i zależności, trochę fizyki. Wystarczyła mi by zaimplementować sobie własną klasę do obsługi macierzy o dowolnych rozmiarach, wektory i funkcję. Są podstawy OpenGL, jest wczytywanie modeli *.ace. Bardzo przystępnie opisane.

Gdy zaczynałem swoją przygodę z 3D też byłem w tej klasie. Początki są trudne(szczególnie shadery i tworzenie macierzy widoku/projekcji), ale wszystko jest osiągalne.

SDL/Allegro można wykorzystać do tworzenia okna, odejdzie zabawa z WinAPI/X Windows/GTK/Qt/WxWidgets/czymś innym.

Z plikami Bledera tylko Blender sobie radzi. Te pliki to AFAIK jakieś dump-y pamięci. Ale działa eksporter do Obj(no dobra, prawie działa, ostatnio mi UV-ek nie eksportuje) i są eksportery do innych formatów. Obj polecam na początek bo jest naprawdę prosty do sparsowania(~200 linii kodu).

Najważniejsze są chęci :wink:

http://nehe.gamedev.net/ polecam :slight_smile:

Dobra, narazie pouczę się z http://nehe.gamedev.net/ a potem jeśli dobrze pójdzie zakupię książkę “OpenGL i wprowadzenie do programowania gier”. Ale mam małe pytanie. Jakie muszę pobrać biblioteki i gdzie wrzucić w Dev-C++, ay całość działała?

Jedyne co to musisz “doinstalować” SDL(bo tego używa NeHe, ale przykładowe kody też są w innych bibliotekach chyba). Reszta już jest(powinna być). Jeśli już chcesz korzystać z tutoriali NeHe to tylko tych nowych. Te stare są przestarzałe, acz można z nich korzystać.

Ciekawe czy za kilka miesięcy pojawi się post od KijekPL23 typu:

:lol:

KijekPL23 , zanim zaczniesz pisać grę w 3D napisz najpierw prostego wężyka w trybie konsolowym, jak się na tym nie załamiesz to spróbuj napisać pacman’a, jak i to ci się uda to możesz zająć się grafika 2d napisz coś w stylu digger’a, a jak i to przejdzie to już będziesz gotów na grafikę 3D.

Już nie wspomnę o potrzebie dobrej znajomości trygonometrii aby jakoś tą grafikę 3D w miarę sensownie obsłużyć. Może podam dosyć prosty przykład zadania aby cię od razu odstraszyć (takich a nawet o wiele bardziej skomplikowanych zadań będzie w grze 3D setki jeżeli nie tysiące) :

Oczy widza znajdują się na wysokości 1,70 m w drzwiach pokoju kwadratowego pokoju o wymiarach 3x3 m i wysokości 2,2 m. Drzwi są dokładnie na środku pokoju. W górnym prawym dalszym rogu znajduje się jedyne źródło światła o rozproszeniu 25 stopni skierowane dokładnie na środek pokoju.

Narysuj ten pokój razem z plamą światła w izometrii.

Jeżeli nie rozwiążesz tego zadania w jakieś 5-6 godzin to szczerzę radzę zapomnij narazie o grafice 3D.

Wężyka w konsoli pisać nie próbowałem i nie sprubuję. Umiem zato napisać prostą grę RPG z wykorzystaniem biblioteki graficznej allegro. Trygonometria? Co to w ogóle jest (oprócz tego, że zalicza się do matematyki)? Tego zadania zrobić nie potrafię, ale i tak poprubuję z 3D, bo game engine w Blenderze zabardzo mi się niepodoba.

Nic nie musi. Ja napisałem kilka snakeów i zacząłem raz jakiś większy RPG którego nie skończyłem przez scrollowanie mapy(blitowanie co klatkę zabija fillrate).

Sądząc po Twojej wypowiedzi nie programowałeś ani razu gdy/grafiki 3D z użyciem OGL/D3D. To co napisałeś przydaje się do pisania softwarowego renderera, nie do tychże API. Tam wystarczy ustawić odpowiednie macierze(w OpenGL z wykorzystaniem shaderów jest mały problem, ale z odrobiną chęci i to da się załatwić) i wysłać do karty wierzchołki. To wystarczy, karta odwala resztę roboty(co sprowadza się do wymnożenia macierzy i przekształceniu trójkątów na postać znośną dla monitora).

Tak btw: to zadanie sprowadza się do narysowania quada, ustawienia światła punktowego(tutaj ja bym użył shadera z per-pixel lighting, ale można użyć też tych wbudowanych w OGL/D3D), ustawienia macierzy projekcji i “patrzenia”(ustawienie oka w odpowiednim miejscu i kierunku) i wymnożeniu tych macierzy.

@ KijekPL23 : nie słuchaj [alex]a tylko próbuj i rozwiązuj problemy SAM(z pomocą Google).

PS. [alex] stajesz się coraz bardziej chamski. Za wszelką cenę chcesz zniechęcić KijkaPL23 do pisania gier co IMO jest karygodne.

Owszem nie zrobiłem nic sensownego z użyciem OGL/D3D ale pobieżnie zapoznałem się. Nie jestem pewien czy ktoś kto nie ma zielonego pojęcia na jakiej zasadzie wyżej wymienione zadanie się rozwiązuje wpadnie na pomysł jak te macierze stworzyć i w jakiej kolejności mnożyć, nawet nie będzie wiedział że w mnożeniu kolejność może odgrywać jakąś role.

Wiesz, jak moja gadka zniechęci KijkaPL23 to już na 100% i tak nie ma szans by dobrnął do końca z tą grą, więc jeżeli już się zniechęci to tylko oszczędziłem jego czas. :stuck_out_tongue: A jeżeli się nie zniechęci to może jest jakaś mała szansa jeden na milion. :lol: Tak a propos nie zrozumiałem co tu chamstwo ma do rzeczy …

I po to jest forum by pomagać(choć niektóre pytania to przegięcie…), a nie od razu ludzi zniechęcać. W tej książce co podałem, czy w tutorialach NeHe jest wszystko opisane. Co prawda NeHe nie opisał co to macierz i jak się je mnoży(i że mnożenie nie jest przemienne), a Wojciech Sterna nie opisał jak się tworzy macierz projekcji/widoku, ale używają GLU które to za nas załatwia(choć później i tak lepiej jest to samemu robić).

I tu się mylisz. Jeśli się nie zrazi to MA SZANSĘ, a jak się zrazi to ta szansa przepadnie. Każdy jakoś zaczynał i każdy miał problemy. Jeden większe, drugi mniejsze, ale każdy je miał. I oto chodzi by te problemy niwelować, stawiać sobie nowe wyzwania i do nich dążyć, a nie stać w miejscu jak jakiś patyk(to nie jest żadna przenośnia do KijkaPL23 :wink: )

Ton wypowiedzi jest lekceważący. Jak czytałem wydawało mi się(albo i nie…), że uważasz siebie za lepszego od wszystkich Nie w sensie umiejętności/doświadczenia, bo je na pewno masz i bardzo możliwe, że większe niż większość na tym forum, ale w sensie “ja wiem więcej, ty nic nie wiesz, więc siedź cicho”. Ja takie wypowiedzi uważam za chamskie.