annotate old/simple_render/sys.cpp @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_render/sys.cpp@3f68b2ef4fb0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
1 #include <iostream>
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
2 #include <math.h>
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
3 #include "sys.h"
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
4 using namespace std;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
5
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
6 void noMoreMemory()
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
7 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
8 cout << "can't allocate memory\n";
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
9 exit(1);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
10 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
11
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
12 void matrix4x4(float *xyz, float *xyz1, float *xyz2) //xyz[16]
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
13 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
14 for(int t=0; t<16; t+=4)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
15 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
16 for(int i=0; i<4; i++)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
17 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
18 xyz[t+i] = xyz1[t]*xyz2[i] + xyz1[t+1]*xyz2[4+i] + xyz1[t+2]*xyz2[8+i] + xyz1[t+3]*xyz2[12+i];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
19 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
20 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
21 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
22
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
23 void get_matrix( float *matrix, float *rxyz, float *txyz, float *stack)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
24 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
25 float radx,rady,radz;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
26 radx = rxyz[0]*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
27 rady = rxyz[1]*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
28 radz = rxyz[2]*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
29
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
30 float sinx = sin(radx);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
31 float cosx = cos(radx);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
32 float siny = sin(rady);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
33 float cosy = cos(rady);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
34 float sinz = sin(radz);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
35 float cosz = cos(radz);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
36
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
37 matrix[0] = cosz*cosy+sinz*sinx*siny;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
38 matrix[1] =sinz*cosx;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
39 matrix[2] = -cosz*siny+sinz*sinx*cosy;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
40 matrix[3] = 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
41 matrix[4] = -sinz*cosy+cosz*sinx*siny;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
42 matrix[5] = cosz*cosx;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
43 matrix[6] = sinz*siny+cosz*sinx*cosy;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
44 matrix[7] = 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
45 matrix[8] = cosx*siny;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
46 matrix[9] = -sinx;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
47 matrix[10] = cosx*cosy;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
48 matrix[11] = 0;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
49 matrix[12] = txyz[0];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
50 matrix[13] = txyz[1];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
51 matrix[14] = txyz[2];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
52 matrix[15] = 1;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
53
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
54 float m[16];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
55
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
56 for(int i=0; i<16; i++)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
57 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
58 m[i] = matrix[i];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
59 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
60
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
61 if(stack)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
62 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
63 matrix4x4(matrix, m, stack);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
64 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
65
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
66 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
67
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
68 void rotate_x(float *xyz, float r)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
69 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
70 float rad = r*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
71
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
72 xyz[0] = xyz[0];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
73 xyz[1] = xyz[1]*cos(rad) - xyz[2]*sin(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
74 xyz[2] = xyz[1]*sin(rad) + xyz[2]*cos(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
75 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
76
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
77 void rotate_y(float *xyz, float r)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
78 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
79 float rad = r*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
80
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
81 xyz[0] = xyz[0]*cos(rad) + xyz[2]*sin(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
82 xyz[1] = xyz[1];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
83 xyz[2] = -xyz[0]*sin(rad) + xyz[2]*cos(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
84 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
85
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
86 void rotate_z(float *xyz, float r)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
87 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
88 float rad = r*3.14/180;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
89
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
90 xyz[0] = xyz[0]*cos(rad) - xyz[1]*sin(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
91 xyz[1] = xyz[0]*sin(rad) + xyz[1]*cos(rad);
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
92 xyz[2] = xyz[2];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
93 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
94
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
95 void rotate(float *xyz, float *matrix)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
96 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
97 float abc[4];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
98 abc[0] = xyz[0];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
99 abc[1] = xyz[1];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
100 abc[2] = xyz[2];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
101 abc[3] = xyz[3];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
102
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
103 for(int i=0; i<4; i++)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
104 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
105 //xyz[i] = abc[0]*rot[i] + abc[1]*rot[i+4] + abc[2]*rot[i+8] + abc[3]*rot[i+12];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
106 xyz[i] = abc[0]*matrix[i] + abc[1]*matrix[i+4] + abc[2]*matrix[i+8] + abc[3]*matrix[i+12];
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
107 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
108 }
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
109
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
110
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
111 void translate(float *xyz, float x, float y, float z)
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
112 {
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
113 xyz[0] += x;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
114 xyz[1] += y;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
115 xyz[2] += z;
3f68b2ef4fb0 *** empty log message ***
gongo
parents:
diff changeset
116 }