#include <windows.h>
#include <gl/gl.h>
#include <gl/GLU.h>
#include <gl/glut.h>
// Render
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f( 1.0f, 0.0f, 0.0f );
glRectf( 100.0f, 150.0f, 150.0f, 100.0f );
glFlush();
}
// Setup
void SetupRC()
{
glClearColor( 0.0f, 0.0f, 1.0f, 1.0f );
}
void ChangeSize( GLsizei w, GLsizei h )
{
// exception
if( h == 0 ) h = 1;
glViewport( 0, 0, w, h );
glMatrixMode(GL_PROJECTION); // 3D -> 2D
glLoadIdentity();
// 클리핑공간설정( left, right, bottom, top, near, far)
if( w<=h )
glOrtho( 0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0 );
else
glOrtho( 0.0f, 250.0f*h/w, 0.0f, 250.0f, 1.0, -1.0 );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutCreateWindow( "GLRect" );
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
SetupRC();
glutMainLoop();
}
[실행결과]
사각형 그리기
glColor3f( 1.0f, 0.0f, 0.0f );
glRectf( 100.0f, 150.0f, 150.0f, 100.0f );
윈도우 크기 조절하기
...크기 조절함 =ㅅ=!
뷰포트(viewport) 와 클리핑 영역(clipping volume) 설정하기
- 윈도우의 크기가 변할 때마다 뷰포트와 클리핑 공간을 변경된 크기에 맞게 재정의해야 함
뷰포트(vieport) 설정하기
void glViewport( GLint x, GLint y, GLsizei width, GLsizei height );
- x,y 는 윈도우 안에 위치하는 뷰포트의
왼쪽 아래 모서리(openGL상의 ,xyz 축을 생각하라!)의 좌표값을 나타냄
클리핑 공간(clipping volume) 정의하기
- 클리핑 공간을 재정의하여 종횡비(aspect ratio)를 정사각형으로 유지하도록 하는 것
-
종횡비란, 화면의 가로 방향에 대한 단위(unit) 길이를 나타내는 픽셀 수에 대한 세로 방향의 단위 길이를 나타내는 픽셀 수의 비율
지금 예제에서는 클리핑 공간에
직교 투영(orthographic projection)을 사용함
// 좌표계 재설정
glMatrixMode(GL_PROJECTION); // 3D -> 2D
glLoadIdentity();
void
glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();