OpenGL glTexImage2D 纹理生成函数注意点
来源:互联网 发布:手机vr眼睛 软件 编辑:程序博客网 时间:2024/05/22 00:30
OpenGL glTexImage2D 纹理生成函数注意点
glTexImage2D 详解
函数原型为:void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
关于此函数的官方介绍请查看 https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glTexImage2D.xml
这里说一下调用此函数需要注意的地方:
1.调用glTexImage2D函数前必须要先调用glBindTexture函数
从函数的原型就能看出 glTexImage2D函数并没有指定生成的纹理和哪一个纹理id相对应,如果在调用glTexImage2D函数前不调用glBindTexture函数,则创建的纹理就不知道是为谁创建,既创建出来的纹理找不到对应的主人。
因此在调用glTexImage2D函数创建纹理时一定必须要先调用glBindTexture(GL_TEXTURE_2D, mTextureID);以指定glTexImage2D函数创建的纹理对应哪一个纹理ID。
在调用glTexImage2D该函数之前,必须调用glBindTexture(GL_TEXTURE_2D, mTextureID);以指定要操作的纹理ID,特此重申一次。
2.internalformat和format的类型必须要一致。
3.加载的图片的width和height必须是2的N次幂。否则不能正确显示纹理,如果有边界,则必须是2的整数幂+2。
注意glTexSubImage2D函数也需要图片的width和height必须是2的N次幂。
4.可以使用glPixelStorei函数来指定加载的图片的内存对齐方式。
glBindTexture(GL_TEXTURE_2D, _texture);
//OpenGL ES对纹理的尺寸有限制,就是长和宽都必须是2的整数次幂。
//在调用该函数之前,必须调用glBindTexture(GL_TEXTURE_2D, mTextureID);以指定要操作的纹理ID,此处是_texture。
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);//图片1字节对齐这样加载最安全 OpenGL默认为4字节对齐 4字节对齐处理速度快。至于为什么4字节对齐处理快,请看微机原理,简单解释下对齐的话可以使用移位运算。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);//纹理生成后再将图片对齐方式改为4字节对齐。
5.设置纹理的过滤方式
unsigned int mTextureID;
glGenTextures(1, &mTextureID);
glBindTexture(GL_TEXTURE_2D, mTextureID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//此为纹理过滤参数设置
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
//width、height等参数必需符合要求,此处不赘述。pData是指像素数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width,height, 0, GL_RGB, GL_UNSIGNED_BYTE, pData );
6.OpenGL 的 gluBuild2DMipmaps()函数支持任意分辨率的图片文件 但是OpenGL ES不支持gluBuild2DMipmaps函数。
- OpenGL glTexImage2D 纹理生成函数注意点
- OpenGL——glTexCoord2f()和glTexImage2D()函数的使用注意点
- OpenGL--生成纹理 gluBuild2DMipmaps()与glTexImage2D()的使用方法及区别
- OpenGL函数思考-glTexImage2D
- OpenGL函数思考-glTexImage2D
- OpenGL ES之glTexImage2D函数
- OpenGL ES之glTexImage2D函数
- OpenGL ES之glTexImage2D函数
- 《高效学习OpenGL》 之 指定纹理 glTexImage2D(),gluScaleImage(), glCopyTexImage2D(),glTexSubImage2D()
- glTexImage2D()和gluBuild2DMipmaps()和glTexParameteri()纹理过滤函数
- OpenGL纹理自动生成
- opengl 笔记 glMatrixMode()函数的参数 glTexCoord2f()和glTexImage2D()函数
- OpenGL: 纹理映射函数
- OpenGL API 之 glTexImage2D
- OpenGL API 之 glTexImage2D
- OpenGL API 之 glTexImage2D
- OpenGL API 之 glTexImage2D
- OpenGL自动生成纹理步骤
- java基础------==和equals的区别
- mac 如何显示隐藏文件和.点开头文件?
- 排序算法之简单算法——java实现
- Linux最常用命令及快捷键整理
- Spring入门(基于Java的容器注解之@Bean)
- OpenGL glTexImage2D 纹理生成函数注意点
- 文章标题
- Greendao.gen使用方法总结
- [bzoj1293][SCOI2009]生日礼物(莫队)
- html基础教程-doctype
- JAVA多态
- Myeclipse如何导出doc文档
- POJ 2187 计算几何之旋转卡壳
- 使用studio将module打包成jar包