Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Template1.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <math.h>
- #include <iostream>
- #include <Windows.h>
- #include "include\GL\GL.H"
- #include "include\GL\GLU.H"
- #include "include\GL\glut.h"
- #include "Template1.h"
- #define PI 3.14
- using namespace std;
- double rotate_y = 0;
- double rotate_x = -80;
- double zoom = -32;
- double horizontal = 0;
- double vertical = -7;
- void drawSpringPoints(void) {
- double x, y, z;
- double t, u;
- glBegin(GL_POINTS);
- for (t = 0; t < 8 * PI; t += 0.1) {
- for (u = 0; u < 2 * PI; u += 0.1) {
- x = cos(t) * (3 + cos(u));
- y = sin(t) * (3 + cos(u));
- z = 0.6 * t + sin(u);
- glColor3f(1.0f, 0.0f, 0.0f);
- glVertex3d(x, y, z);
- }
- }
- glEnd();
- }
- void setColor(int index) {
- switch (index){
- case 1:
- glColor3f(1.0f, 0.0f, 0.0f);
- break;
- case 2:
- glColor3f(0.0f, 1.0f, 0.0f);
- break;
- case 3:
- glColor3f(0.0f, 0.0f, 1.0f);
- break;
- case 4:
- glColor3f(1.0f, 1.0f, 0.0f);
- break;
- default:
- glColor3f(1.0f, 0.0f, 1.0f);
- }
- }
- void drawSpring(void) {
- double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
- double t, u;
- int color = 0;
- double max_y = 0;
- double max_x = 0;
- double min_y = 10;
- double min_x = 10;
- for (t = 0; t < 8 * PI; t += 0.1) {
- for (u = 0; u < 2 * PI; u += 0.5) {
- x1 = cos(t) * (3 + cos(u));
- y1 = sin(t) * (3 + cos(u));
- z1 = 0.6 * t + sin(u);
- x2 = cos(t + 0.1) * (3 + cos(u));
- y2 = sin(t + 0.1) * (3 + cos(u));
- z2 = 0.6 * (t + 0.1) + sin(u);
- x3 = cos(t) * (3 + cos(u + 0.5));
- y3 = sin(t) * (3 + cos(u + 0.5));
- z3 = 0.6 * t + sin(u + 0.5);
- x4 = cos(t + 0.1) * (3 + cos(u + 0.5));
- y4 = sin(t + 0.1) * (3 + cos(u + 0.5));
- z4 = 0.6 * (t + 0.1) + sin(u + 0.5);
- setColor(color % 4 + 1);
- glBegin(GL_QUADS);
- glVertex3d(x1, y1, z1);
- glVertex3d(x3, y3, z3);
- glVertex3d(x4, y4, z4);
- glVertex3d(x2, y2, z2);
- glEnd();
- color += 1;
- if (abs(x1) > max_x) {
- max_x = x1;
- }
- if (abs(y1) > max_y) {
- max_y = y1;
- }
- if (abs(x1) < min_x) {
- min_x = x1;
- }
- if (abs(y1) < min_y) {
- min_y = y1;
- }
- //cout << "x: " << x1 << " y: " << y1 << " z: " << z1 << endl;
- }
- }
- cout << "max x: " << max_x << " max y: " << max_y << endl;
- cout << "min x: " << min_x << " min y: " << min_y << endl;
- glColor3f(1.0f, 0.0f, 1.0f);
- glBegin(GL_QUADS);
- glVertex3d(x1, y1, z1);
- glVertex3d(x3, y3, z3);
- glVertex3d(x4, y4, z4);
- glVertex3d(x2, y2, z2);
- glEnd();
- }
- void MyDisplay(void) {
- glLoadIdentity();
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glPushMatrix();
- glTranslated(horizontal, vertical, zoom);
- glRotatef(rotate_x, 1.0, 0.0, 0.0);
- glRotatef(rotate_y, 0.0, 1.0, 0.0);
- drawSpring();
- /*
- //back
- glBegin(GL_POLYGON);
- glColor3f(1.0f, 0.0f, 0.0f);
- glVertex3d(1, 1, 1);
- glVertex3d(-1, 1, 1);
- glVertex3d(-1, -1, 1);
- glVertex3d(1, -1, 1);
- glEnd();
- //front
- glBegin(GL_POLYGON);
- glColor3f(0.0f, 1.0f, 0.0f);
- glVertex3d(1, 1, -1);
- glVertex3d(-1, 1, -1);
- glVertex3d(-1, -1, -1);
- glVertex3d(1, -1, -1);
- glEnd();
- //right side
- glBegin(GL_POLYGON);
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3d(1, 1, -1);
- glVertex3d(1, 1, 1);
- glVertex3d(1, -1, 1);
- glVertex3d(1, -1, -1);
- glEnd();
- //left side
- glBegin(GL_POLYGON);
- glColor3f(1.0f, 1.0f, 0.0f);
- glVertex3d(-1, 1, -1);
- glVertex3d(-1, 1, 1);
- glVertex3d(-1, -1, 1);
- glVertex3d(-1, -1, -1);
- glEnd();
- //top
- glBegin(GL_POLYGON);
- glColor3f(1.0f, 0.0f, 1.0f);
- glVertex3d(1, 1, -1);
- glVertex3d(-1, 1, -1);
- glVertex3d(-1, 1, 1);
- glVertex3d(1, 1, 1);
- glEnd();
- //bottom
- glBegin(GL_POLYGON);
- glColor3f(0.0f, 1.0f, 1.0f);
- glVertex3d(1, -1, -1);
- glVertex3d(-1, -1, -1);
- glVertex3d(-1, -1, 1);
- glVertex3d(1, -1, 1);
- glEnd();
- */
- glPopMatrix();
- glFlush();
- //necessary for GLU_DOUBLE displayMode
- //glutSwapBuffers();
- }
- void keyboard(int key, int x, int y) {
- if (key == GLUT_KEY_RIGHT) {
- rotate_y += 5;
- cout << "rotate_y is: " << rotate_y << endl;
- }
- else if (key == GLUT_KEY_LEFT) {
- rotate_y -= 5;
- cout << "rotate_y is: " << rotate_y << endl;
- }
- else if (key == GLUT_KEY_UP) {
- rotate_x -= 5;
- cout << "rotate_x is: " << rotate_x << endl;
- }
- else if (key == GLUT_KEY_DOWN) {
- rotate_x += 5;
- cout << "rotate_x is: " << rotate_x << endl;
- }
- // Request display update
- glutPostRedisplay();
- }
- void MyInit(void) {
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glViewport(0, 500, 500, 500);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(60, 1, 1, 40.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glDrawBuffer(GL_BACK);
- glEnable(GL_DEPTH_TEST);
- }
- void NormalKeyHandler(unsigned char key, int x, int y) {
- if (key == 'z') {
- zoom -= 0.5;
- cout << "zoom is: " << zoom << endl;
- }
- else if (key == 'x') {
- zoom += 0.5;
- cout << "zoom is: " << zoom << endl;
- }
- else if (key == 'a') {
- horizontal -= 1;
- cout << "horizontal is: " << horizontal << endl;
- }
- else if (key == 'd') {
- horizontal += 1;
- cout << "horizontal is: " << horizontal << endl;
- }
- else if (key == 's') {
- vertical -= 1;
- cout << "vertical is: " << vertical << endl;
- }
- else if (key == 'w') {
- vertical += 1;
- cout << "vertical is: " << vertical << endl;
- }
- glutPostRedisplay();
- }
- int main(int argc, char** argv) {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);//single buffer and RGBA
- glutInitWindowSize(500, 500);//initial window size
- glutInitWindowPosition(100, 100);
- glutCreateWindow("Cube");//create widnow, hello title bar
- MyInit();
- glutDisplayFunc(MyDisplay);
- glutSpecialFunc(keyboard);
- glutKeyboardFunc(NormalKeyHandler);
- glutMainLoop();//enter main loop and process events
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement