[OpenGL] OpenGL Study 0 일차


광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject [OpenGL] OpenGL Study 0 일차

최종수정일 : 2011.08.08

안녕하세요~^^

OpenGL 2D 에서 사각형 그리기 


by 퓨림노

글을 작성하겠습니다.

#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(); 





2012.09.21 Update

void ChangeSize( GLsizei w, GLsizei h ) 
{
	if( h==0 )
		h = 1;
	
	glViewport( 0,0, w/2, h/2 );
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity ();

	if( w<=h ){
		glOrtho( 0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0 );
	}else
		glOrtho( 0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0 );

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

에서 glViewport() 의 w,h 를 1/2 를 해주었을 경우에 다음과 같은 결과가 나온다.
[실행결과]


결과는 viewport 가 1/4 로 줄어들고 (좌하) 쪽에서 view 를 보여주고 있다. 

Viewport 의 개념이 똑바로 들어갔으면 좋겠다.

자세한건 책보고
뒤에 나온다네요!! 


'Library > openGL' 카테고리의 다른 글

[OpenGL] OpenGL Study 1 일차  (0) 2011.08.09
[openGL] offset  (0) 2011.08.09
[OpenGL] OpenGL Study 0 일차  (0) 2011.08.08
[OpenGL] OpenGL Study 0 일차  (0) 2011.08.08
[OpenGL ] OpenGL 3D Draw Ellipse!,, SuperEllipse!  (0) 2010.10.13

댓글

Designed by JB FACTORY