1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <gl/glut.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
   
#define PI 3.1415926  
float   x, y, z;
float   radius;
float   theta;
float   phi; 
 
GLfloat vertices[][3] = { 
    { -1.0, -1.0,  1.0 },   // 0  
    { -1.0,  1.0,  1.0 },   // 1 
    {  1.0,  1.0,  1.0 },   // 2 
    {  1.0, -1.0,  1.0 },   // 3 
    { -1.0, -1.0, -1.0 },   // 4 
    { -1.0,  1.0, -1.0 },   // 5 
    {  1.0,  1.0, -1.0 },   // 6 
    {  1.0, -1.0, -1.0 }};  // 7 
      
GLfloat colors[][3] = { 
    { 1.0, 0.0, 0.0 },      // red 
    { 1.0, 1.0, 0.0 },      // yellow 
    { 0.0, 1.0, 0.0 },      // green 
    { 0.0, 0.0, 1.0 },      // blue 
    { 1.0, 1.0, 1.0 },      // white 
    { 1.0, 0.0, 1.0 }};     // magenta 
      
void polygon(int a, int b, int c, int d)  
    glColor3fv(colors[a]);       
    glBegin(GL_POLYGON); 
        glVertex3fv(vertices[a]); 
        glVertex3fv(vertices[b]); 
        glVertex3fv(vertices[c]); 
        glVertex3fv(vertices[d]); 
    glEnd(); 
      
// 6개의 면을 만든다. 
void createCube(void)  
    polygon(0, 3, 2, 1);    // front 
    polygon(2, 3, 7, 6);    // right 
    polygon(3, 0, 4, 7);    // bottom 
    polygon(4, 5, 6, 7);    // back 
    polygon(1, 2, 6, 5);    // top 
    polygon(5, 4, 0, 1);    // right 
      
void init (void
    glClearColor (0.0, 0.0, 0.0, 0.0) ;     
    glColor3f(1.0, 1.0, 0.0); 
    glEnable(GL_DEPTH_TEST);    // 깊이 활성화 
      
void reshape (int w, int h) 
    glViewport(0, 0, w, h); 
    glMatrixMode (GL_PROJECTION);   
    glLoadIdentity(); 
    //glOrtho (-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);
    gluPerspective(60.0, 1.0, 1.0, 100.0);  // 멀고 가까움을 표현.
     
    radius = 10.0;
    theta = 10.0;  
    phi = -10.0;
      
void display (void
    x = radius * cos(phi) * cos(theta); 
    y = radius * cos(phi) * sin(theta); 
    z = radius * sin(phi);  
     
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode (GL_MODELVIEW);     
    glLoadIdentity(); 
    gluLookAt(x, y, z, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); 
    // (앞의 세 인자는 카메라의 위치, 중간의 세 인자는 카메라의 초점, 
    //  뒤의 세 인자는 법선벡터 방향 (0, 1, 0))으로 해줘야 세워져 보인다. 
     
    glBegin(GL_LINES);  // X, Y, Z 선 표시 
        glColor3f(1.0, 0.0, 0.0); // X축  
        glVertex3f(0.0, 0.0, 0.0); 
        glVertex3f(10.0, 0.0, 0.0); 
      
        glColor3f(0.0, 1.0, 0.0); // Y축  
        glVertex3f(0.0, 0.0, 0.0); 
        glVertex3f(0.0, 10.0, 0.0); 
      
        glColor3f(0.0, 0.0, 1.0); // Z축  
        glVertex3f(0.0, 0.0, 0.0); 
        glVertex3f(0.0, 0.0, 10.0); 
    glEnd(); 
     
    createCube();   // 큐브 생성 
      
    glFlush ();  
    glutSwapBuffers(); 
 
void specialKey(int key, int x, int y)
{     
    switch(key)    
    {    
    case GLUT_KEY_LEFT:
        theta -= 0.1;        
    break;    
    case GLUT_KEY_RIGHT:        
        theta += 0.1;        
        break;    
    case GLUT_KEY_UP:        
        phi += 0.1;        
        break;    
    case GLUT_KEY_DOWN:        
        phi -= 0.1;        
        break;    
    }    
     
    glutPostRedisplay();      
    if ( theta > 2.0 * PI )      // 360도 넘어가면        
        theta -= (2.0 * PI);    
    else if ( theta < 0.0 )        
        theta += (2.0 * PI);
}
      
void main (int argc, char** argv) 
    glutInit (&argc, argv);     
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );   
    glutInitWindowPosition (100, 100);     
    glutInitWindowSize (500, 500);    
    glutCreateWindow ("Cube");   
    init();  
    glutDisplayFunc (display);    
    glutReshapeFunc (reshape); 
    glutSpecialFunc(specialKey);
    glutIdleFunc(display); 
    glutMainLoop();     
}
;
Posted by 코딩하는 야구쟁이
,