Contents

Develop
2003.04.23 11:00

[c] OpenGL 임시로 여기 올림..

조회 수 10324 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include<stdlib.h>
#include<GL/glut.h>
#include<math.h>

typedef float point3[4];

point3 v[] = {
        {0.0, 0.0, 1.0}, {0.0, 0.942809, -0.33333},
        {-0.816497, -0.471405, -0.33333}, {0.816497, -0.471405, -0.333333}
};

static GLfloat theta[] = {0.0, 0.0, 0.0};
int n;
int mode;

void triangle(point3 a, point3 b, point3 c){
        if(mode==0) glBegin(GL_LINE_LOOP);
        else glBegin(GL_POLYGON);
                if (mode==1) glNormal3fv(a);
                if (mode==2) glNormal3fv(a);
                glVertex3fv(a);
                if (mode==2) glNormal3fv(b);
                glVertex3fv(b);
                if (mode==2) glNormal3fv(c);
                glVertex3fv(c);
        glEnd();
}

void normal(point3 p){
        //double sqrt();
        float d = 0.0;
        int i;

        for(i=0; i<3; i++) d += p[i] * p[i];
        d = sqrt(d);
        if(d>0.0) for(i=0; i<3; i++) p[i] /= d;
}

void divside_triangle(point3 a, point3 b, point3 c, int m){
        point3 v1, v2, v3;
        int j;
        
        if(m>0){
                for(j=0; j<3; j++) v1[j] = a[j] + b[j];
                normal(v1);
                for(j=0; j<3; j++) v2[j] = a[j] + c[j];
                normal(v2);
                for(j=0; j<3; j++) v3[j] = b[j] + c[j];
                normal(v3);
                divside_triangle(a, v1, v2, m-1);
                divside_triangle(c, v2, v3, m-1);
                divside_triangle(b, v3, v1, m-1);
                divside_triangle(v1, v3, v2, m-1);
        }
        else triangle(a, b, c);
}

void tetrahedron(int m){
        divside_triangle(v[0], v[1], v[2], m);
        divside_triangle(v[3], v[2], v[1], m);
        divside_triangle(v[0], v[3], v[1], m);
        divside_triangle(v[0], v[2], v[3], m);
}

void display(void){
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        mode = 0;
        tetrahedron(n);
        mode = 1;
        glTranslatef(-2.0, 0.0, 0.0);
        tetrahedron(n);
        mode = 2;
        glTranslatef(4.0, 0.0, 0.0);
        tetrahedron(n);

        glFlush();
}

void myReshape(int w, int h){
        glViewport(0, 0, w, h);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        if(w<=h) glOrtho(-4.0, 4.0, -4.0 * (GLfloat)h / (GLfloat)w, 
                4.0 * (GLfloat)h / (GLfloat)w, -10.0, 10.0);
        else glOrtho(-4.0 * (GLfloat)w / (GLfloat)h, 
                4.0 * (GLfloat)w / (GLfloat)h, -4.0, 4.0, -10.0, 10.0);
        glMatrixMode(GL_MODELVIEW);
        display();
}

void myinit(){
        GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
        GLfloat mat_diffuse[] = {1.0, 1.0, 1.0, 1.0};
        GLfloat mat_ambient[] = {1.0, 1.0, 1.0, 1.0};
        GLfloat mat_shininess = {100.0};
        GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0};
        GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0};
        GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0};

        glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
        glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
        glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

        glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
        glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
        glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
        glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);

        glShadeModel(GL_SMOOTH);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_DEPTH_TEST);
        glClearColor(1.0, 1.0, 1.0, 1.0);
        glColor3f(0.0, 0.0, 0.0);
}

void main(int argc, char **argv){
        //n = atoi(argv[1]);
        n = 5;

        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
        glutInitWindowSize(500, 500);
        glutCreateWindow("sphere");
        myinit();
        glutReshapeFunc(myReshape);
        glutDisplayFunc(display);
        glutMainLoop();
}


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1173 System/OS 해커스랩 깨기.. 후후.. ㅋㅋ file hooni 2013.04.23 18410
1172 Etc 플라스터(Plaster) 수업 내용 secret hooni 2016.05.24 0
1171 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16384
1170 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21243
1169 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16484
1168 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 10954
1167 Etc 티스토리 테이블 html,css 구문 hooni 2013.11.03 15941
1166 System/OS 콘솔에서 패스워드 걸린 zip 압축하는 명령 hooni 2018.03.02 927
1165 System/OS 컴파일러 수업 자료(교재 : 컴파일러 입문) file hooni 2003.04.23 21965
1164 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 724
1163 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 956
1162 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98