Joo, eli olen tässä vähän taas opsikellut OpenGL:ää ja tuli pieni ongelma vastaan teksturoinnissa, meinaan kun tekturoin jonkun objectin, niin teksturin väri ei ole oikea, vaan se muuttuu joksikin ihan oudoksi.
Tässä koodi, yrittäkää saada selvää...
#include <SDL/SDL.h> #include <GL/gl.h> #include <GL/glu.h> void opengl(); void glpiirto(Uint8 *nappi); float kulma = 0; float nopeus = 0; SDL_Surface *kuva; GLuint tekstuuri; int main(int argc,char *argv[]){ if(SDL_Init(SDL_INIT_VIDEO) < 0){ fprintf(stderr,"SDL:än alustaminen epäonnistui!",SDL_GetError()); SDL_Quit(); } SDL_Surface *naytto; naytto = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_OPENGL); SDL_WM_SetCaption("Testi1",NULL); SDL_Event tapahtuma; Uint8 *nappi; kuva = SDL_LoadBMP("t.bmp"); bool pois = false; if(!kuva){ pois = true; } opengl(); while(!pois){ SDL_PollEvent(&tapahtuma); nappi = SDL_GetKeyState(NULL); glpiirto(nappi); SDL_GL_SwapBuffers(); } SDL_FreeSurface(naytto); SDL_Quit(); } void opengl(){ glViewport(0,0,800,600); glMatrixMode(GL_PROJECTION); gluPerspective(60,800.0/600.0,1,160); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glGenTextures(1,&tekstuuri); glBindTexture(GL_TEXTURE_2D,tekstuuri); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexImage2D(GL_TEXTURE_2D,0,3,kuva->w,kuva->h,0,GL_RGB,GL_UNSIGNED_BYTE,kuva->pixels); } void glpiirto(Uint8 *nappi){ if(nappi[SDLK_UP]){ nopeus+=0.001; } if(nappi[SDLK_DOWN]){ nopeus-=0.001; } glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); kulma+=nopeus; glLoadIdentity(); glTranslatef(0.0f,0.0f,-7.0f); glRotatef(kulma, 0.0f, 1.0f, 0.0f); glMatrixMode(GL_TEXTURE); glBindTexture( GL_TEXTURE_2D,tekstuuri ); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd(); }
BMP:t ovat BGR-muodossa RGB:n sijaan, olisiko siinä ehkä vika? Kokeilepa käyttää glTexImage2D:n paikalla hieman viriteltyö yksilöä: https://www.ohjelmointiputka.net/koodivinkit/
Nytten toimii, kiitos Metabolix!
Aihe on jo aika vanha, joten et voi enää vastata siihen.