annotate render.c @ 20:ebc55ce699ec

Rotate the other way around: z, y, x - more useful to us
author Josef "Jeff" Sipek <jeffpc@optonline.net>
date Sat, 03 Dec 2005 00:35:58 -0500
parents 4722afb8751c
children 9a34b00c0659
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
1 // System & parser
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
2 #include <string.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
3 #include <stdlib.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
4 #include <errno.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
5 #define _GNU_SOURCE
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
6 #include <stdio.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
7 #include <sys/types.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
8 #include <sys/stat.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
9 #include <fcntl.h>
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
10 #include <unistd.h>
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
11 #include <time.h>
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
12
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
13 // OpenGL
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
14 #include "GL/glut.h"
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
15
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
16 #define BUF_SIZE 1024
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
17 #define TIMER_PERIOD 10
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
18
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
19 #define PIPE_IN "/tmp/3de.in"
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
20 #define PIPE_OUT "/tmp/3de.out"
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
21
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
22 int infd;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
23 int outfd;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
24 char *buf, *ptr;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
25
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
26 int frames;
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
27 struct timespec start;
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
28
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
29 void display(void);
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
30
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
31 float cam_x;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
32 float cam_y;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
33 float cam_z;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
34 float cam_ax;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
35 float cam_ay;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
36 float cam_az;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
37
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
38 int valid_digit_char(char c)
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
39 {
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
40 if (((c >= '0') && (c <= '9')) || (c == '-') || (c == '+') || (c == '.'))
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
41 return 1;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
42 return 0;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
43 }
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
44
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
45 char* update_ptr(char* buf)
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
46 {
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
47 int i;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
48 int on_num;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
49
6
b06a7e9cda60 cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 5
diff changeset
50 for(i=0, on_num=0; i<6; buf++) {
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
51 if (!valid_digit_char(*buf) && on_num) {
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
52 on_num = 0;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
53 i++;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
54 } else if (valid_digit_char(*buf) && !on_num)
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
55 on_num = 1;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
56 }
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
57
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
58 return buf;
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
59 }
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
60
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
61 void draw_poly(char* buf)
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
62 {
6
b06a7e9cda60 cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 5
diff changeset
63 float c1, c2, c3, f1, f2, f3;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
64
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
65 buf += 5;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
66
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
67 glPushMatrix();
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
68 glRotatef(cam_ax, 1.0, 0.0, 0.0);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
69 glRotatef(cam_ay, 0.0, 1.0, 0.0);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
70 glRotatef(cam_az, 0.0, 0.0, 1.0);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
71 glTranslatef(cam_x, cam_y, cam_z);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
72
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
73 glBegin(GL_POLYGON);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
74 while(1) {
6
b06a7e9cda60 cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 5
diff changeset
75 if (sscanf(buf, "%f %f %f %f %f %f", &c1, &c2, &c3, &f1, &f2, &f3) != 6)
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
76 break;
6
b06a7e9cda60 cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 5
diff changeset
77 glColor3f(c1, c2, c3);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
78 glVertex3f(f1, f2, f3);
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
79 buf = update_ptr(buf);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
80 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
81 glEnd();
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
82
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
83 glPopMatrix();
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
84 }
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
85
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
86 void rot_cam(char* buf)
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
87 {
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
88 float x,y,z;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
89
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
90 buf += 7;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
91
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
92 if (sscanf(buf, "%f %f %f", &x, &y, &z) != 3)
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
93 return;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
94
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
95 cam_ax += x;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
96 cam_ay += y;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
97 cam_az += z;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
98 }
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
99
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
100 void trans_cam(char* buf)
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
101 {
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
102 float x,y,z;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
103
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
104 buf += 9;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
105
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
106 if (sscanf(buf, "%f %f %f", &x, &y, &z) != 3)
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
107 return;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
108
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
109 cam_x += x;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
110 cam_y += y;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
111 cam_z += z;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
112 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
113
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
114 void __key(int c, int x, int y)
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
115 {
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
116 printf("key pressed: %c, mouse at (%d,%d)\n", c, x, y);
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
117
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
118 switch(c) {
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
119 case GLUT_KEY_LEFT+256:
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
120 write(outfd, "left", 4);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
121 break;
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
122 case GLUT_KEY_RIGHT+256:
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
123 write(outfd, "right", 5);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
124 break;
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
125 case GLUT_KEY_UP+256:
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
126 write(outfd, "up", 2);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
127 break;
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
128 case GLUT_KEY_DOWN+256:
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
129 write(outfd, "down", 4);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
130 break;
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
131 case ' ':
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
132 write(outfd, "space", 5);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
133 break;
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
134 default:
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
135 write(outfd, &c, 1);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
136 break;
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
137 }
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
138 write(outfd, "\n", 1);
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
139 }
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
140
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
141 void key(unsigned char c, int x, int y)
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
142 {
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
143 __key((int)c, x, y);
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
144 }
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
145
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
146 void special(int k, int x, int y)
7
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
147 {
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
148 __key(k+256, x, y);
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
149 }
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
150
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
151 void timer(int val)
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
152 {
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
153 glutPostRedisplay();
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
154 glutTimerFunc(TIMER_PERIOD, timer, 0);
7
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
155 }
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
156
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
157 void display(void)
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
158 {
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
159 ssize_t r;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
160
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
161 do {
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
162 if ((ptr) >= (buf + BUF_SIZE))
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
163 break;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
164
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
165 r = read(infd, ptr, 1);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
166
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
167 if ((r == -1) || (r == 0) || (*ptr == '\n')) {
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
168 *ptr = '\0';
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
169 break;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
170 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
171
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
172 ptr += r;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
173 } while(1);
12
43c7ce2fc334 New utility: getline
jsipek@huey.fsl.cs.sunysb.edu
parents: 11
diff changeset
174 #if 0
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
175 if (strlen(buf)) {
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
176 printf("buf = \"%s\"\n", buf);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
177 fflush(stdout);
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
178 }
12
43c7ce2fc334 New utility: getline
jsipek@huey.fsl.cs.sunysb.edu
parents: 11
diff changeset
179 #endif
7
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
180 if (!strncmp(buf, "CLEAR", 5)) {
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
181 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
7
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
182 } else if (!strncmp(buf, "FLUSH", 5)) {
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
183 glFlush();
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
184 glutSwapBuffers();
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
185 } else if (!strncmp(buf, "POLY", 4))
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
186 draw_poly(buf);
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
187 else if (!strncmp(buf, "ROTCAM", 6))
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
188 rot_cam(buf);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
189 else if (!strncmp(buf, "TRANSCAM", 8))
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
190 trans_cam(buf);
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
191 else if (strlen(buf)) {
7
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
192 printf("unknown command\n");
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
193 fflush(stdout);
e681fac7212c Added a timer, some cleanup
jsipek@huey.fsl.cs.sunysb.edu
parents: 6
diff changeset
194 }
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
195
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
196 ptr = buf;
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
197
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
198 frames++;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
199 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
200
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
201 void init()
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
202 {
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
203 /* set clear color to black */
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
204 glClearColor (0.0, 0.0, 0.0, 0.0);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
205
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
206 /* set fill color to white */
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
207 glColor3f(1.0, 1.0, 1.0);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
208
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
209 /* set up standard orthogonal view with clipping */
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
210 /* box as cube of side 2 centered at origin */
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
211 /* This is default view and these statement could be removed */
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
212 glMatrixMode (GL_PROJECTION);
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
213
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
214 //sets up the projection matrix for a perspective transform
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
215 gluPerspective( 90, //view angle
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
216 1.0, //aspect ratio
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
217 0.0, //near clip
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
218 200.0); //far clip
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
219 glMatrixMode(GL_MODELVIEW);
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
220
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
221 /*glLoadIdentity ();
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
222 glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);*/
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
223
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
224 cam_x = 0.0;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
225 cam_y = 0.0;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
226 cam_z = 0.0;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
227 cam_ax = 0.0;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
228 cam_ay = 0.0;
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
229 cam_az = 0.0;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
230 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
231
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
232 #define die() __die(__FILE__, __LINE__);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
233
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
234 void __die(char* f, int l)
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
235 {
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
236 fprintf(stderr, "Error encountered in %s:%d: %s (%d)\n", f, l, strerror(errno), errno);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
237 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
238
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
239 void goodbye()
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
240 {
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
241 struct timespec end;
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
242 double delta;
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
243
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
244 clock_gettime(CLOCK_REALTIME, &end);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
245
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
246 delta = ((double) end.tv_sec + 1000000000.0/(double)end.tv_nsec)
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
247 - ((double) start.tv_sec + 1000000000.0/(double)start.tv_nsec);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
248
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
249 printf("Displayed %d frames in %.4lf seconds = %.4lf fps\n", frames, delta, frames/delta);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
250
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
251 close(infd);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
252 close(outfd);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
253 }
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
254
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
255 int main(int argc, char** argv)
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
256 {
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
257 frames = 0;
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
258
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
259 unlink(PIPE_IN);
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
260 unlink(PIPE_OUT);
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
261
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
262 if ((buf = (char*) malloc(sizeof(char)*BUF_SIZE)) == NULL)
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
263 die();
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
264 ptr = buf;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
265
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
266 if (mkfifo(PIPE_IN, 0777) == -1)
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
267 die();
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
268
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
269 if (mkfifo(PIPE_OUT, 0777) == -1)
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
270 die();
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
271
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
272 if ((infd = open(PIPE_IN, O_RDWR | O_NONBLOCK | O_NDELAY)) == -1)
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
273 die();
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
274
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
275 if ((outfd = open(PIPE_OUT, O_RDWR | O_NONBLOCK | O_NDELAY)) == -1)
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
276 die();
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
277
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
278 atexit(goodbye);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
279
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
280 glutInit(&argc,argv);
19
4722afb8751c Added rotation and translation
Josef "Jeff" Sipek <jeffpc@optonline.net>
parents: 12
diff changeset
281 glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
282 glutInitWindowSize(800,800);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
283 glutInitWindowPosition(0,0);
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
284 glutCreateWindow("3D Engine");
9
d325e84a13dd some cleanups/performance improvements
jsipek@huey.fsl.cs.sunysb.edu
parents: 8
diff changeset
285 glEnable(GL_DEPTH_TEST);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
286 glutDisplayFunc(display);
1
88acf3d645e3 Draws a triangle from sample.scn!
jsipek@huey.fsl.cs.sunysb.edu
parents: 0
diff changeset
287 glutKeyboardFunc(key);
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
288 glutSpecialFunc(special);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
289 init();
8
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
290
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
291 clock_gettime(CLOCK_REALTIME, &start);
640a1d1a730d Timer/FPS counter
jsipek@huey.fsl.cs.sunysb.edu
parents: 7
diff changeset
292
11
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
293 //glutIdleFunc(idle);
55b7e6aba0ef Fixed key scan code bug
jsipek@huey.fsl.cs.sunysb.edu
parents: 9
diff changeset
294 glutTimerFunc(TIMER_PERIOD, timer, 0);
0
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
295 glutMainLoop();
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
296
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
297
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
298 return 0;
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
299 }
443290507ab9 some minimal code
jsipek@huey.fsl.cs.sunysb.edu
parents:
diff changeset
300