Fredrik90 Skrevet 21. januar 2005 Del Skrevet 21. januar 2005 hei har et problem med en kode bit her. får ikke vist noe annet enn en svart skjerm. BOOL DisplayScene() { SwapBuffers(hdc); // set up the view orientation glLoadIdentity(); // clear the screen // clear screen and depth buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // enable blending glEnable(GL_BLEND); // render the heightmap RenderHeightMap(g_HeightMap); // enable read-only depth buffer glDepthMask(GL_FALSE); // set the blend function to what we use for transparency glBlendFunc(GL_SRC_ALPHA, GL_ONE); // set back to normal depth buffer mode (writable) glDepthMask(GL_TRUE); // disable blending glDisable(GL_BLEND); return TRUE; } // end DisplayScene() dette er hele funskjonen som dere ser hva er feilen som gjør at jeg ikke ser noe. tror selv at jeg har feilplassert SwapBuffers(hdc); bruker også den etter at jeg har opretet vinduet. trenger jeg å gjøre det hele tiden? håper på et raskt svar. Mvh. Fredrik Lenke til kommentar
saboi Skrevet 21. januar 2005 Del Skrevet 21. januar 2005 eh. selvfølgelig får du ikke noe annet enn en svart skjerm.. du tegner ikke noen primitiver. jeg tror heller ikke det er hele koden din, paste alt. Lenke til kommentar
Fredrik90 Skrevet 21. januar 2005 Forfatter Del Skrevet 21. januar 2005 som det står i koden så er det en funksjon som heter renderheightmap(); her er den: void RenderHeightMap(char pHeightMap[]) { int X = 0, Y = 0; // Create some variables to walk the array with. int x, y, z; // Create some variables for readability bool bSwitchSides = false; // Make sure our height data is valid if(!pHeightMap) return; // We want to render triangle strips glBegin( GL_TRIANGLE_STRIP ); // Go through all of the rows of the height map for ( X = 0; X <= MAP_SIZE; X += STEP_SIZE ) { // Chechk if we need to render the opposite way for this column if(bSwitchSides) { // Render a column of the terrain, for this current X. // We start at MAP_SIZE and render down to 0. for ( Y = MAP_SIZE; Y >= 0; Y -= STEP_SIZE ) { // Get the (X, Y, Z) value for the bottom left vertex x = X; y = Height(pHeightMap, X, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); // Get the (X, Y, Z) value for the bottom right vertex x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); } } else { for ( Y = 0; Y <= MAP_SIZE; Y += STEP_SIZE ) { // Get the (X, Y, Z) value for the bottom right vertex x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); // Get the (X, Y, Z) value for the bottom left vertex x = X; y = Height(pHeightMap, X, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); } } // Switch the direction the column renders to allow the fluid tri strips bSwitchSides = !bSwitchSides; } // Stop rendering triangle strips glEnd(); } men hva med den swabbuffers når skal den brukes? mvh. Fredrik Lenke til kommentar
Fredrik90 Skrevet 22. januar 2005 Forfatter Del Skrevet 22. januar 2005 ingen som vet? Lenke til kommentar
saboi Skrevet 22. januar 2005 Del Skrevet 22. januar 2005 (endret) funker det uten tekstur? er kamera rettet mot terrenget? hvorfor har du enabla blending uten å spesifisere hvordan ting skal blendes? kan du se noe hvis du bare tegner en vanlig trekant? hvorfor har du to måter å tegne terrenget? (// Chechk if we need to render the opposite way for this column) hvordan culler du? clockwise eller counter clock wise, og er lager du trekantene motsatt vei? prøv å tegn wireframe først til du ser at du funker, så kan du begynne å tenke på ting som teksturer og blending og sånn.. du burde også bruke vbo's (vertex buffer object) som er noe av det samme som vertex buffers i D3D siden glBegin(GL_TRIANGLESTRIP) glVertex3* er *utrolig* mye treigere. og swapbuffers skal brukes når du vil bytte backbuffern med frontbuffern, altså når du er ferdig med all tegningen for den framen du skal vise Endret 22. januar 2005 av saboi Lenke til kommentar
Fredrik90 Skrevet 22. januar 2005 Forfatter Del Skrevet 22. januar 2005 takker for et meget lærerikt innlegg. Lenke til kommentar
GeirGrusom Skrevet 26. januar 2005 Del Skrevet 26. januar 2005 SwapBuffers flipper FrontBuffer og BackBuffer, så den skal etter glFlush(), som er den siste funksjonen du skal kalle (som gjør at alle tegnekommandoer som ligger i stacken blir utført før programmet går videre) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); (...) glFlush(); SwapBuffers(HDC); som saboi har sagt, bruk glDrawElements, eller glDrawBuffers (denne bruker jeg på terreng, siden alle trianglene er etter hverandre allikevel) ...og skal du tegne terreng, er octree å abefale, jeg kan tegner 1024x1024 terreng uten det minste hakking, fordi den deler opp terrenget på en nokså genial måte, og tegne kun det som synes i viewporten, ved å bruke frustum (forklart på gametutorials.com) Lenke til kommentar
Klette Skrevet 27. januar 2005 Del Skrevet 27. januar 2005 gametutorials.com er dog ikke gratis lenger Lenke til kommentar
Fredrik90 Skrevet 27. januar 2005 Forfatter Del Skrevet 27. januar 2005 nei og det er synd. takker for det inlegget der geir. veldig bra. Lenke til kommentar
Fredrik90 Skrevet 28. februar 2005 Forfatter Del Skrevet 28. februar 2005 hei igjen.... sorry at jeg drar frem en gammel post. men har tankt litt. denne koden void RenderHeightMap(char pHeightMap[]) { int X = 0, Y = 0; // Create some variables to walk the array with. int x, y, z; // Create some variables for readability bool bSwitchSides = false; // Make sure our height data is valid if(!pHeightMap) return; // We want to render triangle strips glBegin( GL_TRIANGLE_STRIP ); // Go through all of the rows of the height map for ( X = 0; X <= MAP_SIZE; X += STEP_SIZE ) { // Chechk if we need to render the opposite way for this column if(bSwitchSides) { // Render a column of the terrain, for this current X. // We start at MAP_SIZE and render down to 0. for ( Y = MAP_SIZE; Y >= 0; Y -= STEP_SIZE ) { // Get the (X, Y, Z) value for the bottom left vertex x = X; y = Height(pHeightMap, X, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); // Get the (X, Y, Z) value for the bottom right vertex x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); } } else { for ( Y = 0; Y <= MAP_SIZE; Y += STEP_SIZE ) { // Get the (X, Y, Z) value for the bottom right vertex x = X + STEP_SIZE; y = Height(pHeightMap, X + STEP_SIZE, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); // Get the (X, Y, Z) value for the bottom left vertex x = X; y = Height(pHeightMap, X, Y ); z = Y; // Set the current texture coordinate and render the vertex SetTextureCoord( (float)x, (float)z ); glVertex3i(x, y, z); } } // Switch the direction the column renders to allow the fluid tri strips bSwitchSides = !bSwitchSides; } // Stop rendering triangle strips glEnd(); } vil si at den må telle seg frem til 1024. og det vil da si at jeg er heldig om jeg får en frame count på rundt 0,0001? eller er jeg helt på bærtur? med spørrende hilsen Fredrik Lenke til kommentar
iobas Skrevet 28. februar 2005 Del Skrevet 28. februar 2005 skjønner ikke helt spørsmålet ditt jeg.. men her er en kode for å generere en MxN grid, og det er ganske trivielt å slå opp i en heightmap-tabell som du bruker til y-verdien. det er dx da, men det er lett å "porte" til ogl: http://rafb.net/paste/results/ngZcfH41.html legg merke til at det blir laget på xy-planet, så bare sett z-verdien til y-verdien, og y-verdien til heightmap-tabellen din Lenke til kommentar
Fredrik90 Skrevet 1. mars 2005 Forfatter Del Skrevet 1. mars 2005 MAP_SIZE = 1024 foresten... Lenke til kommentar
<BøNilzen> Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Litt vanskelig å skjønne spørsmålet ditt, men hvis du tror det vil gå tregt pga at den på telle til 1024 for hver frame, så skal ikke det være noe problem. Husk at skjermen du ser på nå oppdateres 60+ ganger i sekundet, og for hver oppdatering må den skrive til 1024*768 piksler (eller mer) noe som er betydelig mer arbeid enn å telle til 1024. Lenke til kommentar
Fredrik90 Skrevet 1. mars 2005 Forfatter Del Skrevet 1. mars 2005 fint.... da skulle det nok gå bra. Lenke til kommentar
Fredrik90 Skrevet 1. mars 2005 Forfatter Del Skrevet 1. mars 2005 void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) den indices skal den peke til en array? ikke til en vector<class> name; leste norsk bok som jeg angrer på. der ble den bare kalt kontainer. hva kaller dere den? en vector? vet hva en array er. mvh. Fredrik Lenke til kommentar
☀ ❄ Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 leste norsk bok som jeg angrer på. der ble den bare kalt kontainer. hva kaller dere den? en vector? vet hva en array er. Sier konteiner når jeg snakker om konteinere generelt, og std::vector når jeg snakker om std::vector spesielt -- på samme måte som at jeg sier bil når jeg snakker om biler generelt, og Audi når jeg snakker om Audi spesielt. Lenke til kommentar
Fredrik90 Skrevet 1. mars 2005 Forfatter Del Skrevet 1. mars 2005 og svar på spørsmålet mitt er? mener øverste? og hvordan skal jeg sette en array opp da. msdn sier veldig lite. link Lenke til kommentar
Dead_Rabbit Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 (endret) Vær glad for at folk i det minste prøver å hjelpe deg! Det er ikke noe man bare skal forvente Endret 1. mars 2005 av zirener Lenke til kommentar
☀ ❄ Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Vær glad for at folk i det minste prøver å hjelpe deg! Det er ikke noe man bare skal forvente Hvis det er meg du sikter til: Å si at jeg "prøver" å hjelpe ham er ikke helt presist. Det er mer riktig å si at jeg fant et spørsmål som jeg valgte ikke å overse. Lenke til kommentar
søpple Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 (endret) int mitt_array[10]; Ser virkelig const GLvoid *indices ut som en deklarasjon som tar i mot noe av en type std::vector? Tror i grunn det du driver med er rimelig bak mål om du ikke fatter hva dette med arrayer går ut på. Virker som om du ikke har fått med deg det grunnleggende og bare driver gjette-lek ... og i tillegg skal kombinere dette med en mulig begrenset kunnskap om OpenGL .. All kunnskap er begrenset i starten, men en forutsetning for å kode (eller skaffe seg kunnskap om) OpenGL er kunnskap om (spesiellt) C'ish-måter å gjøre ting på. Jeg tror dette er noe som tikker rundt oppe i hodet ditt (altså du vet fra før av at det jeg sier stemmer) - men du velger å ignorere det og driver i stedet gjette-lek. Endret 1. mars 2005 av søpple 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å