rev |
line source |
nuclear@0
|
1 #include <assert.h>
|
nuclear@0
|
2 #include "opengl.h"
|
nuclear@0
|
3 #include "app.h"
|
nuclear@2
|
4 #include "user.h"
|
nuclear@2
|
5
|
nuclear@2
|
6 static void draw_grid(int num, float sep);
|
nuclear@2
|
7
|
nuclear@2
|
8 static User user;
|
nuclear@2
|
9 static float eye_level = 1.6;
|
nuclear@0
|
10
|
nuclear@0
|
11 bool app_init()
|
nuclear@0
|
12 {
|
nuclear@0
|
13 if(!init_opengl()) {
|
nuclear@0
|
14 return false;
|
nuclear@0
|
15 }
|
nuclear@0
|
16 return true;
|
nuclear@0
|
17 }
|
nuclear@0
|
18
|
nuclear@0
|
19 void app_shutdown()
|
nuclear@0
|
20 {
|
nuclear@0
|
21 }
|
nuclear@0
|
22
|
nuclear@0
|
23 void app_display()
|
nuclear@0
|
24 {
|
nuclear@0
|
25 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
nuclear@0
|
26
|
nuclear@2
|
27 glMatrixMode(GL_MODELVIEW);
|
nuclear@2
|
28 glLoadIdentity();
|
nuclear@2
|
29
|
nuclear@2
|
30 Matrix4x4 viewmat;
|
nuclear@2
|
31 user.posrot.calc_inv_matrix(&viewmat);
|
nuclear@2
|
32 glLoadTransposeMatrixf(viewmat.m[0]);
|
nuclear@2
|
33 glTranslatef(0, -eye_level, 0);
|
nuclear@2
|
34
|
nuclear@2
|
35 draw_grid(20, 1.0);
|
nuclear@0
|
36
|
nuclear@0
|
37 swap_buffers();
|
nuclear@0
|
38 assert(glGetError() == GL_NO_ERROR);
|
nuclear@0
|
39 }
|
nuclear@0
|
40
|
nuclear@0
|
41 void app_reshape(int x, int y)
|
nuclear@0
|
42 {
|
nuclear@0
|
43 glViewport(0, 0, x, y);
|
nuclear@0
|
44
|
nuclear@0
|
45 glMatrixMode(GL_PROJECTION);
|
nuclear@0
|
46 glLoadIdentity();
|
nuclear@0
|
47 gluPerspective(50.0, (float)x / (float)y, 0.5, 500.0);
|
nuclear@0
|
48 }
|
nuclear@0
|
49
|
nuclear@0
|
50 void app_keyboard(int key, bool pressed, int x, int y)
|
nuclear@0
|
51 {
|
nuclear@0
|
52 if(pressed) {
|
nuclear@0
|
53 switch(key) {
|
nuclear@0
|
54 case 27:
|
nuclear@0
|
55 quit();
|
nuclear@0
|
56 }
|
nuclear@0
|
57 }
|
nuclear@0
|
58 }
|
nuclear@0
|
59
|
nuclear@0
|
60 void app_mouse_button(int bn, bool pressed, int x, int y)
|
nuclear@0
|
61 {
|
nuclear@0
|
62 }
|
nuclear@0
|
63
|
nuclear@0
|
64 void app_mouse_motion(int x, int y)
|
nuclear@0
|
65 {
|
nuclear@0
|
66 }
|
nuclear@2
|
67
|
nuclear@2
|
68 void app_sball_motion(float x, float y, float z)
|
nuclear@2
|
69 {
|
nuclear@2
|
70 }
|
nuclear@2
|
71
|
nuclear@2
|
72 void app_sball_rotate(float x, float y, float z)
|
nuclear@2
|
73 {
|
nuclear@2
|
74 }
|
nuclear@2
|
75
|
nuclear@2
|
76 void app_sball_button(int bn, bool pressed)
|
nuclear@2
|
77 {
|
nuclear@2
|
78 }
|
nuclear@2
|
79
|
nuclear@2
|
80 static void draw_grid(int num, float sep)
|
nuclear@2
|
81 {
|
nuclear@2
|
82 int hnum = num / 2;
|
nuclear@2
|
83 float max_dist = hnum * sep;
|
nuclear@2
|
84
|
nuclear@2
|
85 glBegin(GL_LINES);
|
nuclear@2
|
86 glVertex3f(0, 0, -max_dist);
|
nuclear@2
|
87 glVertex3f(0, 0, max_dist);
|
nuclear@2
|
88 glVertex3f(-max_dist, 0, 0);
|
nuclear@2
|
89 glVertex3f(max_dist, 0, 0);
|
nuclear@2
|
90
|
nuclear@2
|
91 for(int i=1; i<hnum; i++) {
|
nuclear@2
|
92 float x = i * sep;
|
nuclear@2
|
93
|
nuclear@2
|
94 glVertex3f(-x, 0, -max_dist);
|
nuclear@2
|
95 glVertex3f(-x, 0, max_dist);
|
nuclear@2
|
96 glVertex3f(x, 0, -max_dist);
|
nuclear@2
|
97 glVertex3f(x, 0, max_dist);
|
nuclear@2
|
98 glVertex3f(-max_dist, 0, -x);
|
nuclear@2
|
99 glVertex3f(max_dist, 0, -x);
|
nuclear@2
|
100 glVertex3f(-max_dist, 0, x);
|
nuclear@2
|
101 glVertex3f(max_dist, 0, x);
|
nuclear@2
|
102 }
|
nuclear@2
|
103 glEnd();
|
nuclear@2
|
104 }
|