광고 한번만 클릭 부탁드립니다^^
위에 냐옹이 말구~ 위에 배너요~^_^/
포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^
Subject : [OpenGL] OpenGL Study 1 일차
최종수정일 : 2011.08.09
안녕하세요~^^
오늘은 3D 로 넘어가보려고 하는데 ...
그전에 Single / double buffer 에 대해서 살짝 보도록 하겠습니다.
알고 있어서 정리 안하려구 했는데 해야겠네요 ㅎ
by 퓨림노
글을 작성하겠습니다.
음 풀소스부터 고고싱 ㅎ
#include <windows.h>
#include <gl/gl.h>
#include <gl/GLU.h>
#include <gl/glut.h>
// 사각형 위치 크기 초기화
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;
// step
GLfloat xstep = 1.0f;
GLfloat ystep = 1.0f;
// widnows size
GLfloat windowWidth = 250.0f;
GLfloat windowHeight = 250.0f;
// Render
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f( 1.0f, 0.0f, 0.0f );
glRectf( x1, y1, x1+rsize, y1+rsize );
//glFlush();
glutSwapBuffers();
}
// timer
void TimerFunction( int value )
{
// horizontal
if( x1 > windowWidth-rsize || x1 < 0 )
xstep = -xstep;
// vertical
if( y1 > windowHeight-rsize || y1 < 0 )
ystep = -ystep;
// resize 될때
if( x1 > windowWidth - rsize )
x1 = windowWidth - rsize - 1;
if( y1 > windowHeight - rsize )
y1 = windowHeight - rsize - 1;
x1 += xstep;
y1 += ystep;
// re Draw
glutPostRedisplay();
glutTimerFunc( 33, TimerFunction, 1 );
}
// 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();
// 정사각형 유지하기
if( w <= h )
{
windowHeight = 250.0f * h / w;
windowWidth = 250.0f;
}
else
{
windowWidth = 250.0f * h / w;
windowHeight = 250.0f;
}
glOrtho( 0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
// glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitDisplayMode( GLUT_DOUBLE| GLUT_RGB );
glutCreateWindow( "Bounce" );
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glutTimerFunc( 33, TimerFunction, 1 );
SetupRC();
glutMainLoop();
}
중요한 내용만 정리!! 고고싱 합니다.
더블 버퍼링(Double - Buffering )
- 시간이 오래걸리는 복잡한 그림을 일부분씩 보여주기 보다는 더블 버퍼링을 사용하여 이미지를 먼저 다 그린 후 완성된 그림을 화면에 보여줄 수 있다.
- 더블 버퍼링을 애니메이션에 사용할 수 있다.
// glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitDisplayMode( GLUT_DOUBLE| GLUT_RGB );
설정하는 것은
GLUT_SINGLE / GLUT_DOUBLE 설정한다.
//glFlush();
glutSwapBuffers();
Rendering 을 하게 될 때에도 위와 같이 변하게 된다.
Single - glfulsh()
double - glutSwapBuffer() 를 사용한다.
음...........대충 요까지!