在FC15上的C OpenGL编程中,Eclipse和SDL纹理存在一个奇怪的问题。
对于设置测试目的,使用NeHe示例代码: http://bigdaddysurf.com/blog/?p=21
如果我们使用
在控制台上运行它,程序就会运行并加载纹理$ make
$ ./lesson07
- 因此,所有环境所需的lib都已安装并存在于linux开发环境中。但是,如果我们尝试在IDE Eclipse上执行相同操作,程序会运行,但不会加载任何纹理,因此我们只能看到一个没有纹理的白框。
项目环境的设置将libs放入链接器库(L),例如SDL,SDLmain,SDL_image,GL,GLU等 - 例如: OpenGL and GLUT in Eclipse on OS X
SDL程序适用于键盘等输入。但是,纹理不会加载。
在NeHe提供的Makefile中使用的是在控制台中运行命令行,我注意到以下信息:
CC = gcc -Wall -ansi
all:
$(CC) lesson07.c -o lesson07 -lGL -lGLU `sdl-config --cflags --libs`
然后,读取在IDE Eclipse上自动生成的Makefile,我发现显然缺少这个额外的标志:sdl-config --cflags --libs
。应该是这个额外的标志是什么阻止命令SDL_LoadBMP显示纹理?
如果是这样,有关如何正确调整Eclipse设置的附加信息以允许生成的IDE Makefile正常工作的一些建议?
关于加载纹理的方式,这是函数:
int LoadGLTextures( )
{
/* Status indicator */
int Status = FALSE;
/* Create storage space for the texture */
SDL_Surface *TextureImage[1];
/* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */
if ( ( TextureImage[0] = SDL_LoadBMP( "data/crate.bmp" ) ) )
{
/* Set the status to true */
Status = TRUE;
/* Create The Texture */
glGenTextures( 3, &texture[0] );
/* Load in texture 1 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture( GL_TEXTURE_2D, texture[0] );
/* Generate The Texture */
glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
TextureImage[0]->h, 0, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels );
/* Nearest Filtering */
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST );
/* Load in texture 2 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture( GL_TEXTURE_2D, texture[1] );
/* Linear Filtering */
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR );
/* Generate The Texture */
glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
TextureImage[0]->h, 0, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels );
/* Load in texture 3 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture( GL_TEXTURE_2D, texture[2] );
/* Mipmapped Filtering */
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR );
/* Generate The MipMapped Texture ( NEW ) */
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, TextureImage[0]->w,
TextureImage[0]->h, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels );
}
/* Free up any memory we may have used */
if ( TextureImage[0] )
SDL_FreeSurface( TextureImage[0] );
return Status;
}
所有评论都非常感谢。
答案 0 :(得分:3)
纹理文件的路径是否是硬编码的?它是重要的吗?然后必须从正确的目录启动程序,以便相对路径实际评估纹理,否则找不到文件并且没有加载纹理。
IDE倾向于在构建目录中编译和运行已编译的二进制文件,从而破坏任何硬编码文件路径。 Eclipse只是没有使用正确的工作目录启动程序。根据操作系统,有多种方法可以检测应用程序二进制文件的位置。有关如何确定程序二进制位置的技巧,请参阅http://autopackage.org/docs/binreloc。