OpenGL

profilewindmill
HW.cpp

/////////////////////////////////// // square.cpp // // OpenGL program to draw a square. // // Sumanta Guha. /////////////////////////////////// #include <GL/freeglut.h> #include <cmath> #define PI 3.14 void drawDisc(float R, float X, float Y, float Z) { static int N = 100; // #vertices. float t = 0.0; glBegin(GL_LINE_LOOP); for (int i = 0; i <= N; ++i) { glVertex3f(X + R * cos(t), Y + R * sin(t), Z); t += 2 * PI / N; } glEnd(); } void drawDiamond() { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex3f(50, 26, 0); glVertex3f(56, 20, 0); glVertex3f(50, 14, 0); glVertex3f(44, 20, 0); glEnd(); } void drawCoss() { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex3f(73, 51, 0); glVertex3f(85, 51, 0); glVertex3f(85, 49, 0); glVertex3f(73, 49, 0); glEnd(); glBegin(GL_POLYGON); glVertex3f(78, 56, 0); glVertex3f(80, 56, 0); glVertex3f(80, 44, 0); glVertex3f(78, 44, 0); glEnd(); } void drawTriangle() { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex3f(50, 86, 0); glVertex3f(56, 74, 0); glVertex3f(44, 74, 0); glEnd(); } void drawArrow() { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex3f(50, 68, 0); glVertex3f(44, 63, 0); glVertex3f(56, 63, 0); glEnd(); glBegin(GL_POLYGON); glVertex3f(46, 63, 0); glVertex3f(54, 63, 0); glVertex3f(54, 32, 0); glVertex3f(46, 32, 0); glEnd(); } void drawPiont(float R, float X, float Y, float Z) { static int N = 200; // #vertices. float t = 0.0; glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_TRIANGLE_FAN); glVertex3f(X, Y, 0); //center point for (int i = 0; i < N + 1; i++) { glVertex3f(X + R * cos(t), Y + R * sin(t), 0.0); t += 2 * PI / N; } glEnd(); } void drawStar() { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_POLYGON); glVertex3f(15, 51, 0); glVertex3f(27, 51, 0); glVertex3f(21, 46, 0); glEnd(); glBegin(GL_POLYGON); glVertex3f(21, 56, 0); glVertex3f(21, 46, 0); glVertex3f(17, 44, 0); glEnd(); glBegin(GL_POLYGON); glVertex3f(21, 56, 0); glVertex3f(21, 46, 0); glVertex3f(25, 44, 0); glEnd(); } // Drawing routine. void drawScene(void) { glClear(GL_COLOR_BUFFER_BIT); //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glEnable(GL_DEPTH_TEST); glColor3ub(190, 190, 190); for (float i = 0; i < 400; i++) { float n = i * 0.01; drawDisc(42.0-n, 50.0, 50.0, 0.0); i += i * 0.01; } glColor3ub(225, 225, 0); drawDiamond(); glColor3ub(255, 0, 0); drawCoss(); glColor3ub(65, 105, 225); drawTriangle(); glColor3ub(205, 104, 57); drawArrow(); glColor3f(0, 0, 0); drawPiont(1, 50.0, 50.0, 0.0); glColor3ub(50, 205, 50); drawStar(); //glDisable(GL_DEPTH_TEST); glFlush(); } // Initialization routine. void setup(void) { glClearColor(1.0, 1.0, 1.0, 0.0); } // OpenGL window reshape routine. void resize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 100.0, 0.0, 100.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // Keyboard input processing routine. void keyInput(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } // g++ -framework OpenGL -lGLUT -lGLEW -I /opt/X11/include -L /opt/X11/lib -w -o out squareEx.cpp int main(int argc, char** argv) { glutInit(&argc, argv); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); //glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("square.cpp"); glutDisplayFunc(drawScene); glutReshapeFunc(resize); glutKeyboardFunc(keyInput); setup(); glutMainLoop(); }