|
|
本来是打算把八面体分割成球体的 但是却成了这个样子 ,图片在附件里~~
#include <Windows.h>
#include <GL/glut.h>
#include <math.h>
int i,j;
void DrawTriangle(float *v1, float *v2, float *v3)
{
glBegin(GL_TRIANGLES);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v3);
glEnd();
}
void SubDivide(float *v1, float *v2, float *v3, int count)
{
if(count<=0)
{
DrawTriangle(v1,v2,v3);
return;
}
else
{
GLfloat v12[3],v23[3],v31[3];
GLint i;
for(i = 0; i < 3; i++){
v12 = (v1+v2)/2;
v23 = (v2+v3)/2;
v31 = (v3+v1)/2;
}
SubDivide(v1,v12,v31,count-1);
SubDivide(v2,v23,v12,count-1);
SubDivide(v3,v31,v23,count-1);
SubDivide(v12,v23,v31,count-1);
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 0.0);
glPolygonMode(GL_FRONT,GL_LINE);
glPolygonMode(GL_BACK,GL_LINE);
glLoadIdentity();
gluLookAt(3.0,3.0,10.0,0.0,0.0,0.0,0.0,1.0,0.0);
static float angle = 0.0f;
glRotatef(angle++, 1, 1, 0);
if(angle > 360.0f)
angle = 0.0f;
GLfloat r=2.8;
static GLfloat vdata[6][3] = {
{r,0.0,0.0},{-r,0.0,0.0},
{0.0,r,0.0},{0.0,-r,0.0},
{0.0,0.0,r},{0.0,0.0,-r}
};
static GLint tindices[8][3] = {
{2,4,0},{2,0,5},{2,5,1},{2,1,4},
{3,0,4},{3,5,0},{3,1,5},{3,4,1} };
glColor3f(0,0.4,0);
for (i = 0; i < 8; i++) {
SubDivide(&vdata[tindices[0]][0],
&vdata[tindices[1]][0],
&vdata[tindices[2]][0],r);
}
glFlush();
Sleep(30);
glutPostRedisplay();
}
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow(argv[0]);
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
} |
|