gpt4 book ai didi

c++ - 如何在 GLUT 上加载 bmp 以将其用作纹理?

转载 作者:IT老高 更新时间:2023-10-28 22:16:35 29 4
gpt4 key购买 nike

我一直在寻找一个简单的解决方案,以在 C++ 中将 Sprite 添加到我的 OpenGL GLUT 简单月球着陆器游戏中,看来我必须使用 bmp,因为它们最容易加载并将它们用作矩形上的纹理。

我怎样才能将 bmp 加载为纹理?

最佳答案

看我简单的c实现函数来加载纹理。

GLuint LoadTexture( const char * filename )
{
GLuint texture;
int width, height;
unsigned char * data;

FILE * file;
file = fopen( filename, "rb" );

if ( file == NULL ) return 0;
width = 1024;
height = 512;
data = (unsigned char *)malloc( width * height * 3 );
//int size = fseek(file,);
fread( data, width * height * 3, 1, file );
fclose( file );

for(int i = 0; i < width * height ; ++i)
{
int index = i*3;
unsigned char B,R;
B = data[index];
R = data[index+2];

data[index] = R;
data[index+2] = B;
}

glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT );
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height,GL_RGB, GL_UNSIGNED_BYTE, data );
free( data );

return texture;
}

以上函数返回纹理数据。将纹理数据存储在变量中

GLuint texture;
texture= LoadTexture( "your_image_name.bmp" );

现在您可以使用 glBindTexture 绑定(bind)纹理

glBindTexture (GL_TEXTURE_2D, texture);

关于c++ - 如何在 GLUT 上加载 bmp 以将其用作纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518111/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com