1
.png 이미지를 SDL로 OpenGL 표면으로 변환하려면 어떻게해야합니까? 나는 지금 무엇을 :sdl 표면에서 OpenGL 텍스처
typedef GLuint texture;
texture load_texture(std::string fname){
SDL_Surface *tex_surf = IMG_Load(fname.c_str());
if(!tex_surf){
return 0;
}
texture ret;
glGenTextures(1, &ret);
glBindTexture(GL_TEXTURE_2D, ret);
glTexImage2D(GL_TEXTURE_2D, 0, 3, tex_surf->w, tex_surf->h, 0, GL_RGB, GL_UNSIGNED_BYTE, tex_surf->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
SDL_FreeSurface(tex_surf);
return ret;
}
내 코드는 것은 그리려면
glEnable (GL_TEXTURE_2D를); glBindTexture (GL_TEXTURE_2D, tex);
//Use blurry texture mapping (replace GL_LINEAR with GL_NEAREST for blocky)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor4f(1.0, 1.0, 1.0, 1.0); //Don't use special coloring
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(128.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(128.0f, 128.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(0.0f, 128.0f, 0.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
문제는 .bmp 파일에서만 작동하며 파란색으로 바뀌므로 잘못 되었습니까? 또한 .png를로드하려고하면 정말 이상하게 보입니다.
좋아요, BGR은 작동하지만 두 번째 작업을 수행하는 방법을 모릅니다. 위 코드를 인터넷에서 가져 왔습니다. – dirkwillem
@dirkwillem PNG 사진에 알파 채널 정보가있을 것입니다. 'GL_RGBA'를 시도하십시오. – jrok
감사합니다. – dirkwillem