从本地加载纹理【基于SOIL库】
【摘要】
本文参考自:http://blog.csdn.net/dreamcs/article/details/7696069
不过他是利用GLUT和GLAUX库加载的位图,我是基于SOIL(Simple OpenGL Image Library)库。
SOIL库除了可以直接将 2D/3D 图像加载成OpenGL纹理以外,还可以返回图像...
本文参考自:http://blog.csdn.net/dreamcs/article/details/7696069
不过他是利用GLUT和GLAUX库加载的位图,我是基于SOIL(Simple OpenGL Image Library)库。
SOIL库除了可以直接将 2D/3D 图像加载成OpenGL纹理以外,还可以返回图像的字节数据——SOIL_load_image 并将其保存为其他格式图片——SOIL_save_image(但要注意主动释放——SOIL_free_image_data),还能够截取屏幕——SOIL_save_screenshot。
关于SOIL库的资料可以移步 http://lonesock.net/soil.html(网站只提供基于VC工程的源码,需要自己简单编译一下)
废话不多说,代码如下:
-
void init(void)
-
{
-
glClearColor(0.0, 0.0, 0.0, 0.0);
-
glShadeModel(GL_FLAT);
-
glEnable(GL_DEPTH_TEST);
-
-
// ------------------------------------
-
texName = SOIL_load_OGL_texture
-
(
-
"../micky.png",
-
SOIL_LOAD_AUTO,
-
SOIL_CREATE_NEW_ID,
-
SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
-
);
-
-
/* check for an error during the load process */
-
if (0 == texName)
-
{
-
printf("SOIL loading error: '%s'\n", SOIL_last_result());
-
}
-
-
// 按字节对齐
-
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-
-
// 区别1
-
//glGenTextures(1, &texName);
-
glBindTexture(GL_TEXTURE_2D, texName);
-
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
-
// 区别2
-
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageRec->sizeX, imageRec->sizeX,
-
// 0, GL_RGB, GL_UNSIGNED_BYTE, imageRec->data);
-
-
}
-
-
void display(void)
-
{
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
glEnable(GL_TEXTURE_2D);
-
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
-
-
glBindTexture(GL_TEXTURE_2D, texName);
-
-
glBegin(GL_QUADS);
-
// 左面
-
glTexCoord2f(0.0, 0.0);
-
glVertex3f(-2.0, -1.0, 0.0);
-
glTexCoord2f(0.0, 1.0);
-
glVertex3f(-2.0, 1.0, 0.0);
-
glTexCoord2f(1.0, 1.0);
-
glVertex3f(0.0, 1.0, 0.0);
-
glTexCoord2f(1.0, 0.0);
-
glVertex3f(0.0, -1.0, 0.0);
-
// 右面
-
glTexCoord2f(0.0, 0.0);
-
glVertex3f(1.0, -1.0, 0.0);
-
glTexCoord2f(0.0, 1.0);
-
glVertex3f(1.0, 1.0, 0.0);
-
glTexCoord2f(1.0, 1.0);
-
glVertex3f(2.41421, 1.0, -1.41421);
-
glTexCoord2f(1.0, 0.0);
-
glVertex3f(2.41421, -1.0, -1.41421);
-
glEnd();
-
-
-
glFlush(); // 与单缓冲对应
-
// glDisable(GL_TEXTURE_2D);
-
glBindTexture(GL_TEXTURE_2D, 0);
-
}
-
-
void reshape(int w, int h)
-
{
-
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
-
glMatrixMode(GL_PROJECTION);
-
glLoadIdentity();
-
gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 30.0); // ☆
-
glMatrixMode(GL_MODELVIEW);
-
glLoadIdentity();
-
glTranslatef(0.0, 0.0, -3.6);
-
}
-
-
int main(int argc, char **argv)
-
{
-
glutInit(&argc, argv);
-
// 单缓冲
-
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
-
glutInitWindowSize(640, 640);
-
glutInitWindowPosition(100, 100);
-
glutCreateWindow(argv[0]);
-
-
init();
-
glutDisplayFunc(display);
-
glutReshapeFunc(reshape);
-
glutMainLoop();
-
-
return 0;
-
}
(比如创建OpenGL 上下文 和 初始化GLEW扩展)
效果图所示:
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/53009017
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)