3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga...

30
Computer Graphics App. Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga 3차원 그래픽스의 기하변환 September 21, 2006 Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga 가상 트랙볼 (Virtual Trackball) (1) 마우스의 위치를 이용하여 회전 변환을 제어 객체의 부드러운 연속적인 회전 변환을 제공 트랙볼 구조

Transcript of 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga...

Page 1: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Computer Graphics App.

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

3차원 그래픽스의 기하변환

September 21, 2006

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

가상 트랙볼 (Virtual Trackball) (1)

마우스의위치를이용하여회전변환을제어

객체의부드러운연속적인회전변환을제공

트랙볼구조

Page 2: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

가상 트랙볼 (2)

단계 1) 화면상의마우스위치를트랙볼상의위치로역투영

222

2222

zxry

rzyx

−−=

=++

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

가상 트랙볼 (3)

단계 2) 두점사이의회전평면결정

법선벡터계산

단계 3) 회전각결정

단계 4) 사원수에

의한 3D 회전

21 ppn ×=

( )211cos pp ⋅= −θ θ

사원수사원수((QuaternionsQuaternions))

n

Page 3: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

사원수 (Quaternions) (1)

1개실수부 + 3개허수부

특성:

덧셈과스칼라곱

kcjbiasq +++=1222 −=== kji

jikki

ikjjk

kjiij

=−==−==−=

dkcdjbdiadsdq 11111 +++=

( ) ( ) ( ) ( )2121212121 cckbbjaaissqq +++++++=+

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

사원수 (2)

순서쌍개념

스칼라 ‘s’ + 벡터 “v = (a, b, c)”

덧셈

곱셈

절대값

역수

( )v ,sq =

( )212121 , vv ++=+ ssqq

( )211221212121 , vvvvvv ×++⋅−= ssssqq

vv ⋅+= 22sq

( )v ,1

21 s

qq =− ( )0 ,111 == −− qqqq

Page 4: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

‘사원수’와 3D 회전

3D 점 (α, β, γ)에대하여단위사원수 와그켤레사원수

이용

Rq : 회전축 (ux, uy, uz)을중심으로 2θ만큼 3D 회전행렬

( )cbasq , , ,=( )cbasq −−−= , , ,

( ) ( )γβαγβα ′′′=⋅⋅ , , ,0 , , ,0 qq

( ) qpqpRq ⋅⋅=

( ) ( )( )zyx uuucbasq , ,sin ,cos , , , θθ==

회전축회전축 ((uuxx, , uuyy, , uuzz))을을중심으로중심으로 회전각회전각 22θθ 만만큼큼 점점 ((αα, , ββ, , γγ))을을 회전시킴회전시킴

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

사원수에 의한 3D 회전 (1)

임의의축에대한회전단위사원수를구성 (u: 단위벡터)

임의의점 P를사원수표기법으로변환 (p = (x, y, z))

사원수에의한 3D 회전계산수행 (q-1=(s, –v))

새로운사원수결과

( )cbas , ,2

sin ,2

cos ===θθ

uv

( )pP ,0=

1−=′ qqPP

( )pP ′=′ ,0

( ) ( ) ( )pvvpvvpvpp ××+×+⋅+=′ ss 22

Page 5: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

사원수에 의한 3D 회전 (2)

사원수의계산을회전행렬로유도

이동변환을연결하여임의의점에대한회전

( )

( ) ( ) ( ) ( ) ( )xxyyzyyxx

R

basabcsbac

sabccascab

sbacscabcb

θθθθθ

θ

RRRRR

M

−−=

⎥⎥⎥

⎢⎢⎢

−−+−−−−++−−−

=22

22

22

2212222

2222122

2222221

( ) ( )TMTR θθ R1−=

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Header File for a Trackball

typedef double vec3d[3];

#ifndef M_PI#define M_PI 3.14159265#endif

