关于Opengl创建多个纹理
2014-08-01 17:03
489 查看
关于纹理映射(以下简称贴图),在正六面体的各个表面贴图,网上有几种错误的示例,编译没有语法问题,但是不能被执行:
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 创建纹理
正确的方法:
GLuint
texture[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); //线性滤波
}
效果图如下,可自由旋转,放大缩小:
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 创建纹理
正确的方法:
GLuint
texture[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多线程创建纹理,附加我的测试结果
- billboard 的OpenGL实现&&OpenGL多线程创建纹理
- OpenGL创建纹理
- 关于java poi 大数据导出 创建多个sheet
- 关于OpenGL中的纹理坐标系与Cocos2d-x中的实现细节
- 关于jQuery创建多个相同的dom
- 6.OpenGL学习之多个纹理映射
- CCRenderTexture(动态创建纹理类 ---通过OpenGL方法 可以实现截屏功能)
- 关于页面动态创建多个highcharts图表所产生的问题汇总以及分析
- 关于OpenGL中几种纹理环绕模式的理解
- 关于OpenGL 2D纹理贴图的经验总结,
- Android学习札记39:关于安全退出已创建多个Activity的应用(2)
- Android学习札记38:关于安全退出已创建多个Activity的应用(1)
- opengl 关于纹理贴图
- ArchieOpenGL基础教程第八课:创建3D图形和纹理映射(MFC/SDI)
- OpenGL关于纹理坐标s、t、r、q的遐想之一————禁止转载
- 关于用作OpenGL纹理的图像有几点十分重要
- OpenGL多线程创建纹理
- 【转】OpenGL多线程创建纹理,附加我的测试结果
- 关于大四上学期的计算机图形学实验报告123——opengl建模、载入OBJ文件、纹理贴图、光照、交互。