Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <Windows.h>
- #include "include\GL\GL.H"
- #include "include\GL\GLU.H"
- #include "include\GL\glut.h"
- #include <cmath>
- // position of first triangle for all of colors
- float blueT[3][2] = { {0.0,0.0}, {50.0,0.0}, {0.0, 50.0} };
- float greenT[3][2] = { {50.0,0.0}, {100.0,0.0}, {50.0, -50.0} };
- float orangeT[3][2] = { {50.0,0.0}, {100.0,0.0}, {50.0, 50.0} };
- float pinkT[3][2] = { {100.0,0.0}, {150.0,0.0}, {100.0, 50.0} };
- float yellowT[3][2] = { {50.0,50.0}, {50.0,100.0}, {100.0, 50.0} };
- float redT[3][2] = { {100.0,0.0}, {150.0,0.0}, {100.0, -50.0} };
- int i = 0;
- GLfloat angleX = 0.0;
- float shiftX = 0;
- float shiftY = 0;
- float shift = 1;
- void setColor(int color) {
- switch (color)
- {
- case 1:
- glColor4f(0.0f, 0.0f, 1.0f, 1.0f); //blue
- break;
- case 2:
- glColor4f(1.0f, 0.0f, 0.0f, 1.0f); //red
- break;
- case 3:
- glColor4f(0.0f, 1.0f, 0.0f, 1.0f); //green
- break;
- case 4:
- glColor4f(1.0f, 1.0f, 0.0f, 1.0f); //yellow
- break;
- case 5:
- glColor4f(1.0f, 0.0f, 1.0f, 1.0f); //pink
- break;
- case 6:
- glColor4f(1.0f, 0.65f, 0.0f, 1.0f); //orange
- break;
- }
- }
- void timer(int value) {
- angleX -= shift;
- if (angleX < -360) {
- angleX = 0;
- shiftX = 0;
- shiftY = 0;
- }
- if (angleX >= -180) {
- shiftX += shift;
- shiftY += shift;
- }
- else{
- shiftX -= shift;
- shiftY -= shift;
- }
- glutPostRedisplay();
- glutTimerFunc(20, timer, 0);
- }
- float getParameterA(float triangle[3][2]) {
- GLfloat centerX = (triangle[0][0] + triangle[1][0] + triangle[2][0]) / 3;
- GLfloat centerY = (triangle[0][1] + triangle[1][1] + triangle[2][1]) / 3;
- float a = centerY / centerX;
- return a;
- }
- void drawTriangle(float xy[3][2], int color) {
- glBegin(GL_TRIANGLES);
- setColor(color);
- glVertex2f(xy[0][0], xy[0][1]);
- glVertex2f(xy[1][0], xy[1][1]);
- glVertex2f(xy[2][0], xy[2][1]);
- glEnd();
- }
- // obrot wokol wlasnego srodka ciezkosci trojkata
- void rotateTriangle(float angle, float x, float y, float triangle[3][2]) {
- GLfloat avgX = (triangle[0][0] + triangle[1][0] + triangle[2][0]) / 3;
- GLfloat avgY = (triangle[0][1] + triangle[1][1] + triangle[2][1]) / 3;
- glTranslatef(avgX, avgY, 0);
- glTranslatef(x, y, 0);
- glRotatef(angle, 0, 0, 1);
- glTranslatef(-avgX, -avgY, 0);
- }
- void drawMultipleTriangles(float angleCircle, float angleTriangle, float x, float y, float triangle[3][2], int color) {
- glPushMatrix();
- i = 0;
- glRotatef(angleCircle, 0, 0, 1);
- while(i <= 360) {
- i += 90;
- glPushMatrix();
- glRotatef(i, 0, 0, 1);
- glPushMatrix();
- rotateTriangle(angleTriangle, x, y, triangle);
- drawTriangle(triangle, color);
- glPopMatrix();
- glPopMatrix();
- }
- glPopMatrix();
- }
- void showTrangles() {
- drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(blueT) * shiftX, blueT, 1);
- drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(redT) * shiftX, redT, 2);
- drawMultipleTriangles(-0, 0 * 2, shiftX, getParameterA(greenT) * shiftX, greenT, 3);
- drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(yellowT) * shiftX, yellowT, 4);
- drawMultipleTriangles(0, -0 * 2, shiftX, getParameterA(pinkT) * shiftX, pinkT, 5);
- drawMultipleTriangles(-0, 0 * 2, shiftX, getParameterA(orangeT) * shiftX, orangeT, 6);
- }
- void MyDisplay(void) {
- // The new scene
- glLoadIdentity();
- glClear(GL_COLOR_BUFFER_BIT);
- showTrangles();
- glFlush();//start processing buffered OpenGL routines
- }
- void MyInit(void) {
- glClearColor(0.0, 0.0, 0.0, 0.0);//select clearing (background) color
- /* initialize viewing values */
- glViewport(0, 0, 800, 800);//window origin and size
- glMatrixMode(GL_PROJECTION);//
- glLoadIdentity();//=1
- gluOrtho2D(-400, 400, -400, 400);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();//=1
- }
- int main(int argc, char** argv) {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//single buffer and RGBA
- glutInitWindowSize(800, 800);//initial window size
- glutInitWindowPosition(100, 100);
- glutCreateWindow("My window");//create widnow, hello title bar
- MyInit();
- glutDisplayFunc(MyDisplay);//
- glutTimerFunc(0, timer, 0);
- glutMainLoop();//enter main loop and process events
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement