Advertisement
BlueBear

sphere_draw.c

Dec 6th, 2014
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. void drawsphere()
  2. {
  3.   #define PI 3.14159265358979323846f
  4.   int width = 32;
  5.   int height = 16;
  6.  
  7.   float theta, phi, *dat;
  8.   int i, j, t, ntri, nvec, *idx;
  9.  
  10.   nvec = (height-2)* width+2;
  11.   ntri = (height-2)*(width-1)*2;
  12.  
  13.   dat = (float*) malloc( nvec * 3*sizeof(float) );
  14.   idx =   (int*) malloc( ntri * 3*sizeof(int)   );
  15.  
  16.   for( t=0, j=1; j<height-1; j++ )
  17.   for(      i=0; i<width; i++ )
  18.   {
  19.     theta = float(j)/(height-1) * PI;
  20.     phi   = float(i)/(width-1 ) * PI*2;
  21.     dat[t++] =  sinf(theta) * cosf(phi);
  22.     dat[t++] =  cosf(theta);
  23.     dat[t++] = -sinf(theta) * sinf(phi);
  24.   }
  25.   dat[t++]=0; dat[t++]= 1; dat[t++]=0;
  26.   dat[t++]=0; dat[t++]=-1; dat[t++]=0;
  27.  
  28.   for( t=0, j=0; j<height-3; j++ )
  29.   for(      i=0; i<width-1; i++ )
  30.   {
  31.     idx[t++] = (j  )*width + i  ;
  32.     idx[t++] = (j+1)*width + i+1;
  33.     idx[t++] = (j  )*width + i+1;
  34.     idx[t++] = (j  )*width + i  ;
  35.     idx[t++] = (j+1)*width + i  ;
  36.     idx[t++] = (j+1)*width + i+1;
  37.   }
  38.   for( i=0; i<width-1; i++ )
  39.   {
  40.     idx[t++] = (height-2)*width;
  41.     idx[t++] = i;
  42.     idx[t++] = i+1;
  43.     idx[t++] = (height-2)*width+1;
  44.     idx[t++] = (height-3)*width + i+1;
  45.     idx[t++] = (height-3)*width + i;
  46.   }
  47.  
  48.   glEnableClientState(GL_VERTEX_ARRAY);
  49.   glEnableClientState(GL_NORMAL_ARRAY);
  50.   glVertexPointer(3,GL_FLOAT,0,dat);
  51.   glNormalPointer(GL_FLOAT,0,dat);
  52.   glDrawElements(GL_TRIANGLES, ntri*3, GL_UNSIGNED_INT, idx );
  53.   glDisableClientState(GL_VERTEX_ARRAY);
  54.   glDisableClientState(GL_NORMAL_ARRAY);
  55.  
  56.   free(idx);
  57.   free(dat);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement