diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /3dc/sphere.c | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to '3dc/sphere.c')
| -rw-r--r-- | 3dc/sphere.c | 257 |
1 files changed, 0 insertions, 257 deletions
diff --git a/3dc/sphere.c b/3dc/sphere.c deleted file mode 100644 index b5ef4bc..0000000 --- a/3dc/sphere.c +++ /dev/null @@ -1,257 +0,0 @@ -#include "3dc.h" -#include "module.h" -#include "inline.h" - -#include "sphere.h" - -#define UseLocalAssert Yes -#include "ourasert.h" - - -#define MakeVertex(o,x,y,z) \ -{ \ - o->vx=(x); \ - o->vy=(y); \ - o->vz=(z); \ - o++; \ -} - -#define MakeFace(f,a,b,c) \ -{ \ - f->v[0] = (a); \ - f->v[1] = (b); \ - f->v[2] = (c); \ - f++; \ -} - -VECTORCH OctantVertex[(SPHERE_ORDER+1)*(SPHERE_ORDER+2)/2]; -VECTORCH SphereVertex[SPHERE_VERTICES]; - -VECTORCH SphereRotatedVertex[SPHERE_VERTICES]; -VECTORCH SphereAtmosRotatedVertex[SPHERE_VERTICES]; -int SphereAtmosU[SPHERE_VERTICES]; -int SphereAtmosV[SPHERE_VERTICES]; - - -TRI_FACE SphereFace[SPHERE_FACES]; -int SphereVertexHeight[SPHERE_VERTICES]; - -static void Generate_SphereOctant(void) -{ - int i,j; - - VECTORCH *o = OctantVertex; - - /* i=0, j=0 */ - MakeVertex(o,0,0,SPHERE_RADIUS); - - for (i=1; i<SPHERE_ORDER; i++) - { - int cosPhi, sinPhi; - { - int phi = 1024*i/SPHERE_ORDER; - cosPhi = GetCos(phi); - sinPhi = GetSin(phi); - } - - /* 0<i<n, j=0 */ - /* => cosTheta = 1, sinTheta = 0 */ - MakeVertex(o,sinPhi,0,cosPhi); - - for (j=1; j<i; j++) - { - int cosTheta, sinTheta; - { - int theta = 1024*j/i; - cosTheta = GetCos(theta); - sinTheta = GetSin(theta); - } - - /* 0<i<n, 0<j<i */ - MakeVertex(o,MUL_FIXED(cosTheta,sinPhi),MUL_FIXED(sinTheta,sinPhi),cosPhi); - } - - /* 0<i<n, j=i */ - MakeVertex(o,0,sinPhi,cosPhi); - } - - /* i=n, j=0 */ - MakeVertex(o,SPHERE_RADIUS,0,0); - - for (j=1; j<SPHERE_ORDER; j++) - { - int cosTheta, sinTheta; - { - int theta = 1024*j/SPHERE_ORDER; - cosTheta = GetCos(theta); - sinTheta = GetSin(theta); - } - /* i=n, 0<j<i */ - MakeVertex(o,cosTheta,sinTheta,0); - } - - /* i=n, j=i */ - MakeVertex(o,0,SPHERE_RADIUS,0); -} - -void Generate_Sphere(void) -{ - /* first generate vertices */ - { - int i,j; - VECTORCH *v = SphereVertex; - VECTORCH *o = OctantVertex; - - Generate_SphereOctant(); - - /* north pole */ - *v++ = *o; - for (i=0; ++i<=SPHERE_ORDER;) - { - o += i; - /* 1st Quadrant */ - for (j=i; --j>=0; o++, v++) - { - *v = *o; - } - /* 2nd Quadrant */ - for (j=i; --j>=0; o--, v++) - { - v->vx = -o->vx; - v->vy = o->vy; - v->vz = o->vz; - } - /* 3rd Quadrant */ - for (j=i; --j>=0; o++, v++) - { - v->vx = -o->vx; - v->vy = -o->vy; - v->vz = o->vz; - } - /* 4th Quadrant */ - for (j=i; --j>=0; o--, v++) - { - v->vx = o->vx; - v->vy = -o->vy; - v->vz = o->vz; - } - } - for (; --i>1;) - { - o -= i; - /* 5th Quadrant */ - for (j=i; --j>0; o++, v++) - { - v->vx = o->vx; - v->vy = o->vy; - v->vz = -o->vz; - } - /* 6th Quadrant */ - for (j=i; --j>0; o--, v++) - { - v->vx = -o->vx; - v->vy = o->vy; - v->vz = -o->vz; - } - /* 7th Quadrant */ - for (j=i; --j>0; o++, v++) - { - v->vx = -o->vx; - v->vy = -o->vy; - v->vz = -o->vz; - } - /* 8th Quadrant */ - for (j=i; --j>0; o--, v++) - { - v->vx = o->vx; - v->vy = -o->vy; - v->vz = -o->vz; - } - } - o--; - /* south pole */ - v->vx = -o->vx; - v->vy = -o->vy; - v->vz = -o->vz; - } - - /* now generate face data */ - { - TRI_FACE *f = SphereFace; - int kv,kw,ko,kv0,kw0,i,j; - - kv = 0, kw = 1; - - for(i=0; i<SPHERE_ORDER; i++) - { - kv0 = kv, kw0 = kw; - for (ko=1; ko<=3; ko++) - { - for (j=i;; j--) - { - MakeFace(f,kv,kw,++kw); - if (j==0) break; - MakeFace(f,kv,kw,++kv); - } - } - for (j=i;;j--) - { - if (j==0) - { - MakeFace(f,kv0,kw,kw0); - kv++; - kw++; - break; - } - MakeFace(f,kv,kw,++kw); - if (j==1) - { - MakeFace(f,kv,kw,kv0); - } - else MakeFace(f,kv,kw,++kv); - } - } - for(; --i>=0;) - { - kv0=kv,kw0=kw; - for(ko=5;ko<=7;ko++) - { - for (j=i;; j--) - { - MakeFace(f,kv,kw,++kv); - if (j==0) break; - MakeFace(f,kv,kw,++kw); - } - } - for (j=i;;j--) - { - if (j==0) - { - MakeFace(f,kv,kw0,kv0); - kv++; - kw++; - break; - } - MakeFace(f,kv,kw,++kv); - if (j==1) - { - MakeFace(f,kv,kw,kw0); - } - else MakeFace(f,kv,kw,++kw); - } - } - } - { - int i; - VECTORCH *vSphere = SphereVertex; - for(i=0;i<SPHERE_VERTICES;i++,vSphere++) - { -// int radius = vSphere->vx*vSphere->vx+vSphere->vz*vSphere->vz; -// if (radius<16384) radius = 16384; - -// SphereAtmosU[i] = DIV_FIXED(ArcCos(vSphere->vy)*32*128*8,radius); - SphereAtmosV[i] = ArcCos(vSphere->vy)*32*128*SPHERE_TEXTURE_WRAP;//*8; - SphereAtmosU[i] = ArcTan(vSphere->vz,vSphere->vx)*16*128*SPHERE_TEXTURE_WRAP;//*8; - } - } -} |
