Jared DiCarlo
/
manworm_tv_gpu
asdf
Fork of manworm_ticker_tv by
gfx.cpp@12:e99cc1e9d928, 2018-05-04 (annotated)
- Committer:
- dicarloj
- Date:
- Fri May 04 01:45:05 2018 +0000
- Revision:
- 12:e99cc1e9d928
- Parent:
- 11:537cde55b27f
lol it works;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dicarloj | 9:2a47b9ff8911 | 1 | #define N_PTS 500 |
dicarloj | 9:2a47b9ff8911 | 2 | #define N_LNS 2000 |
dicarloj | 12:e99cc1e9d928 | 3 | #define N_HEIGHTS 36 |
dicarloj | 12:e99cc1e9d928 | 4 | #define N_SIDE 6 |
dicarloj | 9:2a47b9ff8911 | 5 | |
dicarloj | 9:2a47b9ff8911 | 6 | #include "gfx.h" |
dicarloj | 9:2a47b9ff8911 | 7 | #include "mbed.h" |
dicarloj | 9:2a47b9ff8911 | 8 | #include "main.h" |
dicarloj | 9:2a47b9ff8911 | 9 | |
dicarloj | 9:2a47b9ff8911 | 10 | int n_pts = 0; |
dicarloj | 9:2a47b9ff8911 | 11 | int n_lns = 0; |
dicarloj | 9:2a47b9ff8911 | 12 | int n_frame = 0; |
dicarloj | 9:2a47b9ff8911 | 13 | int n_cubes = 0; |
dicarloj | 9:2a47b9ff8911 | 14 | |
dicarloj | 9:2a47b9ff8911 | 15 | char gfx_stat[40]; |
dicarloj | 9:2a47b9ff8911 | 16 | |
dicarloj | 9:2a47b9ff8911 | 17 | point_t* pts; |
dicarloj | 9:2a47b9ff8911 | 18 | line_t* lns; |
dicarloj | 9:2a47b9ff8911 | 19 | cube_t* cubes; |
dicarloj | 11:537cde55b27f | 20 | point_t temp_point; |
dicarloj | 9:2a47b9ff8911 | 21 | |
dicarloj | 9:2a47b9ff8911 | 22 | float heights[N_HEIGHTS]; |
dicarloj | 9:2a47b9ff8911 | 23 | |
dicarloj | 9:2a47b9ff8911 | 24 | float c_i[3] = {-.1, -.1, -.1}; |
dicarloj | 9:2a47b9ff8911 | 25 | float c1i[3] = {.1, -.1, -.1}; |
dicarloj | 9:2a47b9ff8911 | 26 | float c2i[3] = {-.1, .1, -.1}; |
dicarloj | 9:2a47b9ff8911 | 27 | float c3i[3] = {-.1, -.1, .1}; |
dicarloj | 9:2a47b9ff8911 | 28 | float c_j[3] = {.1, .1, .1}; |
dicarloj | 9:2a47b9ff8911 | 29 | float c1j[3] = {.1, .1, -.1}; |
dicarloj | 9:2a47b9ff8911 | 30 | float c2j[3] = {-.1, .1, .1}; |
dicarloj | 9:2a47b9ff8911 | 31 | float c3j[3] = {.1, -.1, .1}; |
dicarloj | 9:2a47b9ff8911 | 32 | float x_rotmat[3][3] = {{1, 0, 0}, {0, cos(.02), -sin(.02)}, {0, sin(.02), cos(.02)}}; |
dicarloj | 10:1163fb31b0a7 | 33 | float y_rotmat[3][3] = {{cos(.03), 0, sin(.03)}, {0, 1, 0}, { -sin(.03), 0, cos(.03)}}; |
dicarloj | 9:2a47b9ff8911 | 34 | float z_rotmat[3][3] = {{cos(.02), -sin(.02), 0}, {sin(.02), cos(.02), 0}, {0, 0, 1}}; |
dicarloj | 9:2a47b9ff8911 | 35 | float temp[3] = {0, 0, 0}; |
dicarloj | 9:2a47b9ff8911 | 36 | float temp2[3] = {0, 0, 0}; |
dicarloj | 9:2a47b9ff8911 | 37 | |
dicarloj | 10:1163fb31b0a7 | 38 | float x_off = 0.f; |
dicarloj | 10:1163fb31b0a7 | 39 | float y_off = 0.f; |
dicarloj | 10:1163fb31b0a7 | 40 | float pitch = 0.f; |
dicarloj | 11:537cde55b27f | 41 | float yaw = 0.f; |
dicarloj | 10:1163fb31b0a7 | 42 | |
dicarloj | 9:2a47b9ff8911 | 43 | unsigned int m_z=12434,m_w=33254; |
dicarloj | 9:2a47b9ff8911 | 44 | void draw_lines(); |
dicarloj | 9:2a47b9ff8911 | 45 | |
dicarloj | 9:2a47b9ff8911 | 46 | unsigned int rnd() { |
dicarloj | 9:2a47b9ff8911 | 47 | m_z = 36969 * (m_z & 65535) + (m_z >>16); |
dicarloj | 9:2a47b9ff8911 | 48 | m_w = 18000 * (m_w & 65535) + (m_w >>16); |
dicarloj | 9:2a47b9ff8911 | 49 | return ((m_z <<16) + m_w); |
dicarloj | 9:2a47b9ff8911 | 50 | } |
dicarloj | 9:2a47b9ff8911 | 51 | |
dicarloj | 9:2a47b9ff8911 | 52 | |
dicarloj | 9:2a47b9ff8911 | 53 | |
dicarloj | 9:2a47b9ff8911 | 54 | void mat_vec_mult(float a[][3], float *b, float *c, uint8_t inv) { |
dicarloj | 9:2a47b9ff8911 | 55 | for (int i = 0; i < 3; i++) { |
dicarloj | 9:2a47b9ff8911 | 56 | if(inv) |
dicarloj | 9:2a47b9ff8911 | 57 | c[i] = (a[0][i] * b[0] + a[1][i] * b[1] + a[2][i] * b[2]); |
dicarloj | 9:2a47b9ff8911 | 58 | else |
dicarloj | 9:2a47b9ff8911 | 59 | c[i] = (a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2]); |
dicarloj | 9:2a47b9ff8911 | 60 | } |
dicarloj | 9:2a47b9ff8911 | 61 | } |
dicarloj | 9:2a47b9ff8911 | 62 | |
dicarloj | 9:2a47b9ff8911 | 63 | void point_mult(float a[][3], point_t* b, float* c, uint8_t inv) |
dicarloj | 9:2a47b9ff8911 | 64 | { |
dicarloj | 9:2a47b9ff8911 | 65 | for (int i = 0; i < 3; i++) { |
dicarloj | 9:2a47b9ff8911 | 66 | if(inv) |
dicarloj | 9:2a47b9ff8911 | 67 | { |
dicarloj | 9:2a47b9ff8911 | 68 | c[i] = (a[0][i] * b->x + a[1][i] * b->y + a[2][i] * b->z); |
dicarloj | 9:2a47b9ff8911 | 69 | } |
dicarloj | 9:2a47b9ff8911 | 70 | else |
dicarloj | 9:2a47b9ff8911 | 71 | { |
dicarloj | 9:2a47b9ff8911 | 72 | c[i] = (a[i][0] * b->x + a[i][1] * b->y + a[i][2] * b->z); |
dicarloj | 9:2a47b9ff8911 | 73 | } |
dicarloj | 9:2a47b9ff8911 | 74 | } |
dicarloj | 9:2a47b9ff8911 | 75 | } |
dicarloj | 9:2a47b9ff8911 | 76 | |
dicarloj | 9:2a47b9ff8911 | 77 | |
dicarloj | 9:2a47b9ff8911 | 78 | |
dicarloj | 9:2a47b9ff8911 | 79 | void add_cube() |
dicarloj | 9:2a47b9ff8911 | 80 | { |
dicarloj | 9:2a47b9ff8911 | 81 | |
dicarloj | 9:2a47b9ff8911 | 82 | } |
dicarloj | 9:2a47b9ff8911 | 83 | |
dicarloj | 9:2a47b9ff8911 | 84 | char* get_gfx_stat() |
dicarloj | 9:2a47b9ff8911 | 85 | { |
dicarloj | 9:2a47b9ff8911 | 86 | n_frame++; |
dicarloj | 11:537cde55b27f | 87 | //sprintf(gfx_stat,"%d/%d, %d/%d, %d",n_lns,N_LNS,n_pts,N_PTS,n_frame%1000); |
dicarloj | 11:537cde55b27f | 88 | sprintf(gfx_stat,"%.3f/%.3f",pitch,yaw); |
dicarloj | 9:2a47b9ff8911 | 89 | return gfx_stat; |
dicarloj | 9:2a47b9ff8911 | 90 | } |
dicarloj | 9:2a47b9ff8911 | 91 | |
dicarloj | 9:2a47b9ff8911 | 92 | point_t* new_point() |
dicarloj | 9:2a47b9ff8911 | 93 | { |
dicarloj | 9:2a47b9ff8911 | 94 | if(n_pts >= N_PTS - 1) return NULL; |
dicarloj | 9:2a47b9ff8911 | 95 | return &pts[n_pts++]; |
dicarloj | 9:2a47b9ff8911 | 96 | } |
dicarloj | 9:2a47b9ff8911 | 97 | |
dicarloj | 9:2a47b9ff8911 | 98 | line_t* new_linet() |
dicarloj | 9:2a47b9ff8911 | 99 | { |
dicarloj | 9:2a47b9ff8911 | 100 | if(n_lns >= N_LNS - 1) return NULL; |
dicarloj | 9:2a47b9ff8911 | 101 | return &lns[n_lns++]; |
dicarloj | 9:2a47b9ff8911 | 102 | } |
dicarloj | 9:2a47b9ff8911 | 103 | |
dicarloj | 9:2a47b9ff8911 | 104 | void rotate_cube(uint8_t x, uint8_t y, uint8_t z,uint8_t inv); |
dicarloj | 9:2a47b9ff8911 | 105 | |
dicarloj | 11:537cde55b27f | 106 | unsigned int PRNG() |
dicarloj | 9:2a47b9ff8911 | 107 | { |
dicarloj | 11:537cde55b27f | 108 | // our initial starting seed is 5323 |
dicarloj | 11:537cde55b27f | 109 | static unsigned int nSeed = 5323; |
dicarloj | 11:537cde55b27f | 110 | |
dicarloj | 11:537cde55b27f | 111 | // Take the current seed and generate a new value from it |
dicarloj | 11:537cde55b27f | 112 | // Due to our use of large constants and overflow, it would be |
dicarloj | 11:537cde55b27f | 113 | // very hard for someone to predict what the next number is |
dicarloj | 11:537cde55b27f | 114 | // going to be from the previous one. |
dicarloj | 11:537cde55b27f | 115 | nSeed = (8253729 * nSeed + 2396403); |
dicarloj | 11:537cde55b27f | 116 | |
dicarloj | 11:537cde55b27f | 117 | // Take the seed and return a value between 0 and 32767 |
dicarloj | 11:537cde55b27f | 118 | return nSeed % 32767; |
dicarloj | 11:537cde55b27f | 119 | } |
dicarloj | 11:537cde55b27f | 120 | |
dicarloj | 11:537cde55b27f | 121 | void update_x_rot(); |
dicarloj | 11:537cde55b27f | 122 | void new_frame(float pitch_rate, float yaw_rate) |
dicarloj | 11:537cde55b27f | 123 | { |
dicarloj | 11:537cde55b27f | 124 | pitch += pitch_rate * .05f; |
dicarloj | 11:537cde55b27f | 125 | yaw += yaw_rate * .05f; |
dicarloj | 11:537cde55b27f | 126 | //printf("yaw: %.3f \r\n",yaw); |
dicarloj | 11:537cde55b27f | 127 | // if(c == 'w') y_off += .01f; |
dicarloj | 11:537cde55b27f | 128 | // if(c == 's') y_off -= .01f; |
dicarloj | 11:537cde55b27f | 129 | // if(c == 'a') x_off += .01f; |
dicarloj | 11:537cde55b27f | 130 | // if(c == 'd') x_off -= .01f; |
dicarloj | 11:537cde55b27f | 131 | // if(c == 'q') pitch += .01f; |
dicarloj | 11:537cde55b27f | 132 | // if(c == 'e') pitch -= .01f; |
dicarloj | 10:1163fb31b0a7 | 133 | |
dicarloj | 10:1163fb31b0a7 | 134 | update_x_rot(); |
dicarloj | 9:2a47b9ff8911 | 135 | draw_lines(); |
dicarloj | 10:1163fb31b0a7 | 136 | |
dicarloj | 9:2a47b9ff8911 | 137 | } |
dicarloj | 9:2a47b9ff8911 | 138 | |
dicarloj | 9:2a47b9ff8911 | 139 | void rotate_cube(uint8_t x, uint8_t y, uint8_t z, uint8_t inv) |
dicarloj | 9:2a47b9ff8911 | 140 | { |
dicarloj | 9:2a47b9ff8911 | 141 | if (x) { |
dicarloj | 9:2a47b9ff8911 | 142 | //multiply the cube point by the rotation matrix and store the array in temp |
dicarloj | 9:2a47b9ff8911 | 143 | mat_vec_mult(x_rotmat, c_i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 144 | //copy temp vector into point vector, updating it. |
dicarloj | 9:2a47b9ff8911 | 145 | memcpy(c_i, temp, sizeof(c_i)); |
dicarloj | 9:2a47b9ff8911 | 146 | mat_vec_mult(x_rotmat, c1i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 147 | memcpy(c1i, temp, sizeof(c1i)); |
dicarloj | 9:2a47b9ff8911 | 148 | mat_vec_mult(x_rotmat, c2i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 149 | memcpy(c2i, temp, sizeof(c2i)); |
dicarloj | 9:2a47b9ff8911 | 150 | mat_vec_mult(x_rotmat, c3i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 151 | memcpy(c3i, temp, sizeof(c3i)); |
dicarloj | 9:2a47b9ff8911 | 152 | mat_vec_mult(x_rotmat, c_j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 153 | memcpy(c_j, temp, sizeof(c_j)); |
dicarloj | 9:2a47b9ff8911 | 154 | mat_vec_mult(x_rotmat, c1j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 155 | memcpy(c1j, temp, sizeof(c1j)); |
dicarloj | 9:2a47b9ff8911 | 156 | mat_vec_mult(x_rotmat, c2j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 157 | memcpy(c2j, temp, sizeof(c2j)); |
dicarloj | 9:2a47b9ff8911 | 158 | mat_vec_mult(x_rotmat, c3j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 159 | memcpy(c3j, temp, sizeof(c3j)); |
dicarloj | 9:2a47b9ff8911 | 160 | } |
dicarloj | 9:2a47b9ff8911 | 161 | if (y) { |
dicarloj | 9:2a47b9ff8911 | 162 | |
dicarloj | 9:2a47b9ff8911 | 163 | mat_vec_mult(y_rotmat, c_i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 164 | memcpy(c_i, temp, sizeof(c_i)); |
dicarloj | 9:2a47b9ff8911 | 165 | mat_vec_mult(y_rotmat, c1i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 166 | memcpy(c1i, temp, sizeof(c1i)); |
dicarloj | 9:2a47b9ff8911 | 167 | mat_vec_mult(y_rotmat, c2i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 168 | memcpy(c2i, temp, sizeof(c2i)); |
dicarloj | 9:2a47b9ff8911 | 169 | mat_vec_mult(y_rotmat, c3i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 170 | memcpy(c3i, temp, sizeof(c3i)); |
dicarloj | 9:2a47b9ff8911 | 171 | mat_vec_mult(y_rotmat, c_j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 172 | memcpy(c_j, temp, sizeof(c_j)); |
dicarloj | 9:2a47b9ff8911 | 173 | mat_vec_mult(y_rotmat, c1j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 174 | memcpy(c1j, temp, sizeof(c1j)); |
dicarloj | 9:2a47b9ff8911 | 175 | mat_vec_mult(y_rotmat, c2j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 176 | memcpy(c2j, temp, sizeof(c2j)); |
dicarloj | 9:2a47b9ff8911 | 177 | mat_vec_mult(y_rotmat, c3j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 178 | memcpy(c3j, temp, sizeof(c3j)); |
dicarloj | 9:2a47b9ff8911 | 179 | } |
dicarloj | 9:2a47b9ff8911 | 180 | // |
dicarloj | 9:2a47b9ff8911 | 181 | if (z) { |
dicarloj | 9:2a47b9ff8911 | 182 | mat_vec_mult(z_rotmat, c_i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 183 | memcpy(c_i, temp, sizeof(c_i)); |
dicarloj | 9:2a47b9ff8911 | 184 | mat_vec_mult(z_rotmat, c1i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 185 | memcpy(c1i, temp, sizeof(c1i)); |
dicarloj | 9:2a47b9ff8911 | 186 | mat_vec_mult(z_rotmat, c2i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 187 | memcpy(c2i, temp, sizeof(c2i)); |
dicarloj | 9:2a47b9ff8911 | 188 | mat_vec_mult(z_rotmat, c3i, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 189 | memcpy(c3i, temp, sizeof(c3i)); |
dicarloj | 9:2a47b9ff8911 | 190 | mat_vec_mult(z_rotmat, c_j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 191 | memcpy(c_j, temp, sizeof(c_j)); |
dicarloj | 9:2a47b9ff8911 | 192 | mat_vec_mult(z_rotmat, c1j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 193 | memcpy(c1j, temp, sizeof(c1j)); |
dicarloj | 9:2a47b9ff8911 | 194 | mat_vec_mult(z_rotmat, c2j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 195 | memcpy(c2j, temp, sizeof(c2j)); |
dicarloj | 9:2a47b9ff8911 | 196 | mat_vec_mult(z_rotmat, c3j, temp,inv); |
dicarloj | 9:2a47b9ff8911 | 197 | memcpy(c3j, temp, sizeof(c3j)); |
dicarloj | 9:2a47b9ff8911 | 198 | } |
dicarloj | 9:2a47b9ff8911 | 199 | } |
dicarloj | 9:2a47b9ff8911 | 200 | |
dicarloj | 9:2a47b9ff8911 | 201 | void init_gfx() |
dicarloj | 9:2a47b9ff8911 | 202 | { |
dicarloj | 9:2a47b9ff8911 | 203 | new_line(); |
dicarloj | 9:2a47b9ff8911 | 204 | draw_vincent_string("GFX START!"); |
dicarloj | 9:2a47b9ff8911 | 205 | pts = (point_t*)malloc(N_PTS * sizeof(point_t)); |
dicarloj | 9:2a47b9ff8911 | 206 | lns = (line_t*)malloc(N_LNS * sizeof(line_t)); |
dicarloj | 9:2a47b9ff8911 | 207 | cubes = (cube_t*)malloc(10 * sizeof(cube_t)); |
dicarloj | 9:2a47b9ff8911 | 208 | |
dicarloj | 9:2a47b9ff8911 | 209 | for(int i = 0; i < N_HEIGHTS; i++) |
dicarloj | 9:2a47b9ff8911 | 210 | { |
dicarloj | 9:2a47b9ff8911 | 211 | uint32_t a = rnd(); |
dicarloj | 9:2a47b9ff8911 | 212 | heights[i] = .2f * (float)a / (float)INT_MAX; |
dicarloj | 9:2a47b9ff8911 | 213 | new_point(); |
dicarloj | 9:2a47b9ff8911 | 214 | pts[i].z = heights[i]; |
dicarloj | 9:2a47b9ff8911 | 215 | pts[i].y = 0.001f; |
dicarloj | 9:2a47b9ff8911 | 216 | pts[i].x = 0.001f; |
dicarloj | 9:2a47b9ff8911 | 217 | //sprintf("%f\n",heights[i]); |
dicarloj | 9:2a47b9ff8911 | 218 | } |
dicarloj | 9:2a47b9ff8911 | 219 | |
dicarloj | 9:2a47b9ff8911 | 220 | |
dicarloj | 9:2a47b9ff8911 | 221 | for(int xi = 0; xi < N_SIDE; xi++) |
dicarloj | 9:2a47b9ff8911 | 222 | { |
dicarloj | 9:2a47b9ff8911 | 223 | for(int yi = 0; yi < N_SIDE; yi++) |
dicarloj | 9:2a47b9ff8911 | 224 | { |
dicarloj | 9:2a47b9ff8911 | 225 | // base |
dicarloj | 9:2a47b9ff8911 | 226 | int pti = xi + N_SIDE*yi; |
dicarloj | 11:537cde55b27f | 227 | pts[pti].x = -.5f + .7f*( (float) (xi) )/( (float) (N_SIDE) ) + .15f; |
dicarloj | 11:537cde55b27f | 228 | pts[pti].y = -.5f + .7f*( (float) (yi) )/( (float) (N_SIDE) ) + .15f; |
dicarloj | 9:2a47b9ff8911 | 229 | // go x+? |
dicarloj | 9:2a47b9ff8911 | 230 | if( (xi < (N_SIDE - 1))) |
dicarloj | 9:2a47b9ff8911 | 231 | { |
dicarloj | 9:2a47b9ff8911 | 232 | int ptn = (xi+1) + N_SIDE*yi; |
dicarloj | 9:2a47b9ff8911 | 233 | line_t* lin = new_linet(); |
dicarloj | 9:2a47b9ff8911 | 234 | lin->a = pts + pti; |
dicarloj | 9:2a47b9ff8911 | 235 | lin->b = pts + ptn; |
dicarloj | 9:2a47b9ff8911 | 236 | } |
dicarloj | 9:2a47b9ff8911 | 237 | // go x-? |
dicarloj | 9:2a47b9ff8911 | 238 | if( (xi > 0)) |
dicarloj | 9:2a47b9ff8911 | 239 | { |
dicarloj | 9:2a47b9ff8911 | 240 | int ptn = (xi-1) + N_SIDE*yi; |
dicarloj | 9:2a47b9ff8911 | 241 | line_t* lin = new_linet(); |
dicarloj | 9:2a47b9ff8911 | 242 | lin->a = pts + pti; |
dicarloj | 9:2a47b9ff8911 | 243 | lin->b = pts + ptn; |
dicarloj | 9:2a47b9ff8911 | 244 | } |
dicarloj | 9:2a47b9ff8911 | 245 | |
dicarloj | 9:2a47b9ff8911 | 246 | // go y+ |
dicarloj | 9:2a47b9ff8911 | 247 | if( (yi < (N_SIDE - 1))) |
dicarloj | 9:2a47b9ff8911 | 248 | { |
dicarloj | 9:2a47b9ff8911 | 249 | int ptn = (xi) + N_SIDE*(1+yi); |
dicarloj | 9:2a47b9ff8911 | 250 | line_t* lin = new_linet(); |
dicarloj | 9:2a47b9ff8911 | 251 | lin->a = pts + pti; |
dicarloj | 9:2a47b9ff8911 | 252 | lin->b = pts + ptn; |
dicarloj | 9:2a47b9ff8911 | 253 | } |
dicarloj | 9:2a47b9ff8911 | 254 | |
dicarloj | 9:2a47b9ff8911 | 255 | // go y-? |
dicarloj | 9:2a47b9ff8911 | 256 | if( (yi > 0)) |
dicarloj | 9:2a47b9ff8911 | 257 | { |
dicarloj | 9:2a47b9ff8911 | 258 | int ptn = (xi) + N_SIDE*(yi - 1); |
dicarloj | 9:2a47b9ff8911 | 259 | line_t* lin = new_linet(); |
dicarloj | 9:2a47b9ff8911 | 260 | lin->a = pts + pti; |
dicarloj | 9:2a47b9ff8911 | 261 | lin->b = pts + ptn; |
dicarloj | 9:2a47b9ff8911 | 262 | } |
dicarloj | 9:2a47b9ff8911 | 263 | |
dicarloj | 9:2a47b9ff8911 | 264 | |
dicarloj | 9:2a47b9ff8911 | 265 | } |
dicarloj | 9:2a47b9ff8911 | 266 | } |
dicarloj | 9:2a47b9ff8911 | 267 | } |
dicarloj | 9:2a47b9ff8911 | 268 | |
dicarloj | 10:1163fb31b0a7 | 269 | void bring_in_range() |
dicarloj | 10:1163fb31b0a7 | 270 | { |
dicarloj | 10:1163fb31b0a7 | 271 | while(x_off > .5f) x_off = x_off - .25f; |
dicarloj | 10:1163fb31b0a7 | 272 | while(x_off < -.5f) x_off = x_off + .25f; |
dicarloj | 10:1163fb31b0a7 | 273 | while(y_off > .5f) y_off = y_off - .25f; |
dicarloj | 10:1163fb31b0a7 | 274 | while(y_off < -.5f) y_off = y_off + .25f; |
dicarloj | 10:1163fb31b0a7 | 275 | |
dicarloj | 10:1163fb31b0a7 | 276 | } |
dicarloj | 10:1163fb31b0a7 | 277 | |
dicarloj | 10:1163fb31b0a7 | 278 | void update_x_rot() |
dicarloj | 10:1163fb31b0a7 | 279 | { |
dicarloj | 10:1163fb31b0a7 | 280 | x_rotmat[1][1] = cos(pitch); |
dicarloj | 10:1163fb31b0a7 | 281 | x_rotmat[1][2] = -sin(pitch); |
dicarloj | 10:1163fb31b0a7 | 282 | x_rotmat[2][1] = sin(pitch); |
dicarloj | 10:1163fb31b0a7 | 283 | x_rotmat[2][2] = cos(pitch); |
dicarloj | 11:537cde55b27f | 284 | |
dicarloj | 11:537cde55b27f | 285 | y_rotmat[0][0] = cos(yaw); |
dicarloj | 11:537cde55b27f | 286 | y_rotmat[0][2] = sin(yaw); |
dicarloj | 11:537cde55b27f | 287 | y_rotmat[2][0] -sin(yaw); |
dicarloj | 11:537cde55b27f | 288 | y_rotmat[2][2] = cos(yaw); |
dicarloj | 11:537cde55b27f | 289 | //float y_rotmat[3][3] = {{cos(.03), 0, sin(.03)}, {0, 1, 0}, { -sin(.03), 0, cos(.03)}}; |
dicarloj | 11:537cde55b27f | 290 | |
dicarloj | 11:537cde55b27f | 291 | |
dicarloj | 10:1163fb31b0a7 | 292 | //float x_rotmat[3][3] = {{1, 0, 0}, {0, cos(.02), -sin(.02)}, {0, sin(.02), cos(.02)}}; |
dicarloj | 10:1163fb31b0a7 | 293 | } |
dicarloj | 10:1163fb31b0a7 | 294 | |
dicarloj | 9:2a47b9ff8911 | 295 | void draw_lines() |
dicarloj | 9:2a47b9ff8911 | 296 | { |
dicarloj | 10:1163fb31b0a7 | 297 | // for(int i = 0; i < n_pts; i++) |
dicarloj | 10:1163fb31b0a7 | 298 | // { |
dicarloj | 10:1163fb31b0a7 | 299 | // point_mult(x_rotmat,pts + i,temp,0); |
dicarloj | 10:1163fb31b0a7 | 300 | // pts[i].x = temp[0]; |
dicarloj | 10:1163fb31b0a7 | 301 | // pts[i].y = temp[1]; |
dicarloj | 10:1163fb31b0a7 | 302 | // pts[i].z = temp[2]; |
dicarloj | 10:1163fb31b0a7 | 303 | // point_mult(y_rotmat,pts + i,temp,0); |
dicarloj | 10:1163fb31b0a7 | 304 | // pts[i].x = temp[0]; |
dicarloj | 10:1163fb31b0a7 | 305 | // pts[i].y = temp[1]; |
dicarloj | 10:1163fb31b0a7 | 306 | // pts[i].z = temp[2]; |
dicarloj | 10:1163fb31b0a7 | 307 | // } |
dicarloj | 9:2a47b9ff8911 | 308 | |
dicarloj | 9:2a47b9ff8911 | 309 | for(int i = 0; i < n_lns; i++) |
dicarloj | 9:2a47b9ff8911 | 310 | { |
dicarloj | 9:2a47b9ff8911 | 311 | line_t* l = lns + i; |
dicarloj | 10:1163fb31b0a7 | 312 | point_t* a = l->a; |
dicarloj | 10:1163fb31b0a7 | 313 | point_t* b = l->b; |
dicarloj | 11:537cde55b27f | 314 | //point_mult(x_rotmat,a,temp,0); |
dicarloj | 11:537cde55b27f | 315 | //point_mult(x_rotmat,b,temp2,0); |
dicarloj | 10:1163fb31b0a7 | 316 | bring_in_range(); |
dicarloj | 11:537cde55b27f | 317 | |
dicarloj | 11:537cde55b27f | 318 | point_mult(x_rotmat,a,temp,0); |
dicarloj | 11:537cde55b27f | 319 | temp_point.x = temp[0]; |
dicarloj | 11:537cde55b27f | 320 | temp_point.y = temp[1]; |
dicarloj | 11:537cde55b27f | 321 | temp_point.z = temp[2]; |
dicarloj | 11:537cde55b27f | 322 | point_mult(y_rotmat,&temp_point,temp2,0); |
dicarloj | 11:537cde55b27f | 323 | float x1 = temp2[0] + x_off; |
dicarloj | 11:537cde55b27f | 324 | float y1 = temp2[1] + y_off; |
dicarloj | 11:537cde55b27f | 325 | |
dicarloj | 11:537cde55b27f | 326 | point_mult(x_rotmat,b,temp,0); |
dicarloj | 11:537cde55b27f | 327 | temp_point.x = temp[0]; |
dicarloj | 11:537cde55b27f | 328 | temp_point.y = temp[1]; |
dicarloj | 11:537cde55b27f | 329 | temp_point.z = temp[2]; |
dicarloj | 11:537cde55b27f | 330 | point_mult(y_rotmat,&temp_point,temp2,0); |
dicarloj | 10:1163fb31b0a7 | 331 | float x2 = temp2[0] + x_off; |
dicarloj | 10:1163fb31b0a7 | 332 | float y2 = temp2[1] + y_off; |
dicarloj | 11:537cde55b27f | 333 | |
dicarloj | 11:537cde55b27f | 334 | |
dicarloj | 11:537cde55b27f | 335 | // float x1 = temp[0] + x_off; |
dicarloj | 11:537cde55b27f | 336 | // float x2 = temp2[0] + x_off; |
dicarloj | 11:537cde55b27f | 337 | // float y1 = temp[1] + y_off; |
dicarloj | 11:537cde55b27f | 338 | // float y2 = temp2[1] + y_off; |
dicarloj | 10:1163fb31b0a7 | 339 | |
dicarloj | 10:1163fb31b0a7 | 340 | draw_gfx_line(x1,y1,x2,y2); |
dicarloj | 9:2a47b9ff8911 | 341 | //printf("i: %d, a: %d, b: %d\n",i,l->a,l->b); |
dicarloj | 9:2a47b9ff8911 | 342 | //printf("%.3f, %.3f, %.3f, %.3f\n",l->a->x,l->a->y,l->b->x,l->b->y); |
dicarloj | 10:1163fb31b0a7 | 343 | //draw_gfx_line(l->a->x,l->a->y,l->b->x,l->b->y); |
dicarloj | 9:2a47b9ff8911 | 344 | |
dicarloj | 9:2a47b9ff8911 | 345 | } |
dicarloj | 9:2a47b9ff8911 | 346 | } |