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.