Eli kun yritin heittää tekstuuria objectiini, niin sitä ei syystä tai toisesta tule.
Mikä on vikana?
#include<SDL/SDL.h> #include <GL/gl.h> #include <GL/glu.h> void OpenGLT() { glViewport(0,0,640,480); glClearColor(0.0f,0.0f,0.0f,0.0f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60,640.0/480.0,1,100); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0f,0.0f,-6.0f); SDL_Surface *teks; teks = SDL_LoadBMP("teks.bmp"); glEnable(GL_TEXTURE_2D); GLuint tekstuuri[1]; glGenTextures(1,&tekstuuri[0]); glBindTexture(GL_TEXTURE_2D,tekstuuri[0]); glTexImage2D(GL_TEXTURE_2D,0,3,teks->w,teks->h,0,GL_RGB,GL_UNSIGNED_BYTE,teks->pixels); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.1f); glVertex3f(-1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f,1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f,0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glEnd(); SDL_GL_SwapBuffers(); } int main(int argc,char *argv[]) { if(SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr,"[Virhe] SDL:än alustaminen epäonnistui!",SDL_GetError()); SDL_Quit(); return 0; } SDL_Surface *naytto; naytto = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_OPENGL); SDL_Event tapahtuma; bool pois = false; while(pois == false) { SDL_PollEvent(&tapahtuma); OpenGLT(); } SDL_Quit(); return 0; }
Tuleehan kuva varmasti ladattua? Lisääpä sinne jotakin virheentarkastuksia. Ja älä missään nimessä yritä joka framella uudestaan sitä ladata, vaan laita lataus jo ohjelman alustuksen yhteyteen. Tarkista, että kuva on 24-bittisessä formaatissa. Formaatti on luultavasti GL_BGR. Muista myös vapauttaa pinta (SDL_FreeSurface(teks)) ja tuhota tekstuuri (glDeleteTextures(1, &tekstuuri[0])) lopuksi. Kaiken kukkuraksi olet laittanut tekstuurikoordinaatit hiukka pieleen, tarkistapa ne kohdalleen neliön kulmien mukaisesti.
P.S. Koodia olisi mukavampi lukea, jos se olisi jotenkin järkevästi sisennetty.
naytto = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_OPENGL);
Eikös tuon pitäisi olla ihan SDL_OPENGL?
Tuplapuskurointihan asetetaan
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
(korjatkaa jos olen väärässä)
Suosittelen muutenkin esimerkiksi tätä opasta.
Ja tosiaan tuo koodi voisi olla selkeämminkin
Sain nytten sen toimimaan...Tosin tuo opas oli huono ja vaihdoin sen toiseen, jonka avulla sain tuon toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.