关于Opengl创建多个纹理
来源:互联网 发布:多空指标优化 编辑:程序博客网 时间:2024/06/15 14:17
关于纹理映射(以下简称贴图),在正六面体的各个表面贴图,网上有几种错误的示例,编译没有语法问题,但是不能被执行:
1:CSDN上看到有人采用for循环,逐个创建纹理,代码如下:
char *pictures[] = { // 创建一个位图名称数组,对应6幅位图
"Data/No1.bmp",
"Data/No2.bmp",
"Data/No3.bmp",
"Data/No4.bmp",
"Data/No5.bmp",
"Data/No6.bmp"
};
for(int i=0; i<6; i++) // 遍历位图名称数组,根据位图名称分别生成
{
if (TextureImage[i]=LoadBMP(pictures[i])) // 加载位图i成功,修改状态标志变量Status为TRUE
{
Status=TRUE;
glGenTextures(1, &texture[i]); // 为第i个位图创建纹理
glBindTexture(GL_TEXTURE_2D, texture[i]); // 将生成的纹理的名称绑定到指定的纹理上
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
if (TextureImage[i]) // 释放位图数组占用的内存空间
{
if (TextureImage[i]->data)
{
free(TextureImage[i]->data);
}
free(TextureImage[i]);
}
}
return Status; // 创建纹理并加载,返回成功或者失败的标志Status
}
2.有人用数组名称来创建纹理,如下所示:
GLuint texture[6]; // Storage For One Texture ( NEW ) 定义6个纹理,为6个纹理分配空间
glGenTextures(5, texture); // Create The Texture 创建纹理
正确的方法:
GLuinttexture[6];// Storage For One Texture ( NEW ) 定义6个纹理,为6个纹理分配空间
glGenTextures(5, &texture[0]);// Create The Texture 创建纹理
for(int i=0;i<6;i++)
{
if(TextureImage[i]=LoadBMP(picture[i]) ) //加载位图成功,则修改状态标志变量Status为TRUE
{
Status=TRUE;// Set The Status To TRUE
// Typical Texture Generation Using Data From The Bitmap使用来自位图数据生成 的典型纹理
glBindTexture(GL_TEXTURE_2D, texture[i]); //纹理名字 texture[0] 绑定到纹理目标上。2D纹理只有高度(在 Y 轴上)和宽度(在 X 轴上)
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //线性滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); //线性滤波
}
效果图如下,可自由旋转,放大缩小:
- 关于Opengl创建多个纹理
- OpenGL多线程创建纹理
- OpenGL创建纹理
- OpenGL-- Shader 多个纹理 变换
- opengl 关于纹理贴图
- OpenGL创建纹理步聚
- 创建opengl纹理的函数调用顺序
- openGL es2.0 创建纹理球
- openGL es2.0 创建纹理灯光球
- openGL es2.0 创建纹理灯光球
- 关于openGL纹理贴图的一些函数
- 关于OpenGL ES中的纹理压缩
- 关于OpenGL纹理映射的一点体会
- 关于OpenGL ES中的纹理压缩
- 关于OpenGL ES中的纹理压缩
- 关于opengl的纹理和调色板问题
- Android opengl 立方体 多纹理
- billboard 的OpenGL实现&&OpenGL多线程创建纹理
- 两个单向链表,找出它们的第一个公共结点。
- couchbase原理介绍
- C# Socket 编程详解
- uva 11795 Mega Man's Mission(动态规划-状态压缩DP)
- hdu 1394 Minimum Inversion Number(数据结构:线段树)
- 关于Opengl创建多个纹理
- Android ListView常用用法
- 空心三角形
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
- BDCP连接池链接Oracle
- 标准C++中的string类的用法总结
- STL map与Boost unordered_map
- UVa 128 - Software CRC
- linux 环境变量