⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selfsphere.c

📁 opengl source code download
💻 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 + -