Gå til innhold

En god bok om 3D spill programmering ?


Anbefalte innlegg

Videoannonse
Annonse

Hei.

Jeg har lyst å lage et spill, så er det noen gode bok 3D spillprogrammering ?

Jeg spør fordi jeg vil lære om game engine, inn/utganger, oppdatering fra internett, og slikt.

 

http://www.amazon.co.uk/Introduction-3D-Game-Programming-Direct/dp/1598220535/ref=pd_bxgy_b_img_b

 

har hørt litt om denne, ikke lest den selv! Men avhenger jo om du ønsker OpenGl eller Directx?

Lenke til kommentar

Frank D. Luna's Direct3D bok har jeg hørt mye negativt om. Jeg har ikke lest boka, men har sett litt på koden fra boka og den var ikke bra.

 

Selv driver jeg bare med OpenGL. Har kodet litt DirectX 9 og 10/11, DirectX har noen fordeler, som god debugging-støtte, hver funksjon returnerer en feil kode, og Microsoft har lagd gode verktøy som PIX og shader debuggers.

 

OpenGL har lenge hatt veldig dårlig debugging støtte, bare 5-6 typer feil koder som må hentes ut på en tungvindt måte. De akummuleres i en stack, så kan være tricky å finne hvilken kode som skaper en feil. Verktøy som gDebugger er veldig ålreit, og stopper opp i C++ koden din der feilen oppstod.

 

DirectX har mye god dokumentasjon på MSDN. Det er klare linjer i API-et mellom versjoner. Feks har de fleste structs og interfaces ett versjonsnr i navnet, som fex IDirect3DTexture9, IDirect3DDevice9, IDirect3DVertexBuffer9. Dette har ikke OpenGL og kan være forvirrende for nybegynnere, da det ikke alltid er klart hvilken versjon man jobber med. Mange av funksjonene som er del av OpenGL 4.2 heter det samme som de gjorde i OpenGL 1.0 fra 1992. Men, dette kan også være en fordel.

 

Det er viktig å kunne en del lineær algebra (vektor og matrise matte) når man driver med OpenGL og DirectX, dette er også veldig nyttig i generell spillprogrammering når du bruker en engine.

 

Ett par mattebøker jeg vil anbefalle

 

Essential Mathematics for Games & Interactive apps.

http://www.essentialmath.com/book.htm

 

En bok jeg har lånt på biblioteket og har lyst på... :)

Mathematics for 3D Game Programming and Computer Graphics

 

 

En kortere og lettere bok.

3D Math Primer for Graphics and Game Development

 

Dersom du ikke kan så mye matte og programmering, er det kanskje bedre å begynne med en eksisterende 3D engine som Unity3D. Her er en bok om Unity som SolHSA anbfaller. Usikker på hva slags nivå den legger opp til.

Lenke til kommentar

Jeg jobber selv mye med OpenGL, men har veldig lyst til å prøve meg mer på Direct3D. Det virker veldig mye bedre utformet enn OpenGL er blitt.

 

Har ikke jobbet så forferdelig mye med D3D at det gjør noe, men føler at moderne GL (3.x+) og D3D10+ er i bunn og grunn veldig likt. Last inn shadere, bind teksturer til units, vertex buffere osv, og rendre diverse former ...

 

Er mest syntaksforskjeller det går på, der D3D10 er mye mer "verbose", men feilsjekkingen er mer robust. Største forskjellen er kanskje GLSL og HLSL.

Endret av TheMaister
Lenke til kommentar

OpenGL har på langt nær all den samme funksjonaliteten som Direct3D har. Eksempelvis er ikke oppretting av kontekst en OpenGL oppgave, og det er derfor ikke noen måte i OpenGL å definere et kontekst, noe som har gjort det å opprette et OpenGL 3.0 kontekst helt dust komplisert, spesielt hvis du skal ha multisampling. Det er heller ingen som helst hjelpefunksjonalitet definert i OpenGL 3 og nyere. Direct3D derimot kommer med det meste du trenger. OpenGL API-et er ikke veldig strømlinjeformet. Det er en del forvirrende aspekter, eksempelvis kravet om at et VertexArray må være definert uavhengig om du trenger det eller ikke (Core og foreward profilen). Buffer skulle i utgangspunktet være definert bedre, men ble droppet uten noen forklaring på hvorfor.

Lenke til kommentar

Ja, det er et godt poeng. Å lage en GL3+ contekst i rein Win32/WGL er ganske knot (bakoverkompatibilitet hurra <_<), og litt knot i X11, men er jo det man har wrapper-biblioteker for egentlig. D3D kan implementere sånt direkte siden det er 0 krav om portabilitet til sære platformer så det hjelper jo på. Å få til multisampling er ganske enkelt når man først har fått 3.x contexten i gang. To linjer i attrib-arrayen eller noe sånt.

 

Et av de største problemene jeg har med D3D er hvordan vertex streams blir håndtert og binding med buffere. GL gjør det veldig lett med attribarrays, der man kan gjøre lookups ved navn, og binde direkte til id-en man får gitt, men i D3D må alt bakes inn i definisjon på forhånd, og det er ikke spesielt moro å ha med å gjøre hvis shadere plasserer argumentene sine i forskjellig rekkefølge enn andre, osv. I dette tilfellet må man begynne med reflection på shaderene, og da gir jeg bare opp. D3D10+ er enda mer plagsom enn det igjen ... :D

Lenke til kommentar

XGL og WGL er da ganske like. XGL er hakket vanskeligere enn WGL fordi det krever mer data, og fordi det er kanskje 1 promille av alle eksempler du finner på nettet som forklarer hvordan det gjøres i XGL, og da jeg søkte rundt etter OpenGL 3.0 for X var det dritvanskelig å finne noen som gikk skrittet videre fra OpenGL 2.0. Enda værre igjen for Cocoa som til tross for å ha et radikalt mye større marked enn X, har enda færre utviklere som benytter.

Anyways er det massivt hodepine at du må ha et OpenGL 3.0 kontekst i orden for å lage et nytt kontekst med multisampling, som gjør at du ender opp med å lage tre kontekster bare for å starte OpenGL 3.0.

 

Attributter er litt forvirrende i OpenGL, fordi det er i utgangspunktet to måter å gjøre det på: du kan binde på indeks, eller du kan spørre shaderen om indeksen. Binder du på din indeks må du linke shaderen på nytt, men det sier egentlig seg selv.

 

Jeg har veldig lite erfaring med Direct3D 10, men det jeg har erfart så er jeg veldig positiv til Direct3D fordi det er så mye irritasjonsmomenter jeg har hatt med OpenGL. OpenGL er gammeldags, det er til tider kryptisk, og med unntak av at HLSL av en eller annen grunn ikke har binære operatører definert for vektor og matriseklasser, har et vesentlig bedre gjennomtenkt programmeringsspråk hvor en jobber mot streams istedet for en helt flat imperativ C aktig model som GLSL benytter. Det er også ganske kult at DirectCompute er en del av HLSL, mens i OpenGL må du finne deg i å bruke OpenCL i tillegg som hverken deler syntaks eller API med GLSL.

 

Det er heller ikke noen god måte å rendre tekst med OpenGL, og de fleste OpenGL utviklere er helt pragmatiske med dette og benytter bitmap fonter. I DirectX derimot er det et velutviklet API for hardware aksellerert tekstrendering med full unicode tegnstøtte som du kan benytte rett i Direct3D.

Lenke til kommentar

Er ikke det lettere å lage et EXE fil som er nesten lik BlenderPlayer men kun fullskjerm når jeg spiller i BlenderPlayer med en *.blend fil? Det er en lettere løsning, for det meste er ferdig i Blender programmet.

Ønsker du å kune styre karakteren eller ikke? Ting er ikke så enkelt som du vil ha det til.

Endret av Gjest
Lenke til kommentar

Blender er et 3D program, bruk det til det. Av spillmotorer finnes det massevis. Kanskje du liker Unreal Engine? Du finner den gratis på Steam (under Tools)

Du har også Blender Game som ikke ser ut til å være i noen utstrakt bruk.

Unity er kanskje også et alternativ.

Noen litt mindre kjente er Irrlicht og Cube. Ken Silverman gir fra seg Voxlap gratis hvis du tør å rote med hardcore voxelgrafikk (Voxelstein3D er laget med Voxlap)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...