void drawsphere()
{
#define PI 3.14159265358979323846f
int width = 32;
int height = 16;
float theta, phi, *dat;
int i, j, t, ntri, nvec, *idx;
nvec = (height-2)* width+2;
ntri = (height-2)*(width-1)*2;
dat = (float*) malloc( nvec * 3*sizeof(float) );
idx = (int*) malloc( ntri * 3*sizeof(int) );
for( t=0, j=1; j<height-1; j++ )
for( i=0; i<width; i++ )
{
theta = float(j)/(height-1) * PI;
phi = float(i)/(width-1 ) * PI*2;
dat[t++] = sinf(theta) * cosf(phi);
dat[t++] = cosf(theta);
dat[t++] = -sinf(theta) * sinf(phi);
}
dat[t++]=0; dat[t++]= 1; dat[t++]=0;
dat[t++]=0; dat[t++]=-1; dat[t++]=0;
for( t=0, j=0; j<height-3; j++ )
for( i=0; i<width-1; i++ )
{
idx[t++] = (j )*width + i ;
idx[t++] = (j+1)*width + i+1;
idx[t++] = (j )*width + i+1;
idx[t++] = (j )*width + i ;
idx[t++] = (j+1)*width + i ;
idx[t++] = (j+1)*width + i+1;
}
for( i=0; i<width-1; i++ )
{
idx[t++] = (height-2)*width;
idx[t++] = i;
idx[t++] = i+1;
idx[t++] = (height-2)*width+1;
idx[t++] = (height-3)*width + i+1;
idx[t++] = (height-3)*width + i;
}
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3,GL_FLOAT,0,dat);
glNormalPointer(GL_FLOAT,0,dat);
glDrawElements(GL_TRIANGLES, ntri*3, GL_UNSIGNED_INT, idx );
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
free(idx);
free(dat);
}
Comments
0 B
|👍
/👎
0 B
|0 👍
/0 👎
0 B
|0 👍
/0 👎