본문 바로가기

Not Using/media programming2

11.26 3D 그래픽스 & OpenGL(2/2)

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 모델링>>

n6면체
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축을 따라서 몇 개의 면으로 근사화

 
n4면체

 nvoid glutSolidTetrahedron();
o물체 겉면이 칠해진 형태
nvoid glutWireTetrahedron();   //사면체
o물체 뼈대만 선으로 표시



 

n20면체
nvoid glutSolidcosahedron();
o물체 겉면이 칠해진 형태
nvoid glutWirecosahedron();
o물체 뼈대만 선으로 표시


 

n주전자
nvoid glutSolidTeapot(GLdouble size);
o물체 겉면이 칠해진 형태
nvoid glutWireTeapot(GLdouble size);
o물체 뼈대만 선으로 표시
osize : 주전자의 상대적 크기



 

Reshape Callback 함수   //os가 사용자가만들어놓은 함수를 호출(이벤트 핸들러와비슷!->어떠한 부름이있어야 콜백!)
n
void 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 함수

nvoid glutKeyboardFunc(void(*func)(unsigned char key, int x, int y));
nASCII 코드의 키보드 입력이 일어날 때마다 GLUT가 호출하는 콜백함수를 등록시키는 함수
okey : 눌러진 키
ox : 마우스의 X좌표,  y : 마우스의 Y좌표
oex)
ovoid myKeyboard(unsigned char key, int x, int y)

  {    … }

  void main(int argc, char** argv)

  {   

    glutKeyboardFunc(myKeyboard);    // 함수 등록

        }


Mouse Click Callback 함수

 

nvoid glutMouseFunc(void(*func)(int button, int state, int x, int y));
n마우스 이벤트가 발생할 때마다 GLUT가 호출하는 마우스 클릭 콜백함수를 등록시키는 함수
obutton : 버튼의 종류
oGLUT_LEFT_BUTTON , GLUT_RIGHT_BUTTON, GLUT_MIDDEL_BUTTON
ostate : 해당 버튼이 눌러진 상태인지 아닌지
oGLUT_DOWN, GLUT_UP 
ox : 마우스 x좌표, y : 마우스 y좌표




glFush : 한꺼번에 화면에 뿌려줌(혹시나 실행되지 않은것을 보여주기위해)



'Not Using > media programming2' 카테고리의 다른 글

과제  (0) 2009.12.06
11.26  (0) 2009.11.26
heap원리  (0) 2009.11.05
과제있음!  (0) 2009.10.29
1029 lecture  (0) 2009.10.29