📄 selfsphere.c
字号:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glaux.h>
#include <GL/glu.h>
#include <math.h>
#include <float.h>
#define DIVISION_NUM 36
void CALLBACK myReshape(GLsizei w,GLsizei h);
void CALLBACK myDisplay(void);
float sphere[DIVISION_NUM][DIVISION_NUM][3];
void initsphere(float rad,int nlat,int nlong,float point[][DIVISION_NUM][3])
{
int i,j;
double pi=3.1415926,inclat,heigh,dval,magnitude;
for(i=0;i<nlat;i++)
{
inclat=pi/(nlat-1)*i-pi/2.;
magnitude=cos(inclat)*rad;
heigh=sin(inclat)*rad;
for(j=0;j<nlong+1;j++)
{
point[i][j][1]=(float)heigh;
dval=cos(2.*pi*j/nlong)*magnitude;
point[i][j][0]=(float)dval;
dval=sin(2.*pi*j/nlong)*magnitude;
point[i][j][2]=(float)dval;
}
}
}
void fillsphere(int nlat,int nlong,float point[][DIVISION_NUM][3])
{
int i,j;
for(i=0;i<nlat;i++) {
glBegin(GL_QUAD_STRIP);
for(j=0;j<nlong+1;j++)
{
glColor3ub(35,35,(unsigned char)(35+6*(i+1)));
glVertex3fv(point[i+1][j]);
glColor3ub(35,35,(unsigned char)(35+6*(i+0)));
glVertex3fv(point[i][j]);
} // end j
glEnd();
} // end i
}
void CALLBACK myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
}
void myInit()
{
auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
auxInitPosition (0, 0, 500, 500);
auxInitWindow ("sphere");
glClearColor(0.f,0.f,0.f,0.f);
// glShadeModel(GL_FLAT);
initsphere(.6f,DIVISION_NUM,DIVISION_NUM-1,sphere);
}
void CALLBACK myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
fillsphere(DIVISION_NUM,DIVISION_NUM-1,sphere);
glFlush();
}
void main(void)
{
myInit();
auxReshapeFunc(myReshape);
auxMainLoop(myDisplay);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -