game pattern
initialize - > Draw -> user input -> cal ->Draw
Framebuffer
메모리공간영역(화면에 쏘아주는 색상정보를 담고있다.여기에 정보를 쓰게되면 화면에 정보가 보여짐)
Ortho2D : 차원을 2차원을 어떻게 투영할지(원근감없이)
nvoid gluLookAt
GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble atx, GLdouble aty, GLdouble atz, GLdouble upx, GLdouble upy, GLdouble upz
neyex, eyey, eyez : Camera , Position(x,y,z)
natx, aty, atz : Camera Focus(x,y,z)
nupx, upy, upz : Camera Upvector(gradient)
nDefault
nglutLookAt(0.0, 0.0, 0.0, 0.0, 0.0, -100.0, 0.0, 1.0, 0.0); //카메라위치,x,y,z,
nvoid glOrtho
GLdouble left, GLdouble right, GLdouble bottom, GLdouble top
GLdouble zNear, GLdouble zFar
nvoid glFrustum //원근감증감, 보이는영영축소,확대가능
GLdouble left, GLdouble right, GLdouble bottom, GLdouble top
GLdouble zNear, GLdouble zFar
nvoid glPerspective
GLdouble fov, GLdouble aspect, GLdouble near, GLdouble fars
nfov : Field of View(degree : 0 ~ 180)
naspect : Aspect Ratio(Width/Height)
nnear : near clipping plane
nfar : far clipping plane
n점
nGL_POINTS
n선
nGL_LINES
nGL_LINE_STRIP
nGL_LINE_LOOP
n도형
nGL_POLYGON
nGL_TRIANGLES
nGL_TRIANGLE_STRIP//버텍스개수 중복방지를 위해 TRIANGLE_STRIP를 사용한다.
nGL_TRIANGLE_FAN
nGL_QUAD_STRIP
--------------------------------------->>>>>>>>>>>어떻게 그려지는가(뒷부분ppt중요!!)''
nglPointSize(Glfloat size)
n점의 크기
nglLineWidth(Glfloat width)
n선의 두께
nglGetFloatv(GL_LINE_SIZE_RANGE)
n드라이버가 지원하는 최대 선의 두께를 반환
nglShadeModel(mode)
n다각형 내부 채움 모드 설정
nmode
oGL_FLAT: 다각형의 내부를 모두 동일한 색으로
oGL_SMOOTH: 정점의 색을 Weighted Average 보간 (중간값이존재)
o기본값
----지난시간 ㅋㅋ
<<GLUT 모델링>>
n정 6면체
nvoid glutSolidCube(GLdouble size);
o물체 겉면이 칠해진 형태
nvoid glutWireCube(GLdouble size);
o물체 뼈대만 선으로 표시
osize : 정육면체 모서리의 길이
n원구
nvoid glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); //반지름(radius)과 조각(slice)와 stacks(쪼개지는 정도->이것에 따라 원구의 매끄러움이 결정)가 들어감
o물체 겉면이 칠해진 형태
nvoid glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
o물체 뼈대만 선으로 표시
oradius : 원구의 반지름
oslices : 경선의 수 (세로)
ostacks : 위선의 수 (가로)
n원환체
nvoid glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
o물체 겉면이 칠해진 형태
nvoid glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
o물체 뼈대만 선으로 표시
oinnerRadius : 원환체의 안쪽 반지름
oouterRadius : 원환체의 바깥쪽 반지름
onsides: 튜브 단면을 몇 개의 선분으로 근사화
orings : 튜브 윤곽을 몇 개의 선분으로 근사화
n원뿔
nvoid glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
o물체 겉면이 칠해진 형태
nvoid glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
o물체 뼈대만 선으로 표시
obase : 원뿔 밑면의 반지름
oheight : 원뿔 높이
oslices : z축 둘레를 몇 개의 선분으로 근사화
ostacks : z축을 따라서 몇 개의 면으로 근사화
n정 4면체
nvoid glutSolidTetrahedron();
o물체 겉면이 칠해진 형태
nvoid glutWireTetrahedron(); //사면체
o물체 뼈대만 선으로 표시
n정 20면체
nvoid glutSolidcosahedron();
o물체 겉면이 칠해진 형태
nvoid glutWirecosahedron();
o물체 뼈대만 선으로 표시
n주전자
nvoid glutSolidTeapot(GLdouble size);
o물체 겉면이 칠해진 형태
nvoid glutWireTeapot(GLdouble size);
o물체 뼈대만 선으로 표시
osize : 주전자의 상대적 크기
Reshape Callback 함수 //os가 사용자가만들어놓은 함수를 호출(이벤트 핸들러와비슷!->어떠한 부름이있어야 콜백!)
nvoid glutReshapeFunc(void(*func)(int width, int height));
n윈도우의 크기/모양이 바뀔 때 GLUT가 호출하는 콜백함수를 등록시키는 함수
owidth : 윈도우의 새로운 너비
oheight : 윈도우의 새로운 높이
oex)
oVoid myReshape(int NewWidth, int NewHeight)
{ … }
void main(int argc, char** argv)
{ …
glutReshapeFunc(myReshape); //함수 등록
… }
Keyboard Callback 함수