class TrackBall {private:

int width, height;vec3d lastPos;

//quaternionsdouble s;vec3d v;

public:double rMat[16];

public:TrackBall();virtual ~TrackBall();

void initialize( void );void resize( const int &cx, const int &cy );void project( int &xi, int &yi, vec3d &v );void start( int xi, int yi );void end( int xi, int yi );

};

Page 6: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Vector Operations

void normalize( vec3d &v ){

double d = 1.0 / sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );v[0] *= d;v[1] *= d;v[2] *= d;return;

}

double dot( vec3d &a, vec3d &b ){

return ( a[0]*b[0] + a[1]*b[1] + a[2]*b[2] );}

void cross( vec3d &a, vec3d &b, vec3d &c ){

c[0] = a[1]*b[2] - a[2]*b[1];c[1] = a[2]*b[0] - a[0]*b[2];c[2] = a[0]*b[1] - a[1]*b[0];return;

}

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Projection to a HemisphereTrackBall::TrackBall(){

initialize();}

TrackBall::~TrackBall(){

}

void TrackBall::initialize( void ){

s = 1.0;v[0] = v[1] = v[2] = 0.0;for( int i=0; i<16; i++ ) rMat[i] = 0.0;rMat[0] = rMat[5] = rMat[10] = rMat[15]= 1.0;return;

}

void TrackBall::resize( const int &cx, const int &cy ){

width = cx; height = cy;return;

}

void TrackBall::project( int &xi, int &yi, vec3d &v ){

v[0] = ( 2.0*xi – width ) / (double)width;v[1] = ( height - 2.0*yi ) / (double)height;double d = sqrt( v[0]*v[0] + v[1]*v[1] );v[2] = cos( M_PI * 0.5 * ( (d<1.0)? d : 1.0 ) );

normalize( v );return;

}

Page 7: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Creation of Quaternionsvoid TrackBall::start( int xi, int yi ){

project( xi, yi, lastPos );return;

}

void TrackBall::end( int xi, int yi ){

vec3d currPos, t;

project( xi, yi, currPos );

t[0] = currPos[0] - lastPos[0];t[1] = currPos[1] - lastPos[1];t[2] = currPos[2] - lastPos[2];

if( t[0] || t[1] || t[2] ){

double angle = M_PI*0.5*sqrt( t[0]*t[0] + t[1]*t[1] + t[2]*t[2] );vec3d axis;cross( currPos, lastPos, axis );normalize( axis );

double s2 = sin( angle*0.5 );vec3d v2 = { s2*axis[0], s2*axis[1], s2*axis[2] };s2 = cos( angle*0.5 );

double s1 = s;vec3d v1 = { v[0], v[1], v[2] }, v3;cross( v1, v2, v3 );s = ( s1 * s2 ) - dot( v1, v2 );v[0] = s1*v2[0] + s2*v1[0] + v3[0];v[1] = s1*v2[1] + s2*v1[1] + v3[1];v[2] = s1*v2[2] + s2*v1[2] + v3[2];

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Creation of a Rotation Matrixdouble d = 1.0 / sqrt( s*s + v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );s *= d;v[0] *= d;v[1] *= d;v[2] *= d;

// rotation with quaternions// P' = quat * P * quat^-1// M = { { 1-2b^2-2c^2, 2ab-2sc, 2ac+2sb }, // { 2ab+2sc, 1-2a^2-2c^2, 2bc-2sa },// { 2ac-2sb, 2bc+2sa, 1-2a^2-2b^2 } };rMat[0] = 1.0 - 2.0 * (v[1]*v[1] + v[2]*v[2]);rMat[1] = 2.0 * (v[0]*v[1] - s*v[2]);rMat[2] = 2.0 * (v[2]*v[0] + s*v[1]);//rMat[3] = 0.0;

rMat[4] = 2.0 * (v[0]*v[1] + s*v[2]);rMat[5] = 1.0 - 2.0 * (v[2]*v[2] + v[0]*v[0]);rMat[6] = 2.0 * (v[1]*v[2] - s*v[0]);//rMat[7] = 0.0;

rMat[8] = 2.0 * (v[2]*v[0] - s*v[1]);rMat[9] = 2.0 * (v[1]*v[2] + s*v[0]);rMat[10] = 1.0 - 2.0 * (v[0]*v[0] + v[1]*v[1]);//rMat[11] = 0.0;

//rMat[12] = rMat[13] = rMat[14] = 0.0;//rMat[15] = 1.0;

lastPos[0] = currPos[0];lastPos[1] = currPos[1];lastPos[2] = currPos[2];

}return;

}

