윈도우창 나오는 그림들 출처는 네이버ID newpog 님의 블로그.
http://blog.naver.com/newpog/10002178727
(여기서 뷰포트에 대한 지식도 참고했음)
메인함수는 다음의 함수순으로 코딩.
void main( int argc, char** argv) { void glutInit(int *argcp, char **argv); // GLUT 라이브러리를 초기화 한 후 윈도우 시스템과 세션을 연다. void glutInitDisplayMode(unsigned int mode); // 생성될 윈도우의 디스플레이 모드를 설정 void glutInitWindowSize(int width, int height); // 윈도우 크기 설정 void glutCreateWindow(const char *tilte); // 새로운 윈도우 생성 void glutDisplayFunc(void (*func)(void)); // 화면 디스플레이 이벤트가 발생 했을 시 실행되는 함수를 설정 void glutReshapeFunc(void (*func)(int, int)); /* 윈도우 크기가 변경되었을 시 발생 했을 시 실행되는 함수를 설정 여기 중간에 렌더링 상태를 설정하는 내용을 함수로 만들어 호출한다. 내용에는 glClearColor 같은 지울 색을 설정하는 함수콜.*/ glutMainLoop(); // 이벤트 루프로 진입하라는 함수 }
glut 는 윈도우 운영체제의 좌표계를 따라 좌상단이 0,0 이며, 아래로 갈 수록 y좌표값은 양의 방향으로 증가 한다.
그리고 glutDisplayFunc 에 전달한 함수에서는 그리기 위한 코드를 정의 한다.
/*(실행결과가 위의 삼각형이라고 착각하면 ㄴㄴ) */ glClear(GL_COLOR_BUFFER_BIT); /* glClearColor()를 통해 설정한 색으로 지운다. 인자에는 어떤 버퍼를 지울지 결정하는데, 여기에서 전달된 것은 색상버퍼이다. 즉 픽셀들의 색상정보를 가진 버퍼인데, 버퍼를 지운다는 것은 앞으로 그려질 화면을 지운다는 것과 비슷하다. 결국 효과는 2차원 화면을 설정한 색으로 지우는 것이 되겠다.*/ glEnable(GL_LINE_STIPPLE); /*GL_LINE_STIPPLE에 해당하는 기능을 수행하게 된다. 물론 추가적인 함수콜이 필요한 기능들도 있다.*/ glLineWidth(5); /*선의 두께, 수치가 클수록 두꺼워짐*/ glLineStipple(10,0xcccc); /* LINE_STIPPLE 패턴을 정의 */ glBegin(GL_LINE_LOOP);/*glbegin에서 glend로 그리고자 하는 대상 (primitive)하나 이상을 구성하는 vertex들을 하나로 묶는다.*/ glColor3f(1,0,0); // 그릴 때 쓰이는 색깔을 정의 한다. glVertex2f(-50,-50); glColor3f(0,1,0); /* 다른 값으로 호출함으로써 그릴 색깔을 갱신하고 있다. 지금은 glBegin에서 알 수 있는 바와 같이 선을 그리고 있는데, 이렇게 설정하면 점단위로 색이 매겨지고 점과 점을 있는 선의 색은 스펙트럼 같이 연속적으로 변화한다*/ glVertex2f(0,-50); glColor3f(0,0,1); glVertex2f(0,0); glColor3f(1,0,0); glVertex2f(-50,0); glEnd(); glDisable(GL_LINE_STIPPLE); glFlush(); /*앞서 제출한 GL 명령들을 유한 시간내에 실행하도록 강제한다.*/나머지코드는 제시 하지 않음
추가로 안나온 몇몇 함수에 대한 설명
glPointSize(5); /*그릴 점의 크기를 조정한다. 클수록 두꺼운*/
glLineWidth(5); /*그릴 선의 두께를 조정한다. 클수록 두꺼운*/
glPolygonMode(GL_FRONT_BACK,GL_LINE); /*그릴 도형 내부를 색칠하지않고 다각형으로 간주한다. 표현할 픽셀을 선으로 이어 그린다.*/
void glClear( |
GLbitfield | mask) ; |
GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL_STENSIL_BUFFER_BIT
|
void glMatrixMode( |
GLenum | mode) ; |
인자는
GL_MODELVIEW,
GL_PROJECTION
, GL_TEXTUREㅡ, GL_COLOR
( ARB_imaging
extension 지원시)
초기값은
GL_MODELVIEW
. 인자는 각기 특정 매트릭스 스택을 가리킨다.void glViewport( |
GLint | x, |
GLint | y, | |
GLsizei | width, | |
GLsizei | height) ; |
normalized device coordinates -> windows coordinate 의 아핀변환을 특정한다. (xnd,ynd)
-> (xw,yw)
)
원래의 뷰포트 설정을 바꾸게 되면 그에 비례하여 그려지는 모양도 늘어나거나 줄어든다.
아래 그림은 제일 위 그림에 적용된 뷰포트 사이즈 300,300 이 150,150 으로 바뀌고 나머지는 그대로 설정했을 때의 것이다.
void glLoadIdentity( |
void) ; |
아 귀찮아 ㄷㄷ;
|
GLdouble | left, |
GLdouble | right, | |
GLdouble | bottom, | |
GLdouble | top, | |
GLdouble | nearVal, | |
GLdouble | farVal) ; |
glOrtho
describes a transformation that produces a parallel projection. The current matrix (see glMatrixMode) is multiplied by this matrix and the result replaces the current matrix, as if glMultMatrix were called with the ( 왼 쪽 ) matrix as its argument:
Typically, the matrix mode is GL_PROJECTION
, and (left,bottom,−nearVal)
and (right,top,−nearVal)
specify the points on the near clipping plane that are mapped to the lower left and upper right corners of the window, respectively, assuming that the eye is located at (0, 0, 0). −farVal specifies the location of the far clipping plane. Both nearVal
and farVal
can be either positive or negative. Use glPushMatrix and glPopMatrix to save and restore the current matrix stack.
(간단하게 (left,bottom,-nearVal)이 윈도우의 좌하단 (가까운 평면), (right,top,-nearVal)이 윈도우의 우상단 (가까운 평면) 의 좌표가 되도록 윈도우에 좌표를 매핑한다는 뜻? 이 때 좌표는 ModelView에서 나오는 최종 좌표이고.. 해당좌표를 윈도우의 어디에 매핑 하는 것이 Projection 이라고 생각하면.. ㅇㅇ?)
'그래픽스 관련' 카테고리의 다른 글
(GLUT)마우스모션처리 함수에서 파라미터로 받아온 좌표 변환하기. (0) | 2009.10.15 |
---|---|
(GLUT) 특수키처리 (0) | 2009.10.08 |
Shear matrix (0) | 2009.09.19 |
Image plane 이란? (0) | 2009.09.10 |
High Dynamic Range Rendering, HDRR (0) | 2009.09.01 |