Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: OpenGL Teksturointi ei toimi!

kayttaja-3842 [02.11.2006 19:11:31]

#

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

Metabolix [02.11.2006 19:40:47]

#

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.

Legu [02.11.2006 20:45:16]

#

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

kayttaja-3842 [04.11.2006 10:34:29]

#

Sain nytten sen toimimaan...Tosin tuo opas oli huono ja vaihdoin sen toiseen, jonka avulla sain tuon toimimaan.

Vastaus

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

Tietoa sivustosta