'오픈지엘'에 해당되는 글 4건

  1. 2008.03.18 [긴급] Open GL 프로그래밍 하실 수 있으신분! 도와주세요~ (6)
2008.03.18 00:54

[긴급] Open GL 프로그래밍 하실 수 있으신분! 도와주세요~



개강하고 과제에 쌓여지내느라~
오늘도 밤을 새고 있습니다. ㅠ_ㅠ

괜시리 연계전공으로 컴퓨터 과목을 들어서~

시작하자 마자 과제라니.. 너무 하십니다. 교수님들 ㅠ_ㅠ

(저는 교수님 수업만 듣는게 아니라구욧!  - 출처- 골방환상곡)

누군가 도와주실 분 !!!?? ^-^

간단한 그래픽스프로그래밍 입니다.
설명까지 해주신다면 금상첨화!  저는 지금 용어조차 모르기 때문에.. 도대체 콜백 함수가 뭡니까? 하 참네.

----------------------------------------

 
1.화면의 가운데에 위치한 사각형을 그리는 display callback 함수 mydisplay를 작성하시오.
v  제한사항
1) framebufferDouble buffering mode로 설정
2) 사각형은 4개의 verticesGL_TRIANGLE_STRIP 방식으로 구성

수업자료 중 “animating a display – double buffering “ source code 참조

2. glutIdleFunc(myidle)를 이용하고 Idle callback 함수 myidle() 등록/ 작성(빈함수)하시오.
3. myidle()이 호출될 때마다 도형의 좌표가 바뀌도록 코드를 작성하시오.
a.x 또는 y좌표가 계속 증가 또는 감소 하다가 경계에 도달하면 반대방향으로 움직여서 viewport 내를 돌아다니도록 작성
b.glVertex3f() 안에 들어가는 x, y 좌표 및 사각형의 크기를 나타내는 s_sizeglobal variables를 이용
c.x, y 좌표는 myidle()에서 계속 update 되도록 하고 마지막에 glutPostRedisplay() 명령어를 활용
4.이번에는 본인 임의로 도형을 설정하여 Idle callback이 아닌 마우스 왼쪽 버튼이 클릭된 상태에서 움직일 때 따라 움직이도록 작성
v 제한사항 
1) 도형의 움직임은 마우스 위치를 따라다니거나 랜덤하게 움직일 수 있음
2) 또는 마우스 움직임에 따라 회전할 수 있음.


--------------------회전하는 사각형------
 

#include <glut.h>

#include <stdlib.h>

#include <math.h>

#define DEGREES_TO_RADIANS 3.14159/180.0

static GLfloat spin = 0.0;

GLfloat x, y;

int singleb, doubleb;

void square()

{

    glBegin(GL_QUADS);

       glVertex2f(x,y);

       glVertex2f(-y,x);

       glVertex2f(-x,-y);

       glVertex2f(y,-x);

    glEnd();

}

void displayd()

{

    glClear (GL_COLOR_BUFFER_BIT);

    square();

    glutSwapBuffers ();

}

void displays()

{

    glClear (GL_COLOR_BUFFER_BIT);

    square();

    glFlush();

}

void spinDisplay ()

{

    spin = spin + 2.0;

    if (spin > 360.0) spin = spin - 360.0;

    x= 25.0*cos(DEGREES_TO_RADIANS * spin);

    y= 25.0*sin(DEGREES_TO_RADIANS * spin);

    glutSetWindow(singleb);

    glutPostRedisplay();

    glutSetWindow(doubleb);

    glutPostRedisplay();

}

void myinit ()

{

    glClearColor (0.0, 0.0, 0.0, 1.0);

    glColor3f (1.0, 1.0, 1.0);

    glShadeModel (GL_FLAT);

}

void mouse(int btn, int state, int x, int y)

{

     if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)

         glutIdleFunc(spinDisplay);

     if(btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN)

   glutIdleFunc(NULL);

}

void myReshape(int w, int h)

{

    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    if (w <= h)

    glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w,

        50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);

    else

    glOrtho (-50.0*(GLfloat)w/(GLfloat)h,

        50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity ();

}

/*  main loop

 *  open window with initial window size, title bar,

 *  RGBA display mode, and handle input events

 */

int main(int argc, char** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

    singleb=glutCreateWindow("single buffered");

   

  myinit ();

    glutDisplayFunc(displays);

    glutReshapeFunc (myReshape);

    glutIdleFunc (spinDisplay);

    glutMouseFunc (mouse);

    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);

    doubleb=glutCreateWindow("double buffered");

   

  myinit ();

    glutDisplayFunc(displayd);

    glutReshapeFunc (myReshape);

    glutIdleFunc (spinDisplay);

    glutMouseFunc (mouse);

    glutMainLoop();

}

-------------- 마우스 쫓아다니는 코드?소스?--------------------
 

#include <glut.h>

GLsizei wh = 500, ww = 500; /* initial window size */

GLfloat size = 3.0;   /* half side length of square */

void drawSquare(int x, int y)

{

   y=wh-y;

   glColor3ub( (char) rand()%256, (char) rand()%256, (char) rand()%256);

   glBegin(GL_POLYGON);

      glVertex2f(x+size, y+size);

      glVertex2f(x-size, y+size);

      glVertex2f(x-size, y-size);

      glVertex2f(x+size, y-size);

   glEnd();

   glFlush();

}

void myReshape(GLsizei w, GLsizei h)

{

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    glViewport(0,0,w,h);

    glClear(GL_COLOR_BUFFER_BIT);

    glFlush();

    ww = w;

    wh = h;

}

void myinit()

{

    glClearColor (0.0, 0.0, 0.0, 1.0);

    glViewport(0,0,ww,wh);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glOrtho(0.0, (GLdouble) ww , 0.0, (GLdouble) wh , -1.0, 1.0);

    glClearColor (0.0, 0.0, 0.0, 1.0);

    glClear(GL_COLOR_BUFFER_BIT);

    glFlush();

}

void mouse(int btn, int state, int x, int y)

{

    if(btn==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)   exit(0);

}

void display()

{}

int main(int argc, char** argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

    glutCreateWindow("square");

    myinit ();

    glutReshapeFunc (myReshape);

    glutMouseFunc (mouse);

    glutMotionFunc(drawSquare);

    glutDisplayFunc(display);

    glutMainLoop();

}

Trackback 0 Comment 6