(2)绘制一个由上述顶点所描绘的三角形,实现该三角形进行下列的几何变化:首先使三角形沿着其中心的x轴,y轴方向缩小50%;然后沿着初始中心旋转90度;最后沿着y轴平移100个单位。
代码为:
#include<GL/glut.h>
#include<stdlib.h>
voidinit(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glShadeModel(GL_FLAT);
}
voiddraw_triangle(void)
{
glBegin(GL_TRIANGLES);
glVertex2f(50.0,25.0);
glVertex2f(150.0,25.0);
glVertex2f(100.0,100.0);
glEnd();
}
voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glLoadIdentity();
glColor3f(0.0,0.0,1.0);
draw_triangle();
glEnable(GL_LINE_STIPPLE);
glLineStipple(1,0xF00F);
glLoadIdentity();
glTranslatef(100.0,62.5,0.0);
glTranslatef(0.0,100.0,0.0);
glRotatef(90.0,0.0,0.0,1.0);
glScalef(0.5,0.5,1.0);
glTranslatef(-100.0,-62.5,0.0);//三角形中心移到坐标原点
glColor3f(1.0,0.0,0.0);
draw_triangle();
glDisable(GL_LINE_STIPPLE);
glFlush();
}
voidreshape(intw,inth)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
//glViewport(w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
gluOrtho2D(-200.0,400.0,-200.0*(GLfloat)h/(GLfloat)w,
200.0*(GLfloat)h/(GLfloat)w);//决定显示世界窗口中的那一部分内容,使用世界左边表示(左,右,下,上)
else
gluOrtho2D(-200.0*(GLfloat)w/(GLfloat)h,
400.0*(GLfloat)w/(GLfloat)h,-200.0,200.0);
glMatrixMode(GL_MODELVIEW);
}
intmain(intargc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600,600);//创建一个长宽分别为600、600的窗口,
glutInitWindowPosition(100,100);//窗口的左上角位于屏幕坐标(100,100)处。
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return0;
}
运行结果为: