ゲームグラフィックス特論 第3回

Post on 25-Jun-2015

2.242 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

同次座標,座標変換,モデル変換,ビュー変換,投影変換,透視深度

TRANSCRIPT

ゲームグラフィックス特論 第3回 変換 (1)

変換行列 同次座標による座標変換

2

内積

3

v1 =

0

BB@

x1

y1

z1

w1

1

CCA , v2 =

0

BB@

x2

y2

z2

w2

1

CCA

v1 · v2 =�x1 y1 z1 w1

0

BB@

x2

y2

z2

w2

1

CCA

= x1x2 + y1y2 + z1z2 + w1w2

アフィン変換

• 線形変換と平行移動の組み合わせ

x

0 = ax+ b

x

0 = a

xx

x+ a

yx

y + b

x

y

0 = a

xy

x+ a

yy

y + b

y

x

0 = a

xx

x+ a

yx

y + a

zx

z + b

x

y

0 = a

xy

x+ a

yy

y + a

zy

z + b

y

z

0 = a

xz

x+ a

yz

y + a

zz

z + b

z

4

x

0 = a

xx

x+ a

yx

y + a

zx

z + b

x

y

0 = a

xy

x+ a

yy

y + a

zy

z + b

y

z

0 = a

xz

x+ a

yz

y + a

zz

z + b

z

0

@x

0

y

0

z

0

1

A =

0

@a

xx

a

yx

a

zx

a

xy

a

yy

a

zy

a

xz

a

yz

a

zz

1

A

0

@x

y

z

1

A+

0

@b

x

b

y

b

z

1

A

アフィン変換の行列表現

5

アフィン変換の同次座標による表現

6

0

BB@

x

0

y

0

z

0

1

1

CCA =

0

BB@

a

xx

a

yx

a

zx

b

x

a

xy

a

yy

a

zy

b

y

a

xz

a

yz

a

zz

b

z

0 0 0 1

1

CCA

0

BB@

x

y

z

1

1

CCA

x

0 = a

xx

x+ a

yx

y + a

zx

z + b

x

y

0 = a

xy

x+ a

yy

y + a

zy

z + b

y

z

0 = a

xz

x+ a

yz

y + a

zz

z + b

z

v =

0

BB@

x

y

z

w

1

CCA

=�x y z w

�T

同次座標

7

0

BB@

x

y

z

w

1

CCA⇣x

w

,

y

w

,

z

w

(x, y, z)

(x, y, z)

0

BB@

x

y

z

1

1

CCA

0

BB@

x

y

z

0

1

CCA

の位置

の方向

同次座標の性質

• 同次座標にスカラーをかけても実座標は変わらない

8

a

0

BB@

x

y

z

w

1

CCA =

0

BB@

ax

ay

az

aw

1

CCA

⇣ax

aw

,

ay

aw

,

az

aw

⌘=

⇣x

w

,

y

w

,

z

w

同次座標の性質

• 同次座標の差は「通分」してから求める

9

P1

w1� P0

w0=

0

BB@

x1/w1

y1/w1

z1/w1

1

1

CCA�

0

BB@

x0/w0

y0/w0

z0/w0

1

1

CCA =

0

BB@

x1/w1 � x0/w0

y1/w1 � y0/w0

z1/w1 � z0/w0

0

1

CCA

w0P1 � w1P0 =

0

BB@

w0x1

w0y1

w0z1

w0w1

1

CCA�

0

BB@

w1x0

w1y0

w1z0

w1w0

1

CCA =

0

BB@

w0x1 � w1x0

w0y1 � w1y0

w0z1 � w1z0

0

1

CCA

変換

10

v0 =

0

BB@

x

0

y

0

z

0

w

0

1

CCA v =

0

BB@

x

y

z

w

1

CCA

M =

0

BB@

m0 m4 m8 m12

m1 m5 m9 m13

m2 m6 m10 m14

m3 m7 m11 m15

1

CCA

v0 = Mv

0

BB@

x

0

y

0

z

0

w

0

1

CCA =

0

BB@

m0 m4 m8 m12

m1 m5 m9 m13

m2 m6 m10 m14

m3 m7 m11 m15

1

CCA

0

BB@

x

y

z

w

1

CCA

平行移動

( )0,8,7T

x

y

7

8

x

y

11

T(t) = T(tx

, ty

, tz

) =

0

BB@

1 0 0 tx

0 1 0 ty

0 0 1 tz

0 0 0 1

1

CCA

位置と方向の平行移動

位置 方向

移動する 変化なし

12

0

BB@

1 0 0 t

x

0 1 0 t

y

0 0 1 t

z

0 0 0 1

1

CCA

0

BB@

x

y

z

1

1

CCA =

0

BB@

x+ t

x

y + t

y

z + t

z

1

1

CCA

0

BB@

1 0 0 t

x

0 1 0 t

y

0 0 1 t

z

0 0 0 1

1

CCA

0

BB@

x

y

z

0

1

CCA =

0

BB@

x

y

z

0

1

CCA

0

BB@

a 0 0 00 a 0 00 0 a 00 0 0 1

1

CCA

0

BB@

x

y

z

1

1

CCA =

0

BB@

ax

ay

az

1

1

CCA

0

BB@

1 0 0 00 1 0 00 0 1 00 0 0 1/a

1

CCA

0

BB@

x

y

z

1/a

1

CCA =

0

BB@

x

y

z

1

1

CCA

拡大縮小

x

y

13

S(s) = S(sx

, sy

, sz

) =

0

BB@

sx

0 0 00 s

y

0 00 0 s

z

00 0 0 1

1

CCA

(ax, ay, az)

任意の点を中心にした拡大縮小

x

y

x

y

p

T(-p) T(p)

M = T(-p) S (s) T(p)

S(s)

p

x

y

14

せん断

( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000010001 s

sxyH

( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000010001 s

sxzH ( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000100001

ssyzH

x

y

1 s

1

( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000010001

ssyxH

( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000100001

sszxH ( )

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

100001000100001

sszyH

y: せん断変形の基準となる座標軸

x: 変更される座標軸

Hxz(t) Hyz(s)

15

座標軸中心の回転

16

Rx

(✓) =

0

BB@

1 0 0 0

0 cos ✓ � sin ✓ 0

0 sin ✓ cos ✓ 0

0 0 0 1

1

CCA

Ry(✓) =

0

BB@

cos ✓ 0 sin ✓ 0

0 1 0 0

� sin ✓ 0 cos ✓ 0

0 0 0 1

1

CCA

Rz(✓) =

0

BB@

cos ✓ � sin ✓ 0 0

sin ✓ cos ✓ 0 0

0 0 1 0

0 0 0 1

1

CCA

任意軸周りの回転

(l,m,n)

θ

17

R(l,m, n, ✓)

=

0

BB@

l2 + (1� l2) cos ✓ lm(1� cos ✓)� n sin ✓ ln(1� cos ✓) +m sin ✓ 0

lm(1� cos ✓) + n sin ✓ m2+ (1�m2

) cos ✓ mn(1� cos ✓)� l sin ✓ 0

ln(1� cos ✓)�m sin ✓ mn(1� cos ✓) + l sin ✓ n2+ (1� n2

) cos ✓ 0

0 0 0 1

1

CCA

任意の点を中心にした回転

p

x

y

x

y

x

y

p

T(-p)

θ

Rz(θ) T(p)

M = T(-p) Rz(θ) T(p)

18

オイラー変換

19

heading

pitch roll

z x

y h: heading (yaw) p: pitch r: roll (bank)

E(h, p, r) = Ry

(h)Rx

(p)Rz

(r)

オイラー変換

20

E(h, p, r)

=

0

BB@

cosh 0 sinh 0

0 1 0 0

� sinh 0 cosh 0

0 0 0 1

1

CCA

0

BB@

1 0 0 0

0 cos p � sin p 0

0 sin p cos p 0

0 0 0 1

1

CCA

0

BB@

cos r � sin r 0 0

sin r cos r 0 0

0 0 1 0

0 0 0 1

1

CCA

=

0

BB@

sinh sin p sin r + cosh cos r sinh sin p cos r � cosh sin r sinh cos p 0

cos p sin r cos p cos r � sin p 0

cosh sin p sin r � sinh cos r cosh sin p cos r + sinh sin r cosh cos p 0

0 0 0 1

1

CCA

ジンバルロック

• これは (r - h) の単一の角度に依存する1軸中心の回転

• したがって自由度が一つ減る

21

=

0

BB@

cos(h� r) sin(h� r) 0 0

0 0 �1 0

� sin(h� r) cos(h� r) 0 0

0 0 0 1

1

CCA

E(h,⇡/2, r) =

0

BB@

sinh sin r + cosh cos r sinh cos r � cosh sin r 0 0

0 0 �1 0

cosh sin r � sinh cos r cosh cos r + sinh sin r 0 0

0 0 0 1

1

CCA

p ! ⇡/2

回転変換行列からオイラー角を算出

22

M =

0

BB@

m0 m4 m8 m12

m1 m5 m9 m13

m2 m6 m10 m14

m3 m7 m11 m15

1

CCA = E(h, p, r)

m1 = cos p sin rm5 = cos p cos r

�! r = atan2(m5,m1)

m9 = � sin p ! p = asin(�m9)

m8 = sinh cos pm10 = cosh cos p

�! h = atan2(m10,m8)

もし m1 = m5 = 0 ) cos p = 0 ! p = ±⇡/2

m0 = cos(h⌥ r)m4 = sin(h⌥ r)

�! h = 0

r = �atan2(m0,m4)

直交座標系の変換

•  (i, j, k), (i’, j’, k’): 直交座標系

•  p: 点の位置

23

i

j

k

p

p = xi+ yj+ zk = x

0i0 + y

0j0 + z

0k0

0

@x

0

y

0

z

0

1

A = MT

0

@x

y

z

1

A=

0

@i · i0 j · i0 k · i0i · j0 j · j0 k · j0i · k0 j · k0 k · k0

1

A

0

@x

y

z

1

A

0

@x

y

z

1

A = M

0

@x

0

y

0

z

0

1

A =�i j k

�T �i0 j0 k0 �

0

@x

0

y

0

z

0

1

A

=

0

@i · i0 i · j0 i · k0

j · i0 j · j0 j · k0

k · i0 k · j0 k · k0

1

A

0

@x

0

y

0

z

0

1

A

直交座標系の変換

x

z

y

r

s

t M

M

M

M =

0

@rx

sx

tx

ry

sy

ty

rz

sz

tz

1

A�1

=

0

@rx

sx

tx

ry

sy

ty

rz

sz

tz

1

AT

=

0

@rx

ry

rz

sx

sy

sz

tx

ty

tz

1

A =

0

@rT

sT

tT

1

A

r =

0

@rx

ry

rz

1

A

s =

0

@sx

sy

sz

1

A

t =

0

@tx

ty

tz

1

A

x =

0

@100

1

A

y =

0

@010

1

A

z =

0

@001

1

A

8<

:

x = Mr

y = Ms

z = Mt

�x y z

�= M

�r s t

0

@1 0 00 1 00 0 1

1

A = M

0

@rx

sx

tx

ry

sy

ty

rz

sz

tz

1

A

あるベクトルを別のベクトルに一致させる回転 (1)

v u

n

n = u× vu× v

( )( )( ) ⎟

⎟⎠

⎞⎜⎜⎝

××

××

×

×=

=

vuuvuu

vuvuu

lnuMu

p n

n

p

p

l = u×nu×n

=u× u× v( )u× u× v( )

m =v×nv×n

=v× u× v( )v× u× v( )

( )( )( ) ⎟

⎟⎠

⎞⎜⎜⎝

××

××

×

×=

=

vuvvuv

vuvuv

mnvMv

Tuvuv MMMMM == −1

u

v

25

特定方向への拡大縮小

拡大縮小する軸の方向

(x y z) 軸方向の拡大縮小率

M = FS s( )FT

(x y z) 軸の空間から (r s t) 軸の空間への回転

(r s t) 軸の空間 → (x y z) 軸の空間への回転 (x y z) 軸方向の拡大縮小 (x y z) 軸の空間 → (x y z) 軸の空間への回転

FT F S(s)

26

S(s)

F =

✓r s t 00 0 0 1

�r s t

変換の連結

• 行列の演算は非可換 •  連結した変換の結果は行列の順序に依存する

R(θ)

R(θ)

S(s)

S(s)

27

M = T t( )R θ( ) =

r00 r10 r20 txr01 r11 r21 tyr02 r12 r22 tz0 0 0 1

!

"

####

$

%

&&&&

剛体変換

• 立体の移動と回転

• 一般的に立体の形状に影響を与えない(=剛体)

R = r0, r1, r2,( ) =r,0T

r,1T

r,2T

!

"

####

$

%

&&&&

⎟⎟⎠

⎞⎜⎜⎝

⎛=⇒

1T0tR

M

28

法線ベクトルの変換 面との直交性の維持

29

変換と法線ベクトル

• ベクトルも変換行列によって変換できる

• 面の頂点に適用した座標変換の行列をそのままその面の法線ベクトルに適用しても正しく変換できない場合がある

M: x 軸方向に 0.5 倍スケーリングする行列

間違い 正解

x

y

N MN

x

y

GN

x

y

30

法線ベクトルの正しい変換

• M: 形状の変換に用いる行列

• G: この形状の法線ベクトルの変換に用いる行列

MG =

( )Madj :Mの随伴行列

( )( )TMG adj=

31

随伴行列 (adjoint)

M =

m00 m10 m20

m01 m11 m21

m02 m12 m22

!

"

####

$

%

&&&&

d00M =

m11 m21

m12 m22

d10M =

m01 m21

m02 m22

adj M( ) =d00M −d01

M d02M

−d10M d11

M −d12M

d20M −d21

M d22M

"

#

$$$$

%

&

''''

余因子

ちなみに ( )MM

M adj11 =−したがって ( )T1−= MG でも可

32

逆行列 逆変換を行う

33

逆行列の計算

• クラメールの公式 •  3×3までの行列なら簡単

• ガウスの消去法など

•  数値計算的手法

• 一般に計算コストが高い

•  できるだけ「楽に」逆行列を求めたい

( )MM

M adj11 =−

34

逆行列の求め方

• 平行移動

• 拡大縮小

• 回転

• せん断

35

T�1(t) = T(�t) =

0

BB@

1 0 0 �tx

0 1 0 �ty

0 0 1 �tz

0 0 0 1

1

CCA

S�1(s) = S

✓1

sx

,1

sy

,1

sz

◆=

0

BB@

1s

x

0 0 00 1

s

y

0 0

0 0 1s

z

00 0 0 1

1

CCA

R�1(✓) = R(�✓) = RT (✓)

H�1ij (s) = Hij(�s)

逆行列の求め方

• 剛体変換

36

M = T t( )R θ( )⇒M−1 =R−1 θ( )T−1 t( ) =R −θ( )T −t( ) =RT θ( )T −t( )

R =r00 r10 r20r01 r11 r21r02 r12 r22

!

"

####

$

%

&&&&= r0, r1, r2,( ) =

r,0T

r,1T

r,2T

!

"

####

$

%

&&&&

M = R t0T 1

!

"##

$

%&&⇒M−1 =

r,00

r,10

r,20

−RT t1

!

"

##

$

%

&&

逆行列の求め方

• オイラー変換

37

E−1 h, p, r( ) = ET h, p, r( )

= Ry h( )Rx p( )Rz r( )( )T

=RzT r( )Rx

T p( )RyT h( )

E h, p, r( ) =Ry h( )Rx p( )Rz r( )

OpenGL の変換行列 GLSL における座標変換

38

OpenGL の変換行列の要素の順序

この講義での行列表記

M =

m0 m4 m8 m12m1 m5 m9 m13m2 m6 m10 m14m3 m7 m11 m15

!

"

#####

$

%

&&&&&

C/C++ 言語の配列の格納順序

GLfloat m[] = { ! m[ 0], m[ 1], m[ 2], m[ 3], ! m[ 4], m[ 5], m[ 6], m[ 7], ! m[ 8], m[ 9], m[10], m[11], ! m[12], m[13], m[14], m[15], !};

39

課題

• y 軸中心に r ラジアン回転したあと,y 方向に d 平行移動する変換行列を右の配列変数 m に設定しなさい.関数 sin() / cos() は使って構わない.

• この配列変数は OpenGL で使用するものとする.

GLfloat m[16]; !!m[0] = … ; !m[1] = … ; !… !m[15] = … ; !

40

行列をシェーダプログラムで使う

•  uniform 変数 •  描画単位 (glDrawArrays(), glDrawElements() 等) で不変な値をもつ

•  変換行列,光源位置,視点位置,材質情報等 •  各シェーダステージから共通して参照される

•  CPU 側のプログラムで値を設定する •  シェーダプログラムからは読み出しのみ

#version 150 core !in vec4 pv; !uniform mat4 mc; !void main(void) !{ ! gl_Position = mc * pv; !}

バーテックスシェーダ uniform uniform 変数の宣言

mat4 実数 (float) 4×4 要素の行列データ型

mc mat4 型のユーザ定義 uniform 変数

41

uniform 変数に行列を設定する

• シェーダプログラムの作成(loadShader() を使う場合) •  GLuint program = createProgram( … );

• この後に uniform 変数 mc のインデックスを求める •  GLint mcLoc = glGetUniformLocation(program, "mc");

•  uniform 変数はシェーダのハードウェアの「レジスタ」に割り当てられる •  glGetUniformLocation() は uniform 変数に割り当てられたレジスタの「イン

デックス」を求める

• 描画時に使用するシェーダプログラムの選択 •  glUseProgram(program);

• その後に uniform 変数に値を設定する •  glUniformMatrix4fv(mcLoc, count, transpose, mc);

•  count: 設定する配列変数の数(行列の数が1個なら1), transpose: m を転置するなら GL_TRUE, しないなら GL_FALSE

42

投影変換 直交投影と透視投影

43

標準ビューボリューム

x

y

z

O1

1

1

<1<1

<1

• -1≦ x ≦1, -1≦ y ≦1, -1≦ z ≦1 の立方体の空間

• この空間からはみ出たものはクリッピングされる

• この空間のxy平面への直交投影像がビューポートに表示される

• この空間の座標系はクリッピング座標系

44

直交投影

xz

yleft

right

top

bottom

-near

-far

xz

y

x

z

y

x

z

y

45

中心に平行移動

O x

y

left right

top

bottom

1 0 0 −right + left

2

0 1 0 −top+ bottom

2

0 0 1 far + near2

0 0 0 1

"

#

$$$$$$$$

%

&

''''''''

46

スケーリングして大きさを正規化

x

y

Oleft right

top

bottom

1

-1

-1 1

top-bottom

right-left

2

2

2right − left

0 0 0

0 2top− bottom

0 0

0 0 −2far − near

0

0 0 0 1

"

#

$$$$$$$$$

%

&

'''''''''

47

直交投影変換行列

!!!!!!!!

"

#

$$$$$$$$

%

&

+−

−−

+−

+−

=

!!!!!!!

"

#

$$$$$$$

%

&

+

+−

+−

!!!!!!!!

"

#

$$$$$$$$

%

&

−−

=

1000

200

020

002

10002

1002

0102

001

1000

0200

0020

0002

nearfarnearfar

nearfar

bottomtopbottomtop

bottomtop

leftrightleftright

leftright

nearfar

bottomtop

leftright

nearfar

bottomtop

leftright

oM

48

透視投影

xz

yleft

right

top

bottom

-near

-far

!"#$%#&'(

!")*+(

xz

yxz

y

x

z

y

49

せん断

1 0 right + left2near

0

0 1 top+ bottom2near

0

0 0 1 00 0 0 1

!

"

########

$

%

&&&&&&&&

50

Oz

<near

<far

left right x

right+left2

1right+left

2 near

(view frustum)

透視変換

O<near

<farz z

y

ynearz y<

!"#$%&!'()*+),-

!".$+.%(-

!"/01-

x* = − nearz

x

y* = − naerz

y

z* = − far + near2

−far near

z

51

透視変換

!x!y!z!w

"

#

$$$$

%

&

''''

=

near 0 0 00 near 0 0

0 0 far + near2

far near

0 0 −1 0

"

#

$$$$$$

%

&

''''''

xyz1

"

#

$$$$

%

&

''''

!x = near x!y = near y

!z = far + near2

z+ far near

!w = −z

x* = − nearz

x

y* = − naerz

y

z* = − far + near2

−far near

z

52

求め方は 後述

透視深度

<near

<farz <near <far

near

far

O z O

<1

1

53

視錐台による透視投影変換行列

M p =

2right − left

0 0 0

0 2top− bottom

0 0

0 0 −2far − near

0

0 0 0 1

"

#

$$$$$$$$$

%

&

'''''''''

near 0 0 00 near 0 0

0 0 far + near2

far near

0 0 −1 0

"

#

$$$$$$

%

&

''''''

1 0 right + left2near

0

0 1 top+ bottom2near

0

0 0 1 00 0 0 1

"

#

$$$$$$$$

%

&

''''''''

=

2nearright − left

0 right + leftright − left

0

0 2neartop− bottom

top+ bottomtop− bottom

0

0 0 −far + nearfar − near

−2 far nearfar − near

0 0 −1 0

"

#

$$$$$$$$$

%

&

'''''''''

54

画角をもとにした透視投影変換行列

f = 1

tan fovy2

!

"#

$

%&= cot fovy

2!

"#

$

%&

M p =

faspect

0 0 0

0 f 0 0

0 0 −far + nearfar − near

−2 far nearfar − near

0 0 −1 0

!

"

########

$

%

&&&&&&&&

fovy

x

y

z

-far-near

55

視野変換 視点の位置や視線の方向を変更する

56

視野変換

視野変換前

O x

y

z

視野変換後

O x

y

z

<z

57

視点の移動

O x

y

z

u = (ux, uy, uz)

t = (tx, ty, tz)

e = (ex, ey, ez)

O x

y

z

u

t < e

Tv =

1 0 0 −ex0 1 0 −ey0 0 1 −ez0 0 0 1

"

#

$$$$$

%

&

'''''

58

視線の回転

O x

y

z

u

t < e

O x

y

z

(0, 0, 1)

(1, 0, 0)

(0, 1, 0)

Rv =

!x T 0!y T 0!z T 0

0 0 0 1

"

#

$$$$$

%

&

'''''

59

回転の変換行列

Rv =

!x T 0!y T 0!z T 0

0 0 0 1

"

#

$$$$$

%

&

'''''

=

!xx !xy !xz 0!yx !yy !yz 0!zx !zy !zz 0

0 0 0 1

"

#

$$$$$

%

&

'''''

!z T = !zx !zy !zz( ) =ex ( tx ey ( ty ez ( tz( )

ex ( tx( )2 + ey ( ty( )2+ ez ( tz( )2

!x T = !xx !xy !xz( ) =uy !zz (uz !zy uz !zx (ux !zz ux !zy (uy !zx( )

uy !zz (uz !zy( )2+ uz !zx (ux !zz( )2 + ux !zy (uy !zx( )

2

!y T = !yx !yy !yz( ) = !zy !xz ( !zz !xy !zz !xx ( !zx !xz !zx !xy ( !zy !xx( )

60

視野変換行列

Mv =RvTv =

!xx !xy !xz 0!yx !yy !yz 0!zx !zy !zz 0

0 0 0 1

"

#

$$$$$

%

&

'''''

1 0 0 (ex0 1 0 (ey0 0 1 (ez0 0 0 1

"

#

$$$$

%

&

''''

=

!xx !xy !xz (ex !xx ( ey !xy ( ez !xz!yx !yy !yz (ex !yx ( ey !yy ( ez !yz!zx !zy !zz (ex !zx ( ey !zy ( ez !zz0 0 0 1

"

#

$$$$$

%

&

'''''

61

各変換行列の使い方

Mm : モデリング変換行列(パーツごとの拡大・縮小,回転,平行移動等)

Mv M p: 視野変換行列 : 投影変換行列

Pl Nl: ローカル座標系の座標値 : ローカル座標系の法線ベクトル

Mc =M pMvMm Pc =McPl

Pw =MmPl

G = adj Mm( )( )T Nw =GNl(要正規化)

62

宿題

• 次の変換行列を求めて引数の配列変数 m に格納する関数を作成してください. •  透視投影変換行列を求める関数 perspective() •  視野変換行列を求める関数 lookat() •  関数の仕様はひな形プログラムを参照のこと

•  https://github.com/tokoik/ggsample03

• 透視投影変換行列と視野変換行列の積を,シェーダプログラムの uniform 変数 mc に格納してください.

• バーテックスシェーダにおいて,頂点座標に uniform 変数 mc をかけてください.

• main.cpp と simple.vert をメールに添付してください. •  送り先 tokoi@sys.wakayama-u.ac.jp

第2回の宿題の図形を視野変換と透視投影変換を行って描いてください

63

結果

このような画像が表示されれば,多分,正解です.

64

top related