저번시간에 이어 소스를 조금 추가해보죠!


#include <GL/glew.h>
#include <GL/freeglut.h>
#include <iostream>

void renderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(1.0, 0.0, 0.0, 1.0); //clear red

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(50, 50);
    glutInitWindowSize(800, 600);
    glutCreateWindow("OpenGL First Window");

    glewInit();
    if (glewIsSupported("GL_VERSION_3_3"))
    {
        std::cout << " GLEW Version is 3.3\n ";
    }
    else
    {
        std::cout << "GLEW 3.3 not supported\n ";
    }

    glEnable(GL_DEPTH_TEST);

    // register callbacks
    glutDisplayFunc(renderScene);

    glutMainLoop();

    return 0;
}

크게 glut 디스플레이 루틴에 장면을 렌더링하는 콜백함수를 추가하였고 glew를 초기화하는 부분과 그래픽카드의 OpenGL 지원을 체크하는 조건문을 추가하였습니다.


위에서 등장한 함수들에 대한 설명입니다.


glutInit:

GLUT 라이브러리 초기화 함수 입니다.


glutInitDisplayMode:

OpenGL 의 디스플레이 모드를 지정합니다. 이 함수는 unsigned int 형을 인자로 받으며 여러 옵션을 지정하기 위해 bit OR 연산자로 묶을 수 있습니다.


GLUT_DEPTH 는 OpenGL 이 깊이 버퍼를 사용하도록 지시합니다. 깊이버퍼는 두 개 이상의 오브젝트가 겹쳤을 때 어떤 색을 출력할지를 결정하는데 사용됩니다.

GLUT_DOUBLE 은 OpenGL 이 더블버퍼링 시스템을 사용하도록 지정합니다.

GLUT_RGBA 는 32비트 Framebuffer 를 8비트의 RGBA 채널에 할당합니다.


glutInitWindowPosition:

윈도우 창의 위치를 픽셀 단위로 지정합니다.


glutInitWindowSize:

윈도우 창의 너비와 높이를 픽셀 단위로 지정합니다.


glutCreateWindow:

윈도우를 생성합니다. 인자로 윈도우 창의 이름을 지정하며 윈도우 ID 값을 반환합니다.


glewInit:

GLEW 초기화 함수입니다.


glewIsSupported:

인자로 전달한 OpenGL 버전이 GLEW 에서 지원할 수 있는 버전인지 확인합니다. 


glutMainLoop:

GLUT processing loop를 시작합니다.


glClear:

OpenGL이 인자로 전달된 버퍼를 비우도록 합니다. 위 코드에서는 GL_COLOR_BUFFER_BIT와 GL_DEPTH_BUFFER_BIT 를 지정하였습니다.


glClearColor:

색상버퍼를 인자값으로 초기화 합니다. 인자순서는 각각 R, G, B, A 입니다.


glutSwapBuffers:

더블 버퍼링 시스템에서 백버퍼와 프론트 버퍼를 바꿉니다.



간단하네요 :)


다음은 이번 강의 원문 링크입니다.

http://in2gpu.com/2014/10/17/creating-opengl-window/



======================================================

추가합니다.


코드를 실행시켜보면 바로 빨간 배경화면이 뜨는게 아니고 검은화면이 뜰겁니다. 그리고 마우스클릭이나 창을 움직이면 빨간배경화면으로 바뀌네요. 왜그런가 검색을 해보니 함수 호출 순서가 잘못되었네요. 먼저 glClearColor로 빨간색으로 배경색을 지정해주고 glClear로 색을 칠합니다. 다음 링크를 참조해 주세요.

http://stackoverflow.com/questions/2898503/background-colour-in-opengl

수정:
   glClearColor(1.0, 0.0, 0.0, 1.0); //clear red
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


'잡것 > OpenGL' 카테고리의 다른 글

[OpenGL 02] 셰이더를 적용해 봅시다.  (0) 2016.10.07
[OpenGL 00] OpenGL을 설치해봅시다.  (0) 2016.10.02
Posted by nfyfamraa
,