#include <glut.h>
#include <math.h>
float midX = 0.5;
float midY = sqrt(3.0)/2.0;
float PI=3.1415;
//-------------------------------------------------------------------
void drawTriangle(void)
{
glBegin(GL_POLYGON);
glColor3f ( 1.0, 0.0, 0.0);
glVertex2f( 0.0, 0.0);
glColor3f ( 0.0, 1.0, 0.0);
glVertex2f( midX, midY);
glColor3f ( 0.0, 0.0, 1.0);
glVertex2f( 1.0, 0.0);
glEnd();
}
//-------------------------------------------------------------------
void Transform(GLfloat tx, GLfloat ty)
{
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(tx, ty, 0.0);
drawTriangle();
glFlush();
glutSwapBuffers();
}
void R(GLfloat tx, GLfloat ty , GLfloat theta )
{
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(tx, ty, 0.0);
glRotatef(theta, 1, 0 ,2);
glTranslatef(-tx, -ty, 0.0);
drawTriangle();
glFlush();
glutSwapBuffers();
}
//-------------------------------------------------------------------
void myDisplay(void)
{
glClear( GL_COLOR_BUFFER_BIT );
drawTriangle();
glFlush();
glutSwapBuffers();
}
//-------------------------------------------------------------------
void mySpecialKey(int key, int x, int y)
{
GLfloat tx = 0.0, ty = 0.0;
switch(key)
{
case GLUT_KEY_UP : ty += 0.05; break;
case GLUT_KEY_DOWN : ty -= 0.05; break;
case GLUT_KEY_RIGHT : tx += 0.05; break;
case GLUT_KEY_LEFT : tx -= 0.05; break;
case GLUT_KEY_F1 : R( tx,ty , 30 ); break;
case GLUT_KEY_F2 : R( tx,ty , -90 ); break;
case GLUT_KEY_HOME : glLoadIdentity();
drawTriangle();
break;
}
Transform(tx, ty);
glutPostRedisplay();
}
//-------------------------------------------------------------------
void myInit(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0); // set the background to black
glColor3f(1.0f, 1.0f, 1.0f); // set the drawing color to white
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 3.0, 0.0, 3.0);
}
//-------------------------------------------------------------------
void main( int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB );
glutInitWindowSize(450,450);
glutInitWindowPosition(0,0);
glutCreateWindow("One Triangle");
glutDisplayFunc(myDisplay);
glutSpecialFunc(mySpecialKey);
myInit();
glutMainLoop();
}
ليست هناك تعليقات:
إرسال تعليق