Keet Skrevet 22. mai 2007 Del Skrevet 22. mai 2007 (endret) Jeg driver å lager en enkel 3D motor. Siden jeg syns det så litt flatt ut bestemte jeg meg for å prøve å lage støtte for shader. Alt kompilerte og det gikk fint helt til punktet: GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); Da fikk jeg meldinga : Unhandled exception at 0x00000000 in ZGL.exe: 0xC0000005: Access violation reading location 0x00000000. I starten har jeg definert: #include <gl\glew.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h> #pragma comment(lib,"glew32.lib") Noen som vet hva feilen kan være? Endret 1. juni 2007 av Keet Lenke til kommentar
GeirGrusom Skrevet 23. mai 2007 Del Skrevet 23. mai 2007 glCreateShader er null, grunnen er at du ikke har hentet pekeren med wglGetProcAddress Alt fra og med OpenGL 1.2 er extensions, og må først sjekkes om systemet støtter det (glGetString(GL_EXTENSIONS)) og deretter wglGetProcAddress() (husker ikke hva denne extensionen heter, GL_EXT_SHADER eller noe slikt) Lenke til kommentar
Giddion Skrevet 23. mai 2007 Del Skrevet 23. mai 2007 (endret) Bare av interesse: Har du kommet langt på 3D motoren? Endret 23. mai 2007 av Giddion Lenke til kommentar
Keet Skrevet 23. mai 2007 Forfatter Del Skrevet 23. mai 2007 glCreateShader er null, grunnen er at du ikke har hentet pekeren med wglGetProcAddressAlt fra og med OpenGL 1.2 er extensions, og må først sjekkes om systemet støtter det (glGetString(GL_EXTENSIONS)) og deretter wglGetProcAddress() (husker ikke hva denne extensionen heter, GL_EXT_SHADER eller noe slikt) Takker. Da skal jeg prøve det. Bare av interesse: Har du kommet langt på 3D motoren? 8678190[/snapback] Har ikke kommet så veldig lang enda, men har fått lagt in støtte for diverse teksturformater, en viss støtte for lys, import av mine egene modeller lagd i notepad(har ikke funnet noen god kode for import av 3DS), en enkel Partikkelgenerator og et loggsystem som er under konstruksjon. Det eneste som mangler for å få til et enkelt spill eller lignende er kollisjons testing. Lenke til kommentar
Keet Skrevet 23. mai 2007 Forfatter Del Skrevet 23. mai 2007 (endret) Jeg har gjort noen forandringer og bruker nå wglGetProcAddress til å definere funksjonene. Nå får jeg definert shader variablene, men får en lignende feilmelding som jeg fikk tidligere når jeg forsøker å kalle opp glShaderSource. Koden min ser nå slik ut: void LoadShaders(char* Filename1,char* Filename2) { PFNGLCREATESHADERPROC CreateShader = NULL; CreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader"); GLuint vertexShader = CreateShader(GL_VERTEX_SHADER); GLuint fragmentShader = CreateShader(GL_FRAGMENT_SHADER); char *source1 = readShaderFile(Filename1); char *source2 = readShaderFile(Filename2); PFNGLSHADERSOURCEPROC ShaderSource = NULL; ShaderSource = (PFNGLSHADERSOURCEPROC) wglGetProcAddress("glShaderSource"); ShaderSource(vertexShader, 1, (const char **) source1 , NULL); //kræsjer her ShaderSource(vertexShader, 1, (const char **) source2 , NULL); PFNGLCOMPILESHADERPROC CompileShader = NULL; CompileShader = (PFNGLCOMPILESHADERPROC) wglGetProcAddress("glCompileShader"); CompileShader(vertexShader); CompileShader(fragmentShader); PFNGLCREATEPROGRAMPROC CreateProgram = NULL; CreateProgram = (PFNGLCREATEPROGRAMPROC) wglGetProcAddress("glCreateProgram"); GLuint Program = CreateProgram(); PFNGLATTACHSHADERPROC AttachShader = NULL; AttachShader = (PFNGLATTACHSHADERPROC)glGetProcAddress("glAttachShader"); AttachShader(Program, vertexShader); AttachShader(Program, fragmentShader); free(source1); free(source2); } Endret 23. mai 2007 av Keet Lenke til kommentar
Giddion Skrevet 23. mai 2007 Del Skrevet 23. mai 2007 Bare av interesse: Har du kommet langt på 3D motoren? 8678190[/snapback] Har ikke kommet så veldig lang enda, men har fått lagt in støtte for diverse teksturformater, en viss støtte for lys, import av mine egene modeller lagd i notepad(har ikke funnet noen god kode for import av 3DS), en enkel Partikkelgenerator og et loggsystem som er under konstruksjon. Det eneste som mangler for å få til et enkelt spill eller lignende er kollisjons testing. 8680005[/snapback] når det gjelder 3ds: har du sett på 3DS File Loader men det er bare lasting av mesh og tekstur hvis jeg husker rett. Ellers så kan du se på Frustum.org ned på siden finner du Viewer for 3ds, mdc, md3 files. Lenke til kommentar
GeirGrusom Skrevet 23. mai 2007 Del Skrevet 23. mai 2007 www.wotsit.org er en glimrende kilde til filformater, selv har jeg implementert både LWO og 3DS flere ganger med kilde derifra. forresten, så regner jeg med at du bruker GL_ARB_SHADER_OBJECTS, og da må du skrive: glEnable(GL_ARB_SHADER_OBJECTS); hvis jeg ikke husker feil da, stund siden jeg holdt på med extensions nå.... Lenke til kommentar
Keet Skrevet 26. mai 2007 Forfatter Del Skrevet 26. mai 2007 Har vært litt opptatt så jeg har ikke fått gjort så mye i det siste. Men nå får jeg lasta inn shadere og jeg får et synlig resultat. Det ser ikke så bra ut enda, men det er en del å sette opp først. som Uniform Variabler og lignende. Uansett, takk for tipsene GeirGrusom. De hjalp veldig siden jeg ikke fant noen gode Tutorials på nettet. Lenke til kommentar
GeirGrusom Skrevet 30. mai 2007 Del Skrevet 30. mai 2007 (endret) Man trenger heller ikke overdrive med shaders, man kan få et serdeles veldig bra resultat med bra lyssetting og teksturer. Ofte synes jeg mange bruker altfor simple meshes, og alt for små teksturer, pluss at mange ikke engang bruker normals og får til skikkelig shading. jeg synes det er veldig viktig at skygger blir helt svarte, eller i det minetse veldig mørke, og bruk flere svake lys, framfor et sterkt et. Lys og skygge har alt å si for bildekvalitet. edit: Jeg vil legge til at jeg brukte veldig lang tid på å skjønne hvordan normaler fungerer i OpenGL, fordi tutorialene ikke egentlig forklarte godt nok hva det var i OpenGL: Normals er et punkt, relativt i forhold til vertexen, som jeg synes var litt misvisende, siden jeg tenkte på normals som en retning (og da hadde det strengt tatt kun vært nødvendig med X og Y) Så en normal som peker rett opp (hvor Y er vertikalaksen) er { 0, 1, 0 } Håper det sparer noen for timesvis med frustrasjon, for det hadde hjulpet meg veldig når jeg drev med det :S Endret 30. mai 2007 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå