이번 시간에는 오픈지엘 라이브러리를 이용하여 간단하게 윈도우 창을 띄어보겠다.
01. 윈도우 창 만들기
윈도우 창을 띄우기 위해서는 윈도우 창을 생성해야 한다.
OpenGL에서는 The OpenGL Utility Toolkit (GLUT)을 사용하여 윈도우 창을 만든다.
#define WIDTH 800
#define HEIGHT 600
void main(int argc, char** argv)
{
// 윈도우 생성
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(0, 0);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("Make Window");
....
}
오픈지엘에서 윈도우를 생성하는 과정은 다음과 같다.
디스플레이 모드 종류는 다음과 같다.
GLUT_RGBA | RGBA 모드 창 |
GLUT_RGB | GLUT_RGBA 의 별칭 |
GLUT_INDEX | 컬러 인덱스 모드 창 |
GLUT_SINGLE | 단일 버퍼 창 |
GLUT_DOUBLE | 이중 버퍼 창 |
GLUT_ACCUM | 누적 버퍼가 있는 창 |
GLUT_ALPHA | 색상 버퍼에 대한 알파 구성 요소가 있는 창 |
GLUT_DEPTH | 깊이 버퍼가 있는 창 |
GLUT_STENCIL | 스텐실 버퍼가 있는 창 |
GLUT_MULTISAMPLE | 멀티샘플링을 지원하는 창 |
GLUT_STEREO | 스테레오 창 |
GLUT_LUMINANCE | '휘도' 색상 모델을 사용하여 창 |
glutInitDisplayMode()로 사용하는 대표적인 모드는 GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH가 있다.
02. 화면 렌더링 콜벡 함수 등록
윈도우 창을 생성했으니 윈도우 창의 띄어지는 동안 화면을 렌더링 해야한다.
GLvoid Render(GLvoid);
void main(int argc, char** argv)
{
...
glutDisplayFunc(Render);
glutMainLoop();
}
화면을 렌더링하는 과정은 다음과 같다.
glutDisplayFunc 함수는 콜벡 함수 중 디스플레이 콜벡 호출 함수로 디스플레이 상 변경이 있을 시 함수가 호출된다.
콜벡 함수가 호출되는 과정은 다음과 같다.
콜벡 함수는 glutDisplayFunc 함수 이외에 키보드 입력 콜벡 함수, 마우스 입력 콜벡 함수 등등 다양하다. 물론 게임을 만들기 위해서 입력 콜벡 함수를 필요하니 다음 시간에 콜벡 함수를 소개하는 시간을 가지겠다.
03. 화면 렌더링 콜벡 함수 정의
콜벡 함수를 등록 했으니 Render 함수를 정의 해야 한다.
GLvoid Render()
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glutSwapBuffers();
}
Render() 함수에서 동작하는 일은 다음과 같다.
그래픽 파이프라인에 관해 공부하지 않으면 전면 버퍼와 후면 버퍼를 교체하는 것이 무슨 의미인지 모를 수 있을 것이다.
하나의 프레임 버퍼를 사용할 경우 화면 깜빡임 현상이 발생할 수 있어 그래픽 어댑터는 전면 버퍼와 후면 버퍼를 사용하여 2개의 버퍼의 Swap을 통해 이 문제를 해결한다.
04. 화면 렌더링
이제 오픈지엘을 이용하여 윈도우 창을 띄울 수 있다.
전체 코드는 다음과 같다.
#include <iostream>
#include <gl/glew.h>
#include <gl/freeglut.h>
#include <gl/freeglut_ext.h>
#pragma comment(lib, "glew32.lib")
#pragma comment(lib, "freeglut.lib")
#define _CRT_SECURE_NO_WARNINGS
#define WIDTH 800
#define HEIGHT 600
using namespace std;
GLvoid Render(GLvoid);
void main(int argc, char** argv)
{
// 윈도우 생성
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(0, 0);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("Make Window");
// 화면 렌더링
glutDisplayFunc(Render);
glutMainLoop();
}
GLvoid Render()
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glutSwapBuffers();
}
'프로그래밍 > OpenGL' 카테고리의 다른 글
[OpenGL] 오픈지엘 그래픽스 파이프라인 (0) | 2024.02.04 |
---|---|
[OpenGL] 오픈지엘 콜벡 함수 (0) | 2024.02.03 |
[OpenGL] 오픈지엘 Visual Studio 환경 세팅 (0) | 2024.02.01 |
[OpenGL] 오픈지엘 다운로드 및 설치 (1) | 2024.02.01 |
[OpenGL] 오픈지엘 소개 (0) | 2024.02.01 |