现在的位置: 首页 > 综合 > 正文

opengl 使用soil读入bmp图像作为纹理

2013年10月13日 ⁄ 综合 ⁄ 共 1382字 ⁄ 字号 评论关闭

注意代码中要添加依赖库!!。soil还是非常好用的,下载地址网上有,注意版本,在不同的文件中有对应的vs的版本

// TextureTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <GL/SOIL.h>

static GLuint texture;    

//装载一个bmp图像使之成为纹理,其中貌似包含了 glTexImage2D这个函数的功能
int LoadGLTextures(char *textureFilePath)
{
	    texture = SOIL_load_OGL_texture(
		textureFilePath,
		SOIL_LOAD_AUTO,
		SOIL_CREATE_NEW_ID,
		SOIL_FLAG_INVERT_Y
		);
	
	if(texture == 0)
		return -1;

	glBindTexture(GL_TEXTURE_2D,texture);
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

	return 0;
}

void init()
{
	if ( !LoadGLTextures("texture2.bmp"))
		return;
	//glEnable( Gl_TEXTURE_2D);
	glShadeModel( GL_FLAT );
	glClearColor( 0.0f, 0.0f, 0.0f, 0.5f );
	glEnable ( GL_DEPTH_TEST );
}

void display( void )
{
	glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glEnable( GL_TEXTURE_2D);				//激活纹理

	glBindTexture(GL_TEXTURE_2D,texture);
	glBegin( GL_QUADS );     
	glTexCoord2f( 0.0, 0.0);  glVertex2f( -1.0, -1.0);   //纹理坐标的设置
	glTexCoord2f( 0.0, 1.0 );  glVertex2f( -1.0, 1.0 );
	glTexCoord2f( 1.0, 1.0 );  glVertex2f( 1.0, 1.0 );
	glTexCoord2f( 1.0, 0.0 ); glVertex2f ( 1.0, -1.0 );
	glEnd( );
	glFlush();

	glDisable( GL_TEXTURE_2D );				//终止纹理
}

	


int _tmain(int argc, char* argv[])
{
	glutInit( &argc, argv );
	glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
	glutInitWindowSize ( 400, 400 );
	glutInitWindowPosition( 100, 100 );
	glutCreateWindow(" 简单纹理贴图实验  ");
	init();
	glutDisplayFunc ( display );
	glutMainLoop();
	return 0;
}

抱歉!评论已关闭.