Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: OpenGL ja tekstuurin väri muutos?

kayttaja-3842 [23.04.2007 23:25:24]

#

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();
     }

Metabolix [23.04.2007 23:49:04]

#

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/25013-c-sdl-pinta-opengl-tekstuuriksi

kayttaja-3842 [24.04.2007 10:45:30]

#

Nytten toimii, kiitos Metabolix!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta