OpenGL入門示例8——圖形平移、旋轉、縮放

#include<GL/glut.h>
#include <windows.h>

static GLfloat spin=0.0;				//旋轉量
static GLfloat move=0.0;				//平移量
static GLfloat size=1.0;				//縮放量

void init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);		//指定清除顏色(黑色),即背景顏色
	glShadeModel(GL_FLAT);
}

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);		//清除所有的像素
	glPushMatrix();
	glTranslatef(move,0,0);				//移動,參數含義(x軸位移,y軸位移,z軸位移)
	glRotatef(spin,0,0,1);				//旋轉,參數含義(旋轉量,x軸,y軸,z軸)
	glScalef(size,size,1);				//縮放,參數含義(x軸倍數,y軸倍數,z軸倍數)
	glColor3f(0.0,1.0,0.0);				//繪製顏色RGB
	glRectf(-25.0,-25.0,25.0,25.0);		//繪製矩形
	glPopMatrix();
	glutSwapBuffers();
}

void reshape(int w,int h)
{
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
}

void spinAndSizeDisplay()
{
	spin>360?spin-=360:spin+=2;
	size>2?size-=2:size+=0.003;
	glutPostRedisplay();				//標記當前窗口需要重繪,否則不會旋轉
	Sleep(10);
}

void moveDisplay()
{
	move=move>20?move-=20:move+=1;
	glutPostRedisplay();				//標記當前窗口需要重繪,否則不會旋轉
	Sleep(10);
}

int main(int argc,char* argv[])
{
	glutInit(&argc,argv);							//初始化GLUT並處理命令行參數
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);		//指定模式:雙緩存;RGB模式
	glutInitWindowSize(250,250);					//指定窗口大小(像素)
	glutInitWindowPosition(300,200);				//指定窗口左上角在屏幕上的位置
	glutCreateWindow(argv[0]);						//使用OpenGL場景創建一個窗口,參數爲窗口名稱
	init();											//調用初始化函數
	glutDisplayFunc(display);						//顯示
	glutReshapeFunc(reshape);						//重繪
	glutIdleFunc(spinAndSizeDisplay);				//旋轉&縮放
	//glutIdleFunc(moveDisplay);						//移動(與上邊函數只能有一個有效)
	glutMainLoop();									//進入主循環並處理事件,此時創建的所有窗口都會顯示出來,被渲染到這些窗口中的內容也將顯示出來,程序開始處理事件,註冊的顯示回調函數被觸發
	return 0;										//ANSI C要求函數main()返回一個int值
}


效果圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章