selfspherer.c

来自「opengl source code download」· C语言 代码 · 共 91 行

C
91
字号
#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(5,5,(unsigned char)(5+7*(i+1)));
		   glVertex3fv(point[i+1][j]);
           glColor3ub(5,5,(unsigned char)(5+7*(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)
{
	float rotx=60.f,pi=3.1415926f;

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluLookAt(0.f,sin(rotx*pi/180.),cos(rotx*pi/180.),0.f,0.f,0.f,0.f,1.f,0.f);
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glRotatef(rotx,1.0f,0.f,0.f);
    fillsphere(DIVISION_NUM,DIVISION_NUM-1,sphere);

    glFlush();
}

void main(void)
{
	myInit();
	auxReshapeFunc(myReshape);
	auxMainLoop(myDisplay);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?