PDA

Prikaži potpunu verziju : Direct3D 9 Engine


Geomaster
16.6.2008, 11:29
Pozdrav svima!:ciao:

Naslov teme nam kaže, započeo sam projekat 3D Engine-a pisanog u C++-u koji koristi Direct3D 9. Mislio sam da bi možda mogao ovo brže i kvalitetnije da uradim uz pomoć nekih forumaša koji već imaju iskustva u ovome, pošto ja još imam da učim. Naravno, takođe mislim da bi tako, ako radimo zajedno, lakše i brže napravili kvalitetniji engine sa dodatnim mogućnostima. Ko želi da se uključi u ovaj projekat, neka me kontaktira na PM. Očekujem i javne komentare na ovu ideju.:D

Dakle, da zađemo malo dublje u samu konstrukciju engine-a, on bi (razume se) bio DLL koji se može pozivati iz drugih aplikacija. A sada malo tehničkih detalja:
Cilj engine-a bi bio da korisnicima približi način poziva starog D3D-a sedmice Retained Mode. Mislim na to da se sve radi na način malo pristupačniji nego plain Direct3D 9 jer bi sve tako bilo lakše za početak developing-a neke čak možda i komplikovanije 3D igre. Engine bi trebalo da podržava sve one advanced features D3D-a 9, kao što je recimo blur, i oni različiti efekti koje on ima kao neke advanced metode. Pored samog Direct3D-a, engine bi možda mogao da se bavi i input-om, zvukom ili 2D grafikom (za HUD) mada nama je najbitnije 3D. Odabrao sam C++ zbog toga što ne zahteva .NET framework, a uz to je (koliko sam ja razumeo neke elektronske izvore) i brži od C#-a.

Interesuje me šta forum misli o ovakvoj ideji.
Ko god želi da se uključi u projekat neka se javi u ovoj temi ili na PM.

Pozdrav!:ciao:

EDIT: Imam i problem u vezi header fajlova u nekim sample-ovima u DirectX 9 SDK, kompajler prijavljuje da ne može da nađe d3dx9.h i d3dxof.lib dok d3d9.h i mnoge druge .lib fajlove nalazi i include-uje bez problema. Fajlovi koje sam naveo postoje u istom direktorijumu sa fajlovima koje je normalno pronašao. Zna li neko šta da radim?

allokin
16.6.2008, 17:43
Mozda ti headeri includuju neke druge koje ti nemas?

Geomaster
17.6.2008, 10:10
Ne bih rekao, on cele header-e ne može da nađe. Npr. evo ga parče koda koje includuje sve te header-e:
#include <d3d9.h>
#include <d3dx9.h>Kompajler normalno pređe preko linije #include <d3d9.h>, ali prijavljuje da fajl d3dx9.h uopšte ne postoji, iako se nalazi u istom folderu sa d3d9.h, mada ja možda gledam pogrešan folder.

Btw, nema nikog? Barem da kaže šta misli??? Weird...

EDIT: Evo preko Windows search-a sam tražio fajl d3dx9.h i d3d9.h i našao ih je na tom jednom mestu. Upravo sam locirao i već kompajlovane .exe verzije tih primera i one rade perfektno. Ma dobro, problem kao problem, rešiću ga ja, ali mi je zaista čudno da baš niko ne postuje ni jedan komentar na ideju. Vidim da tema ima 53 pregleda... LOL

<Rio_da>
17.6.2008, 10:39
Ideja je je veoma zanimljiva ali dzabe, ja recimo tek ucim C++ pa ne bi znao nista da uradim prakticno, a onaj ko zna C++ radi negde i nema vremena da se bakce sa ovim...

verujem da ce kad tad neko da ti se pridruzi :)

Geomaster
17.6.2008, 11:05
Pa ja sam na primer, veteran D3D-a osmice u Visual Basicu, a C++ znam za sad samo sintaksu i još nešto tu i tamo, ali sa obrzirom na sličnost Direct3D-a za VB i C++ mogao bih da počnem da pravim 3D igre...:D Sad mi je letnji raspust pa ja imam puno vremena sad. Tražim tutorijale, učim... Mislim kad-tad ja bih naučio dovoljno da sam napravim taj engine. Ali kad bi to bilo? A uz to, ovde ima naravno, mnogo onih koji bi znali da to bolje i brže urade nego ja sam. Međutim, cilj je da radimo zajedno. Sve u svemu, razumem da neko nema vremena, ali ko ima vremena i koga ne mrzi... svaka čast. Neko će sigurno doći, a ja ću za to vreme skupljati tutorijale i učiti. Pa ćemo videti...

Btw, mogao bi i ti da se pridružiš... Nema veze što tek učiš C++, ako imaš vremena i volje... Uradićemo već nešto ;).

Edit: Yaay. Uspeo sam. Samo je trebalo prekopirati sve *.h i *.lib fajlove d3d-a 9 u VC++ Install Directory... :D:D:D:D:D;)

Martin.Tyler
4.10.2008, 10:06
Geomaster, ovo sto si napisao deluje vrlo primamljivo mada nisam bas sasvim siguran sta projekat treba da radi, vidim da spominjes neki stari retail 7. Inace nemoj se previse nadati da ti mogu pomoci, tek pocinjem sa Dx9 i ucim Javu vec odavno. Ako se jos uvek zanimas sa ovim ajde mi potvrdi nekako mozda mozemo nesto da se dogovorimo :cool:. Sto se mene tice, presao sam nabrzinu knjigu o dx9, Luna se zove, nemam sa cime da je uporedim tako da je dobra, ali me definitivno zanima DirectX.
Pozdrav.
Martin

Geomaster
4.10.2008, 13:14
Pa sad... Bilo kakvu knjigu za DirectX možeš odmah da pređeš, ali nisi naveo ni u kom programskom jeziku radiš (Java ili... :confused:) a te knjige moraju da se razumeju da bi znao da radiš u DX-u. I ne znam koji te API iz DX-a zanima ili bi hteo sve da koristiš (Direct3D, DirectInput, DirectSound, XAudio, X3DAudio, XInput, XACT) :D Daj malo preciznije informacije...

I da, Direct3D je do sedmice imao RM (retained mode) koji je dozvoljavao build scene (kao neki scenemanager) ali je radio mnogo sporije nego direktni immediate mode. Mislio sam da se ovde nešto tako implementira, ali da bude mnogo brže.

EclipsE
7.10.2008, 2:02
Dakle shta si odluchio? :) Nemam pojma zashto ali pre 2 minuta sam krenuo da razmishljam o gamedev-u opet :S

Geomaster
7.10.2008, 14:23
Ovaj engine će pričekati dok ne završim Lost World Zetu ;)

EclipsE
7.10.2008, 21:20
ok, ja cu zapocheti projekat :) mada razmishljam dosta o tome... shvatio sam da engine ne moze biti univerzalan nego mora biti namenjen nekom tipu igre (primer su Cry Engine, Source)... tako da razmishljam shta je najlakshe odraditi...
razmishljao sam i o deljenju engine-a u vishe pod grupa, npr. jedan deo samo za renderovanje, drugi deo brine o muzici, treci deo sadrzi fiziku ali nisam pronashao nachin da sve to bezbolno ujedinim u jednu stvar...
i da, ima li neko ideju gde mogu da pronadjem neke stvari vezane za arhitekturu 3d engine-a?

Geomaster
7.10.2008, 21:33
Pa sad, ima puno tutorijala, svaki će govoriti drugu stvar -_-. Najbolje je da nađeš neki OpenSource engine koji je najsličniji tipu engina koji praviš, proučiš source kod i po ugledu na tu arhitekturu pravš svoj engine. Lično moja preporuka, možda je rad prema nekom uputstvu/tutorialu sigurniji ali ja ću tako da radim za ImaginatoR-a (kad krenem da ga radim :D)

Pozz:ciao:

EclipsE
7.10.2008, 21:38
Uzmi ti engine od 30+ fajlova i ne znam koliko linija pa prouchi :D inache, ni tutorijali nisu efektivni.... totalna glupost, na kraju cesh da shvatish da ti fali milion stvari i opet trazish drugu literaturu..

Geomaster
7.10.2008, 21:56
Ne znam kako stoje stvari sa tutorialima -> nisam ih ni tražio, ali sa engine-om... Pa hm... Probaj da ideš redom :D:) Nego, nisam siguran, u kom smislu misliš arhitektura? Ako je to ono što mislim da jeste, a izgleda jeste ono što mislim da jeste, onda to nije nešto mnogo bitno -- ipak je prioritet rad engina, a za arhitekturu možeš napisati tutorijal ;) Znači svodi se na slične stvari - glavnu klasu (nešto kao EngineCore) neku Device klasu (pomoću koje renderuješ), eventualno neki built-in GUI sistem ako hoćeš da implementiraš i neka klasa tipa SceneManager ;) Znači ide EngineCore->Device->SceneManager, GUI (koliko ja znam) i onda ->SceneNode->Mesh->VBA i VBO .... (shvataš poentu :) ). Ipak mnogo toga zavisi od tipa složenosti. Ako ćeš pisati neki početnički engine namenjen više za učenje, pravi jednostavnu arhitekturu i lako pristupačne i intuitivne metode tima renderAll(), clear(), itd. a ako praviš ozbiljniji možeš dopustiti klase i hijerarhije na većem nivou jer u tom slučaju tvoj engine neće uzimati i koristiti baš svi koji misle da će 3D igru u C++ da naprave samo ako znaju Hello World :Freddy: Možda probaš da izguglaš neki bolji tutorial pa da samo po njemu radiš ali koliko ja vidim to je baš teško :opanachke Ili kupi neku knjigu, nemam pojma...

EclipsE
7.10.2008, 22:16
Pravio sam ja ranije engine u XNA (planiram i sada isto, samo bolji), ali nije to tako jednostavno imash EngineCore->Device->SceneManager itd...

Geomaster
9.10.2008, 13:04
Pa i nije ;) ima tu puno toga da se radi :D ja sam samo hteo da ti prikažem example arhitekturu engina, a naravno sve to treba neko da iskodira :a_whistli

EclipsE
9.10.2008, 18:28
Ubedljivo najveci problem su animacije modela, AI, fizika i logika igre...

Martin.Tyler
10.10.2008, 17:15
Pa sad... Bilo kakvu knjigu za DirectX možeš odmah da pređeš, ali nisi naveo ni u kom programskom jeziku radiš (Java ili... :confused:) a te knjige moraju da se razumeju da bi znao da radiš u DX-u. I ne znam koji te API iz DX-a zanima ili bi hteo sve da koristiš (Direct3D, DirectInput, DirectSound, XAudio, X3DAudio, XInput, XACT) :D Daj malo preciznije informacije...

I da, Direct3D je do sedmice imao RM (retained mode) koji je dozvoljavao build scene (kao neki scenemanager) ali je radio mnogo sporije nego direktni immediate mode. Mislio sam da se ovde nešto tako implementira, ali da bude mnogo brže.


Aha. Jezik je JAVA, a zanima me Direct3D. Mada bih pored toga morao da gulim i C++. Dobro, imam ja jos dosta da ucim :icon_stud, dok to ne prodjem ne mogu ti pomoci, ti hoces da pravis brzi "nesto sto ja ne znam sta je". Neki drugi put onda :odoK:

