c – OpenGL纹理的奇怪事件
我相当肯定我的纹理加载没有问题,但是,我无法让它们渲染!
我初始化GL时启用GL_TEXTURE_2D.然后我用这个函数加载纹理: GLuint loadTexture(std::string filepath) { SDL_Surface *image; if ( image = SDL_LoadBMP( filepath.c_str() ) ) { GLuint tex_id; glGenTextures( 1,&tex_id ); glBindTexture( GL_TEXTURE_2D,tex_id ); glTexImage2D( GL_TEXTURE_2D,3,image->w,image->h,GL_RGB,GL_UNSIGNED_BYTE,image->pixels ); SDL_FreeSurface(image); glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR ); textures.emplace(getFilename(filepath),tex_id); glBindTexture(GL_TEXTURE_2D,0); return tex_id; } else { // std::cout << "[!!] Could not open " << filepath << "! n"; return -1; } } 加载纹理,然后将纹理名称放在地图中,文件名作为键.该映射是全局定义为std :: map< std :: string,GLuint>纹理.我可以遍历地图并验证GL正确分配纹理名称.最后,我继续绘制我的四边形: glBindTexture(GL_TEXTURE_2D,textures["MY_IMAGE.BMP"]); glBegin(GL_QUADS); glTexCoord2f(0.0,0.0); glVertex3d(0.0,0.0,iNode->verticies[1]); glTexCoord2f(1.0,0.0); glVertex3d(1.0,iNode->verticies[2]); glTexCoord2f(1.0,1.0); glVertex3d(1.0,1.0,iNode->verticies[3]); glTexCoord2f(0.0,1.0); glVertex3d(0.0,iNode->verticies[4]); glEnd(); 一些值得注意的事情: >在绘制之前已经定义了这些四边形的颜色.如果我 纹理是否以某种方式在内部删除?我的渲染有问题吗? 如果需要,我愿意提供更多代码. 编辑: 解决方法
从
SDL_LoadBMP文档:
因此,提供给glTexImage2D的格式参数需要是GL_BGR. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |