我要发帖 回复

正式会员

5

主题

27

积分

0

专家分

:

私信
发表时间 : 2009-12-9 16:28:52 | 浏览 : 1273    评论 : 0
我打算把8面体分割成球体的  但是确成了这个样子 未命名.jpg
代码是
#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;
}

最近VR访客

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-9-20 08:20 PM

返回顶部