الأحد، 13 ديسمبر 2015

Transformation -- Rotate



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

}

ليست هناك تعليقات:

إرسال تعليق