Geomaster
11.10.2008, 16:25
Java nije dobar izbor za D3D zato što je spora, čak štaviše ja mislim da za Javu nema nikakvih biblioteka koje importuješ za DirectX (mada možda i postoje). Moja iskrena preporuka je da pustiš Javu (ili je možeš iskoristiti da naučiš osnove), onda na C++ (jer je migracija sa Jave na C++ skoro bezbolna, osim što ćeš imati problema dok se snađeš sa memorijom itd. Ako vidiš da ti je C++ težak, onda nauči C pa se baci na C++. Uvek je tu i opcija Visual Basic-a (.NET) ali je pre verzije .NET totalno išao u kontru ostalim jezicima, samim tim što je bio pravljen za početnike i nema veliku brzinu (što se tiče VB.NET-a - za njega ne znam). Ako ti se Java sviđa, možeš ostati na njoj (na kraju krajeva dobra je jer je portabilna) ali moja preporuka je da se ne zadržavaš puno na njoj ako želiš da koristiš Direct3D.

EclipsE
11.10.2008, 19:48
Krenuo sam sa izradom.. inache engine ce biti namenjen FPS igrama (i jednom projektu sa placeholderima - kockama koji cu da uradim)... Shto se tiche fizike, koristice JigLibX (http://www.codeplex.com/JigLibX), i vecinu stvari odavde - http://creators.xna.com/education/catalog/ .
Senke ce biti problem... Animacije isto poshto necu imati model da eksperimentishem ali postoji isto neki XNA lib za animaciju modela na codeplex-u. O strukturi zasad mogu da kazem samo neke osnovne stvari koje cu uraditi. Poshto sam shvatio da je nemoguce uraditi univerzalan engine, i da je mnogo zamorno u igri podeshavati efekte (npr. shadere itd.) sve ce to engine da radi pomocu statichkih loader klasa i manageovanje fajlova ce biti odradjeno bolje nego shto sam ranije radio. Poshto sam razmishljao o tome da igra mora da ima razlichita stanja (meni -> drugi meni -> igra -> meni za pauzu), odluchio sam da odradim neshto na fazon ovog http://creators.xna.com/en-us/samples/gamestatemanagement .. Ne uzimam taj kod zbog toga shto mi se ne svidja bash princip rada.
Inache, engine ce imati svoje Screenove i svaki screen ce imati razne komponente koje mogu da se dodaju. U jednom trenutku moze biti aktivan samo jedan screen, i on preuzima ceo input/update/draw. Ukoliko se doda nov screen, prethodni ostaje ali se vishe ne updateuje/renderuje sve dok se ne sklone svi screenovi koji su ubacheni posle njega. Po tom principu, ako imamo game screen i dodje pause screen, on ce preuzeti sve dok ga ne sklonimo.
Kamera - planiram da odradim mogucnosti za cut-scene, jedino shto treba provaliti kako da interpoliram kameru :P Shto se tiche FPS kamere, smislicu neshto.
Grafika - tu dolazi deo koji moram dosta da razmislim... per-pixel osvetljenje ili per-vertex, vishe svetla, performanse.. teshko izbalansirati!
Fizika - kao shto sam rekao, engine je sjajan i mislim da cu moci da ga iskoristim za detekciju kolizije opushteno.
Ne mogu trenutno da se setim josh stvari, tako da pishite neshto xD Inache engine ce se zvati Phenomenon...

sasha vukelic
11.10.2008, 20:20
Interesuje me šta forum misli o ovakvoj ideji.pa meni npr. je uvijek nekako sjedala ideja da se prvo smisli igra, pa se tek onda odlucuje kako ce se najbolje (ili najlakse) realizovati; da li ce biti neki interni engine, da li ce se kupiti engine...

Geomaster
11.10.2008, 21:17
Trenutno radim igru, ovo je poprilično zastarela ideja :) Možda ću kad je završim odraditi nešto, ali bez pritiska ;)

zchira
24.10.2008, 17:00
Zdravo svima...
I mene zanima ta stvar oko game engina.
Pokusao sam da nadjem neke knjige/tutoriale o tome ali nisam imao mnogo uspeha...
Napravio sam 2 igre do sada (lavirinto (http://www.zchira.110mb.com)i lavirinto3d (http://lavirinto3d.sourceforge.net)) ali ni jedna nije koristila neki slozeni game engine.
Ja u stvari i ne znam koja bi struktura engine-a trebala da bude i kako sve to izgleda, a hteo bi da naucim jer mi arhitektura koju trenutno koristim u lavirinto3d-u vec postavlja neka ogranicenja (senke, refleksije i td...)...
Inace igre sam pravio u javi i LWJGL-u (openGL), tako da me zanima izrada engine-a u ovoj tehnologiji...