glide_test1

annotate mesh.cpp @ 0:f3ddb2bb7024

first 3dfx glide test, initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 09 Mar 2014 06:27:58 +0200
parents
children
rev   line source
nuclear@0 1 #define _USE_MATH_DEFINES
nuclear@0 2 #include <math.h>
nuclear@0 3 #include "mesh.h"
nuclear@0 4
nuclear@0 5 #ifndef M_PI
nuclear@0 6 #define M_PI 3.14159265359
nuclear@0 7 #endif
nuclear@0 8
nuclear@0 9 void gen_sphere(std::vector<Vertex> &varr, float rad, int usub, int vsub)
nuclear@0 10 {
nuclear@0 11 }
nuclear@0 12
nuclear@0 13 static void torus_vertex(Vertex *vert, float u, float v, float rad, float tube_rad)
nuclear@0 14 {
nuclear@0 15 float theta = 2.0 * M_PI * u;
nuclear@0 16 float phi = 2.0 * M_PI * v;
nuclear@0 17
nuclear@0 18 float x = 0.0f;
nuclear@0 19 float y = sin(phi) * tube_rad;
nuclear@0 20 float z = cos(phi) * tube_rad + rad;
nuclear@0 21
nuclear@0 22 vert->pos.x = z * sin(theta);
nuclear@0 23 vert->pos.y = y;
nuclear@0 24 vert->pos.z = -x * sin(theta) + z * cos(theta);
nuclear@0 25 vert->pos.w = 1.0;
nuclear@0 26
nuclear@0 27 Vector3 cent;
nuclear@0 28 cent.x = sin(theta) * rad;
nuclear@0 29 cent.z = cos(theta) * rad;
nuclear@0 30
nuclear@0 31 vert->normal = normalize(Vector3(vert->pos) - cent);
nuclear@0 32 vert->color = Vector4(1.0, 1.0, 1.0, 1.0);
nuclear@0 33 }
nuclear@0 34
nuclear@0 35 void gen_torus(std::vector<Vertex> &varr, float rad, float tube_rad, int usub, int vsub)
nuclear@0 36 {
nuclear@0 37 int i, j;
nuclear@0 38
nuclear@0 39 if(usub < 3) usub = 3;
nuclear@0 40 if(vsub < 3) vsub = 3;
nuclear@0 41
nuclear@0 42 float du = 1.0f / (float)usub;
nuclear@0 43 float dv = 1.0f / (float)vsub;
nuclear@0 44
nuclear@0 45
nuclear@0 46 for(i=0; i<usub; i++) {
nuclear@0 47 float u = (float)i / (float)usub;
nuclear@0 48 for(j=0; j<vsub; j++) {
nuclear@0 49 float v = (float)j / (float)vsub;
nuclear@0 50 Vertex vert[4];
nuclear@0 51
nuclear@0 52 torus_vertex(vert, u, v, rad, tube_rad);
nuclear@0 53 torus_vertex(vert + 1, u, v + dv, rad, tube_rad);
nuclear@0 54 torus_vertex(vert + 2, u + du, v + dv, rad, tube_rad);
nuclear@0 55 torus_vertex(vert + 3, u + du, v, rad, tube_rad);
nuclear@0 56
nuclear@0 57 varr.push_back(vert[0]);
nuclear@0 58 varr.push_back(vert[1]);
nuclear@0 59 varr.push_back(vert[2]);
nuclear@0 60 varr.push_back(vert[0]);
nuclear@0 61 varr.push_back(vert[2]);
nuclear@0 62 varr.push_back(vert[3]);
nuclear@0 63
nuclear@0 64 }
nuclear@0 65 }
nuclear@0 66 }