* OpenGL C++ 프로젝트의 기본 코드
OpenGL 초기 버전의 기본코드이며, main 내에서 RenderScene, Init, ChangeSize를 각각의 맞는 함수에서 불러옵니다.
다음 코드박스에 해당 하는 부분을 순서대로 입력하시면 됩니다.
#include <Windows.h> // Master include file for Windows Application
#include <gl/GL.h> // OpenGL Core Library
#include <gl/GLU.h> // OpenGL Utility Library
#include <gl/glut.h> // OpenGL Utility Toolkit
1. Init (네이밍 수정 가능)
// Setup the rendering state
void Init(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set RGBA to 1, 1, 1, 1
}
Init
이란 메서드명은 사용자가임의로 수정이 가능
하며, 관습적으로 Initiating 을 목적으로 만든 메서드입니다.
2. ChangeSize (네이밍 수정 가능)
// Called by GLUT library when the window has changed size
void ChangeSize(int width, int height)
{
GLfloat aspectRatio;
// Prevent a divide by zero
if (height == 0) height = 1;
glViewport(0, 0, width, height);
// Set Viewport to window dimensions
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspectRatio = (GLfloat)width / (GLfloat)height; // Screen width/height
if (width <= height)
{
gluOrtho2D(-2.0, 2.0, -2.0 * (float)height / (float)width, 2.0 * (float)height / (float)width);
}
else
{
gluOrtho2D(-2.0 * (float)width / (float)height, 2.0 * (float)width / (float)height, -2.0, 2.0);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
main
메서드에서glutReshapeFunc
의 파라미터로 호출되는 메서드입니다.- 윈도우의 크기가 변할 때
glutReshpeFunc
메서드가 호출됩니다. - 해당 메서드에서 width, height, aspectRatio(화면 가로비율/세로비율)을 받고 이를 통해 카메라의 위치를 조정합니다.
- glOrtho 부분이 카메라의 위치를 조정하는 부분인데 다른 포스팅에서 추가로 설명하겠습니다. ( 카메라 모드 설명 )
- glMatrixMode 와 glLoadIdentity 는 Matrix 곱을 하는 부분인데, 이 부분도 다른 포스팅에서 추가로 설명하겠습니다. ( Multiplex matrix )
3. RenderScene
void RenderScene()
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 0, 0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(0, -0.5);
glVertex2f(0, 0);
glVertex2f(-0.5, 0);
glEnd();
// Flush drawing commands
glFlush();
}
main
메서드에서glutDisplayFunc
의 파라미터로 호출되는 메서드입니다.glutMainLoop
로 인해 매 프레임마다 호출됩니다.- glClear 2. Init 메서드에서
glClearColor
에 입력한 생상으로 창의 색을 흰색으로 갱신합니다. glColor3f
는 RGB 값을 1, 0, 0 으로 설정한 뒤 Color Buffer에 보관합니다.glBegin
과glEnd
사이에서 Vertex의 위치가 (-50, -50), (0, -50), (0, 0), (-50, 0)인 GL_POLYGON 형태로 그립니다.
4. main 메서드
// Main program entry point
int main(int argc, char* argv[])
{
glutInit(&argc, argv); // Initialize GLUT Library
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Set Display Mode
glutInitWindowSize(600, 600); // width 600, height 600
glutCreateWindow("GL1"); // Create new Window App "GL1"
glutReshapeFunc(ChangeSize);
Init();
glutMainLoop(); // GLUT, GL Routine
return 0;
}
- 프로그램 동작시 main으로 동작하는 부분이며, glutMainLoop 로 화면을 그리기전에 glut 와 관련된 메서드로 library 를 초기화합니다.