OpenGL中顯示背景貼圖

轉載請聲明出處:http://blog.csdn.net/xiaoge132/article/details/51448326

demo下載

導言:

通常在OpenGL裏面繪製的都是默認的黑色背景,對於有些時候,太過於單調了,現在我們可以對它加上背景,實現一個不錯的圖形.

在網上看到人家要實現星空圖,找到一張星空圖片貼在背景上面.

看一下效果圖




原理:

看一下下面的這張圖:


這是OpenGL裏面攝像機的原理圖,我們要繪製的物體在離攝像機近的地方,那個離攝像機遠的矩形,就是要繪製背景的地方.


先定義個導入圖片的函數

LoadTexture(const char * filename, int width, int height)
{

	GLuint texture;
	unsigned char * data;
	FILE * file;

	//讀文件
	file = fopen(filename, "rb");
	if (file == NULL) return 0;

	data = (unsigned char *)malloc(width * height * 3);
	fread(data, width * height * 3, 1, file);
	fclose(file);

	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);
	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);

	//生成紋理
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
	free(data); //釋放紋理
	return texture; 
	
}

在後面我們就可以調用這個函數來實現紋理的導入了.


接着再定義個設置背景的函數

Background()
{

	glBindTexture(GL_TEXTURE_2D, texture);

	glBegin(GL_QUADS);
	glTexCoord2d(0.0, 0.0); glVertex2d(-1.0, -1.0);
	glTexCoord2d(1.0, 0.0); glVertex2d(+1.0, -1.0);
	glTexCoord2d(1.0, 1.0); glVertex2d(+1.0, +1.0);
	glTexCoord2d(0.0, 1.0); glVertex2d(-1.0, +1.0);
	glEnd();
        return ;
}

最後在繪製函數裏面調用並調整大小,就可以得到我們想要的背景了.

	glDisable(GL_DEPTH_TEST);
	glLoadIdentity();

	
	//導入紋理
	texture = LoadTexture("C:\\Users\\Administrator\\Desktop\\zuixin\\zuixin\\UI\\xiaoge.bmp", 640, 640); 
	
	glEnable(GL_TEXTURE_2D);

	glPushMatrix();
		glScalef(100, 70, 1);
		glTranslatef(0, 0, -150);
		Background();					//背景方塊
	glPopMatrix();

俗話說的好,不給源碼的博客不是好博客

demo下載



發佈了57 篇原創文章 · 獲贊 86 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章