Page 8: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Global Variables

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Initialization & Resize

Page 9: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Mouse Controls

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

DrawScene ( )

Page 10: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

What’s Wrong?

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

연습 문제 (1)

아래와같이그림자가바닥에위치하도록수정

Page 11: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

New Project (1)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

New Project (2)

Page 12: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

New Project (3)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

OpenGL에서 변환 행렬

행렬모드 (Matrix modes)‘model-view’와 ‘projection’행렬

3종류함수: 회전(rotation), 이동(translation), 신축(scaling)

glRotatef(angle, vx, vy, vz);

glTranslatef(dx, dy, dz);

glScalef(sx, sy, sz);

model-view projection꼭지점 꼭지점

CTM(Current Transformation Matrix)

Page 13: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

이동 (Translation)

물체의모든꼭지점에이동벡터를더함

void glTranslate{fd} (TYPE dx, TYPE dy, TYPE dz)void glTranslate{fd} (TYPE dx, TYPE dy, TYPE dz)

원점에중심이위치한물체 카메라로부터멀어진물체

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Before Translation

Page 14: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

GLUT Library (1)

glut.h (/VC98/include/gl), glut32.lib (/VC98/lib), glut32.dll (Windows/system32)

void glutWireCube(GLdouble size);void glutSoildCube(GLdouble size);

void glutWireCube(GLdouble size);void glutSoildCube(GLdouble size);

void glutWireSphere(GLdouble radius, GLint slices, Glint stacks);void glutSoildSphere(GLdouble radius, GLint slices, Glint stacks);

void glutWireSphere(GLdouble radius, GLint slices, Glint stacks);void glutSoildSphere(GLdouble radius, GLint slices, Glint stacks);

void glutWireCone(GLdouble base, GLdouble height, GLint slices, Glint stacks);void glutSoildCone(GLdouble base, GLdouble height, GLint slices, Glint stacks);

void glutWireCone(GLdouble base, GLdouble height, GLint slices, Glint stacks);void glutSoildCone(GLdouble base, GLdouble height, GLint slices, Glint stacks);

void glutWireTeapot(GLdouble size);void glutSoildTeapot(GLdouble size);

void glutWireTeapot(GLdouble size);void glutSoildTeapot(GLdouble size);

void glutWireTorus(GLdouble inner, GLdouble outer, GLint sides, Glint slices);void glutSoildTorus(GLdouble inner, GLdouble outer, GLint sides, Glint slices);

void glutWireTorus(GLdouble inner, GLdouble outer, GLint sides, Glint slices);void glutSoildTorus(GLdouble inner, GLdouble outer, GLint sides, Glint slices);

void glutWireTetrahedron();void glutSoildTetrahedron();void glutWireOctahedron();void glutWireOctahedron();void glutWireDodecahedron();void glutSoildDodecahedron();void glutWireIcosahedron();void glutWireIcosahedron();

void glutWireTetrahedron();void glutSoildTetrahedron();void glutWireOctahedron();void glutWireOctahedron();void glutWireDodecahedron();void glutSoildDodecahedron();void glutWireIcosahedron();void glutWireIcosahedron();

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

GLUT Library (2)

Page 15: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

GLUT Library (3)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

실행 결과 – Before Translation

Page 16: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

After Translation (1)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

실행 결과 – After Translation (1)

Page 17: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

After Translation (2)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Why?

Page 18: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

glPushMatrix( ), glPopMatrix( )

glPushMatrix( )와 glPopMatrix( )변환을수행한다음, 수행하기이전상태로되돌림

glPushMatrix();

glTranslatef(.....);glRotatef(.....);glScalef(.....);

/* draw object here */

glPopMatrix();

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

After Translation (3)

Page 19: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

실행 결과 – After Translation (2)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

회전 (Rotation)

주어진회전축과기준점(고정점)에대해반시계방향으로회전

void glRotate{fd} (TYPE angle, TYPE ax, TYPE ay, TYPE az)void glRotate{fd} (TYPE angle, TYPE ax, TYPE ay, TYPE az)

일반적인회전

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(xf, yf, zf);

glRotatef(angle, ax, ay, az);

glTranslatef(-xf, -yf, -zf)

Page 20: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

신축 (Scaling)

원점을기준으로크기인자(scale factor)만큼물체의크기를늘이거나또는줄임

void glScale{fd} (TYPE sx, TYPE sy, TYPE sz)void glScale{fd} (TYPE sx, TYPE sy, TYPE sz)

nonuniform 크기인자에의한신축

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

OpenGL에서 행렬 직접 설정 (1)

OpenGL의변환함수를이용하지않고직접행렬을만들어설정할수있음

행렬: 4행 4열 2차원배열이아닌열순서 (column order)의 16개원소를갖는 1차원배열

void glLoadMatrix{fd} (TYPE *m)

void glMultMatrix{fd} (TYPE *m)

void glLoadMatrix{fd} (TYPE *m)

void glMultMatrix{fd} (TYPE *m)

⎥⎥⎥⎥

⎢⎢⎢⎢

]15[]11[]7[]3[

]14[]10[]6[]2[

]13[]9[]5[]1[

]12[]8[]4[]0[

aaaa

aaaa

aaaa

aaaa

Page 21: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

OpenGL에서 행렬 직접 설정 (2)

예제) 밀림 (shearing)

⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000

0100

0010

00cot1 θ

xH

정육면체의밀림

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Setting Matrices Directly (1)

Page 22: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Setting Matrices Directly (2)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

실행 결과 – 신축

Page 23: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

계층적 모델 (Hierarchical Model) (1)

모델의일부가다른부분에종속적임만약일부분이움직이면, 다른부분도함께움직임

간단한로봇팔 (robot arm) 계층적표현

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

계층적 모델 (2)

GLU 구(sphere)와원기둥(cylinder)를이용하여만든모습

계층적표현

Page 24: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

계층적 모델 만들기

예) 간단한로봇팔 (robot arm)

lower arm

base

upper arm

gluCylinder(GLUqadricObj *q,

GLdouble base_radius,

GLdouble top_radius,

GLdouble height,

GLint slices,

Glint stacks)

gluCylinder(GLUqadricObj *q,

GLdouble base_radius,

GLdouble top_radius,

GLdouble height,

GLint slices,

Glint stacks)

glutSolidCube(GLdouble size)

glutWireCube(GLdouble size)

glutSolidCube(GLdouble size)

glutWireCube(GLdouble size)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (1)

Page 25: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (2)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (3)

Page 26: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (4)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (5)

Page 27: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (6)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

Modeling of H.M. (7)

Page 28: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

실행 결과 – Modeling of H.M.

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

연습 문제 (2)

아래그림과같이되도록이동변환을시키시오.

Page 29: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

계층적 모델의 회전 변환

예) 간단한로봇팔 (robot arm)

lower armbase upper arm

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

연습 문제 (3)

아래의키가눌릴때, 로봇팔의각부분이회전되도록만드시오.왼쪽화살표 – base가시계방향으로회전

오른쪽화살표 – base가반시계방향으로회전

위쪽화살표 – lower arm이반시계방향으로회전

아래화살표 – lower arm이시계방향으로회전

Home 키 – upper arm이반시계방향으로회전

End 키 – upper arm이시계방향으로회전

Page 30: 3차원그래픽스의기하변환 - hallym.ac.krgraphics.hallym.ac.kr › teach › 2006 › cga › src › 07prac.pdf · 2008-09-11 · 가상트랙볼(3) 단계2) 두점사이의회전평면결정

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/cga

연습 문제 (3) – Robot Arm