3d勉強会 第1回 3dプログラミングのススメ

89
3D 3D 勉強会 勉強会 1 1 3D 3D 3 3 次元空間におけ座標変換 次元空間におけ座標変換 株式会社 株式会社 齊藤 齊藤 一誠 一誠

Upload: infiniteloop

Post on 24-May-2015

13.295 views

Category:

Technology


1 download

DESCRIPTION

株式会社インフィニットループの社内勉強会で使われたスライド「3D勉強会 第1回 3Dプログラミングのススメ」です。 http://www.infiniteloop.co.jp/blog/2013/06/3dstudy01/

TRANSCRIPT

Page 1: 3D勉強会 第1回 3Dプログラミングのススメ

3D3D勉強会勉強会 第第11回回3D3Dプログラミングのススメプログラミングのススメ

~~33次元空間における座標変換~次元空間における座標変換~

株式会社インフィニットループ株式会社インフィニットループ

齊藤齊藤 一誠一誠

Page 2: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

Page 3: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

名前名前 齊藤齊藤 一誠一誠

Page 4: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

名前名前 齊藤齊藤 一誠一誠

元コンシューマゲーム開発者元コンシューマゲーム開発者

Page 5: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

名前名前 齊藤齊藤 一誠一誠

元コンシューマゲーム開発者元コンシューマゲーム開発者

開発経験のあるプラットフォームは開発経験のあるプラットフォームはPS2PS2・・PSPPSP・・PS3PS3

Page 6: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

名前名前 齊藤齊藤 一誠一誠

元コンシューマゲーム開発者元コンシューマゲーム開発者

開発経験のあるプラットフォームは開発経験のあるプラットフォームはPS2PS2・・PSPPSP・・PS3PS3

3D3Dプログラミングはプログラミングはそこそこそこそこできるはずできるはず

Page 7: 3D勉強会 第1回 3Dプログラミングのススメ

・・自己紹介自己紹介

名前名前 齊藤齊藤 一誠一誠

元コンシューマゲーム開発者元コンシューマゲーム開発者

開発経験のあるプラットフォームは開発経験のあるプラットフォームはPS2PS2・・PSPPSP・・PS3PS3

3D3Dプログラミングはプログラミングはそこそこそこそこできるはずできるはず

ということで、前置きとしてということで、前置きとして3D3Dプログラミング入門のプログラミング入門の

心得のようなものをお話していきます。心得のようなものをお話していきます。

Page 8: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

Page 9: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

Page 10: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

Page 11: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・

Page 12: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・

・そもそも何から勉強し始めたらいいのかわからない・・・・そもそも何から勉強し始めたらいいのかわからない・・・

Page 13: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dプログラミングを始めるのにプログラミングを始めるのに

数学力は必要なのか数学力は必要なのか

Page 14: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dプログラミングを始めるのにプログラミングを始めるのに

数学力は必要なのか数学力は必要なのか

・・3D3Dプログラミングを始めた頃の私の数学力についてプログラミングを始めた頃の私の数学力について

Page 15: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dプログラミングを始めるのにプログラミングを始めるのに

数学力は必要なのか数学力は必要なのか

・・3D3Dプログラミングを始めた頃の私の数学力についてプログラミングを始めた頃の私の数学力について

・高校では普通科の文系コース・高校では普通科の文系コース ・・・・・・ 数学数学CCやってないやってない

Page 16: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dプログラミングを始めるのにプログラミングを始めるのに

数学力は必要なのか数学力は必要なのか

・・3D3Dプログラミングを始めた頃の私の数学力についてプログラミングを始めた頃の私の数学力について

・高校では普通科の文系コース・高校では普通科の文系コース ・・・・・・ 数学数学CCやってないやってない

・・数学のテストで赤点とった事も無くはない(小声)数学のテストで赤点とった事も無くはない(小声)

Page 17: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dプログラミングを始めるのにプログラミングを始めるのに

数学力は必要なのか数学力は必要なのか

・・3D3Dプログラミングを始めた頃の私の数学力についてプログラミングを始めた頃の私の数学力について

・高校では普通科の文系コース・高校では普通科の文系コース ・・・・・・ 数学数学CCやってないやってない

・・数学のテストで赤点とった事も無くはない(小声)数学のテストで赤点とった事も無くはない(小声)

・高校卒業してすぐ専門学校へ・高校卒業してすぐ専門学校へ ・・・・・・ 大学数学やってない大学数学やってない

Page 18: 3D勉強会 第1回 3Dプログラミングのススメ

でもなんとか頑張って人並みにはでもなんとか頑張って人並みには3D3Dプログラミングプログラミング

出来るようになれた。出来るようになれた。

Page 19: 3D勉強会 第1回 3Dプログラミングのススメ

でもなんとか頑張って人並みにはでもなんとか頑張って人並みには3D3Dプログラミングプログラミング

出来るようになれた。出来るようになれた。

つまり知識は今から付けても遅くはない。つまり知識は今から付けても遅くはない。

Page 20: 3D勉強会 第1回 3Dプログラミングのススメ

でもなんとか頑張って人並みにはでもなんとか頑張って人並みには3D3Dプログラミングプログラミング

出来るようになれた。出来るようになれた。

つまり知識は今から付けても遅くはない。つまり知識は今から付けても遅くはない。

最初は本を読んで知識を詰め込むより、サンプル等最初は本を読んで知識を詰め込むより、サンプル等をいじってプログラムに触ることを重視する。をいじってプログラムに触ることを重視する。

Page 21: 3D勉強会 第1回 3Dプログラミングのススメ

でもなんとか頑張って人並みにはでもなんとか頑張って人並みには3D3Dプログラミングプログラミング

出来るようになれた。出来るようになれた。

つまり知識は今から付けても遅くはない。つまり知識は今から付けても遅くはない。

最初は本を読んで知識を詰め込むより、サンプル等最初は本を読んで知識を詰め込むより、サンプル等をいじってプログラムに触ることを重視する。をいじってプログラムに触ることを重視する。

分からない事が発生したら勉強する。分からない事が発生したら勉強する。

Page 22: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・

・そもそも何から勉強し始めたらいいのかわからない・・・・そもそも何から勉強し始めたらいいのかわからない・・・

22..始めてみたけどすぐ挫折した始めてみたけどすぐ挫折した

Page 23: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・

・そもそも何から勉強し始めたらいいのかわからない・・・・そもそも何から勉強し始めたらいいのかわからない・・・

22..始めてみたけどすぐ挫折した始めてみたけどすぐ挫折した

・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・

Page 24: 3D勉強会 第1回 3Dプログラミングのススメ

3D3Dの勉強を始めるにあたっての心理的障壁の勉強を始めるにあたっての心理的障壁

11..むずそう(小並感)むずそう(小並感)

・・3D3Dって高度な数学の知識が必要なんでしょう?って高度な数学の知識が必要なんでしょう?

・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・・数学とか高校レベルで止まってるし文系だったしもう忘れたし・・・

・そもそも何から勉強し始めたらいいのかわからない・・・・そもそも何から勉強し始めたらいいのかわからない・・・

22..始めてみたけどすぐ挫折した始めてみたけどすぐ挫折した

・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・・何かの講座を見て箱を1個表示しただけで満足して終わってしまった・・・

・満足ゆく見た目になるまで凄く時間がかかりそうで心が折れた・満足ゆく見た目になるまで凄く時間がかかりそうで心が折れた

Page 25: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

Page 26: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

小目標を決める小目標を決める・目標なしに勉強し続けるのは辛い。あと区切りを作れる。・目標なしに勉強し続けるのは辛い。あと区切りを作れる。

Page 27: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

小目標を決める小目標を決める・目標なしに勉強し続けるのは辛い。あと区切りを作れる。・目標なしに勉強し続けるのは辛い。あと区切りを作れる。

出来るところまで進める出来るところまで進める・とりあえず自分の持ってる知識で出来るとこまで進めてみる。・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

Page 28: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

小目標を決める小目標を決める・目標なしに勉強し続けるのは辛い。あと区切りを作れる。・目標なしに勉強し続けるのは辛い。あと区切りを作れる。

出来るところまで進める出来るところまで進める・とりあえず自分の持ってる知識で出来るとこまで進めてみる。・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

わからなくなったらその時に調べるわからなくなったらその時に調べる・何に使うかわからない知識を勉強するのは辛い。・何に使うかわからない知識を勉強するのは辛い。

Page 29: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

小目標を決める小目標を決める・目標なしに勉強し続けるのは辛い。あと区切りを作れる。・目標なしに勉強し続けるのは辛い。あと区切りを作れる。

出来るところまで進める出来るところまで進める・とりあえず自分の持ってる知識で出来るとこまで進めてみる。・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

わからなくなったらその時に調べるわからなくなったらその時に調べる・何に使うかわからない知識を勉強するのは辛い。・何に使うかわからない知識を勉強するのは辛い。

無理しない無理しない・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。無理せず後回しする。無理せず後回しする。

Page 30: 3D勉強会 第1回 3Dプログラミングのススメ

モチベーションの保ち方モチベーションの保ち方

小目標を決める小目標を決める・目標なしに勉強し続けるのは辛い。あと区切りを作れる。・目標なしに勉強し続けるのは辛い。あと区切りを作れる。

出来るところまで進める出来るところまで進める・とりあえず自分の持ってる知識で出来るとこまで進めてみる。・とりあえず自分の持ってる知識で出来るとこまで進めてみる。

わからなくなったらその時に調べるわからなくなったらその時に調べる・何に使うかわからない知識を勉強するのは辛い。・何に使うかわからない知識を勉強するのは辛い。

無理しない無理しない・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。・前提知識が複数必要なものなどは各要素を個別に理解してからでもいい。無理せず後回しする。無理せず後回しする。

目標を達成したら新たな目標を決める目標を達成したら新たな目標を決める・別のプログラムを作る・別のプログラムを作るoror現在のプログラムへの機能追加等、現在のプログラムへの機能追加等、

とにかく興味が持てる事を。とにかく興味が持てる事を。

Page 31: 3D勉強会 第1回 3Dプログラミングのススメ

おすすめの勉強法は・・・おすすめの勉強法は・・・

ショボショボくてもくてもいいから何かいいから何か11本ゲーム的なものを作る本ゲーム的なものを作る

Page 32: 3D勉強会 第1回 3Dプログラミングのススメ

おすすめの勉強法は・・・おすすめの勉強法は・・・

ショボショボくてもくてもいいから何かいいから何か11本ゲーム的なものを作る本ゲーム的なものを作る

楽なのはシューティングゲーム楽なのはシューティングゲーム

Page 33: 3D勉強会 第1回 3Dプログラミングのススメ

おすすめの勉強法は・・・おすすめの勉強法は・・・

ショボショボくてもくてもいいから何かいいから何か11本ゲーム的なものを作る本ゲーム的なものを作る

楽なのはシューティングゲーム楽なのはシューティングゲーム

当たり判定は当たり判定は2D2D的でもいい。必要な前提知識が少なめで的でもいい。必要な前提知識が少なめで

入門には最適。入門には最適。

Page 34: 3D勉強会 第1回 3Dプログラミングのススメ

おすすめの勉強法は・・・おすすめの勉強法は・・・

ショボショボくてもくてもいいから何かいいから何か11本ゲーム的なものを作る本ゲーム的なものを作る

楽なのはシューティングゲーム楽なのはシューティングゲーム

当たり判定は当たり判定は2D2D的でもいい。必要な前提知識が少なめで的でもいい。必要な前提知識が少なめで

入門には最適。入門には最適。

凝った事が出来るようになったら色々要素が追加できる。凝った事が出来るようになったら色々要素が追加できる。

Page 35: 3D勉強会 第1回 3Dプログラミングのススメ

ということで前置きはこれぐらいにして・・・ということで前置きはこれぐらいにして・・・

Page 36: 3D勉強会 第1回 3Dプログラミングのススメ

ということで前置きはこれぐらいにして・・・ということで前置きはこれぐらいにして・・・

今回は今回は3D3Dプログラミングにおいて非常に重要な概プログラミングにおいて非常に重要な概

念である「変換行列」について触り程度にお話させ念である「変換行列」について触り程度にお話させて頂きます。て頂きます。

Page 37: 3D勉強会 第1回 3Dプログラミングのススメ

ということで前置きはこれぐらいにして・・・ということで前置きはこれぐらいにして・・・

今回は今回は3D3Dプログラミングにおいて非常に重要な概プログラミングにおいて非常に重要な概

念である「変換行列」について触り程度にお話させ念である「変換行列」について触り程度にお話させて頂きます。て頂きます。

行列行列・・・・・・英語で言うと英語で言うとMatrixMatrix

Page 38: 3D勉強会 第1回 3Dプログラミングのススメ

そもそも行列ってなんじゃそもそも行列ってなんじゃらほいらほい

Page 39: 3D勉強会 第1回 3Dプログラミングのススメ

そもそも行列ってなんじゃそもそも行列ってなんじゃらほいらほい

2D2D空間では空間ではXX・・YY座標・拡大縮小・回転で大体全て表現できる座標・拡大縮小・回転で大体全て表現できる

Page 40: 3D勉強会 第1回 3Dプログラミングのススメ

そもそも行列ってなんじゃそもそも行列ってなんじゃらほいらほい

2D2D空間では空間ではXX・・YY座標・拡大縮小・回転で大体全て表現できる座標・拡大縮小・回転で大体全て表現できる

また、画面上への反映が容易である(また、画面上への反映が容易である(XX・・YY座標がほぼそのままウィンド座標がほぼそのままウィンド

ウ上の座標になる)ウ上の座標になる)

Page 41: 3D勉強会 第1回 3Dプログラミングのススメ

そもそも行列ってなんじゃそもそも行列ってなんじゃらほいらほい

2D2D空間では空間ではXX・・YY座標・拡大縮小・回転で大体全て表現できる座標・拡大縮小・回転で大体全て表現できる

また、画面上への反映が容易である(また、画面上への反映が容易である(XX・・YY座標がほぼそのままウィンド座標がほぼそのままウィンド

ウ上の座標になる)ウ上の座標になる)

3D3Dではどうなのかではどうなのか

Page 42: 3D勉強会 第1回 3Dプログラミングのススメ

そもそも行列ってなんじゃそもそも行列ってなんじゃらほいらほい

2D2D空間では空間ではXX・・YY座標・拡大縮小・回転で大体全て表現できる座標・拡大縮小・回転で大体全て表現できる

また、画面上への反映が容易である(また、画面上への反映が容易である(XX・・YY座標がほぼそのままウィンド座標がほぼそのままウィンド

ウ上の座標になる)ウ上の座標になる)

3D3Dではどうなのかではどうなのか

そもそもそもそも3D3D空間を画面に描画するまでどのような変換が行われるのか空間を画面に描画するまでどのような変換が行われるのか

Page 43: 3D勉強会 第1回 3Dプログラミングのススメ

まず比較のためにまず比較のために2D2Dでは大体このような変換順序となるでは大体このような変換順序となる

Page 44: 3D勉強会 第1回 3Dプログラミングのススメ

まず比較のためにまず比較のために2D2Dでは大体このような変換順序となるでは大体このような変換順序となる

ローカル座標(スプライトの矩形の各頂点の座標とか)ローカル座標(スプライトの矩形の各頂点の座標とか)

Page 45: 3D勉強会 第1回 3Dプログラミングのススメ

まず比較のためにまず比較のために2D2Dでは大体このような変換順序となるでは大体このような変換順序となる

ローカル座標(スプライトの矩形の各頂点の座標とか)ローカル座標(スプライトの矩形の各頂点の座標とか)

↓↓

ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)

Page 46: 3D勉強会 第1回 3Dプログラミングのススメ

まず比較のためにまず比較のために2D2Dでは大体このような変換順序となるでは大体このような変換順序となる

ローカル座標(スプライトの矩形の各頂点の座標とか)ローカル座標(スプライトの矩形の各頂点の座標とか)

↓↓

ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)

Page 47: 3D勉強会 第1回 3Dプログラミングのススメ

まず比較のためにまず比較のために2D2Dでは大体このような変換順序となるでは大体このような変換順序となる

ローカル座標(スプライトの矩形の各頂点の座標とか)ローカル座標(スプライトの矩形の各頂点の座標とか)

↓↓

ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)ワールド座標(スプライト自体の移動・回転・拡大縮小を適用)

↓↓

スクリーン座標(実際の画面上に出力される座標)スクリーン座標(実際の画面上に出力される座標)

Page 48: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

Page 49: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

ローカル座標(ポリゴンの各頂点の座標とか)ローカル座標(ポリゴンの各頂点の座標とか)

Page 50: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

ローカル座標(ポリゴンの各頂点の座標とか)ローカル座標(ポリゴンの各頂点の座標とか)

↓↓

ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

Page 51: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

ローカル座標(ポリゴンの各頂点の座標とか)ローカル座標(ポリゴンの各頂点の座標とか)

↓↓

ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

↓↓

カメラ座標(ワールド座標をカメラから見た座標へ変換)カメラ座標(ワールド座標をカメラから見た座標へ変換)

Page 52: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

ローカル座標(ポリゴンの各頂点の座標とか)ローカル座標(ポリゴンの各頂点の座標とか)

↓↓

ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

↓↓

カメラ座標(ワールド座標をカメラから見た座標へ変換)カメラ座標(ワールド座標をカメラから見た座標へ変換)

↓↓

透視投影座標(遠近感を持たせる座標へ変換)透視投影座標(遠近感を持たせる座標へ変換)

Page 53: 3D勉強会 第1回 3Dプログラミングのススメ

そしてそして3D3Dの場合はの場合は

ローカル座標(ポリゴンの各頂点の座標とか)ローカル座標(ポリゴンの各頂点の座標とか)

↓↓

ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)ワールド座標(ポリゴン自体の座標・回転・拡大縮小を適用)

↓↓

カメラ座標(ワールド座標をカメラから見た座標へ変換)カメラ座標(ワールド座標をカメラから見た座標へ変換)

↓↓

透視投影座標(遠近感を持たせる座標へ変換)透視投影座標(遠近感を持たせる座標へ変換)

↓↓

スクリーン座標(実際の画面上に出力される座標へ変換)スクリーン座標(実際の画面上に出力される座標へ変換)

Page 54: 3D勉強会 第1回 3Dプログラミングのススメ

この流れを見ると普通の人はこう思うこの流れを見ると普通の人はこう思う

Page 55: 3D勉強会 第1回 3Dプログラミングのススメ

この流れを見ると普通の人はこう思うこの流れを見ると普通の人はこう思う

なんだか凄く複雑な計算が必要そうなんだか凄く複雑な計算が必要そう

Page 56: 3D勉強会 第1回 3Dプログラミングのススメ

この流れを見ると普通の人はこう思うこの流れを見ると普通の人はこう思う

なんだか凄く複雑な計算が必要そうなんだか凄く複雑な計算が必要そう

確かに、この手順をベタで計算すると大変手間がかかります確かに、この手順をベタで計算すると大変手間がかかります

Page 57: 3D勉強会 第1回 3Dプログラミングのススメ

この流れを見ると普通の人はこう思うこの流れを見ると普通の人はこう思う

なんだか凄く複雑な計算が必要そうなんだか凄く複雑な計算が必要そう

確かに、この手順をベタで計算すると大変手間がかかります確かに、この手順をベタで計算すると大変手間がかかります

最近のゲームではシーン全体で数十万ポリゴンとかザラ最近のゲームではシーン全体で数十万ポリゴンとかザラ

Page 58: 3D勉強会 第1回 3Dプログラミングのススメ

この流れを見ると普通の人はこう思うこの流れを見ると普通の人はこう思う

なんだか凄く複雑な計算が必要そうなんだか凄く複雑な計算が必要そう

確かに、この手順をベタで計算すると大変手間がかかります確かに、この手順をベタで計算すると大変手間がかかります

最近のゲームではシーン全体で数十万ポリゴンとかザラ最近のゲームではシーン全体で数十万ポリゴンとかザラ

このポリゴンの全ての頂点に対して移動・回転・拡大縮小をこのポリゴンの全ての頂点に対して移動・回転・拡大縮小をこの手順通りに適用する・・・どう考えてもヤバイこの手順通りに適用する・・・どう考えてもヤバイ

Page 59: 3D勉強会 第1回 3Dプログラミングのススメ

お待たせしました!お待たせしました!ここで変換行列の登場です!ここで変換行列の登場です!

Page 60: 3D勉強会 第1回 3Dプログラミングのススメ

お待たせしました!お待たせしました!ここで変換行列の登場です!ここで変換行列の登場です!

この気の遠くなるような手順を簡単で軽くするために必要なのが変換行この気の遠くなるような手順を簡単で軽くするために必要なのが変換行列なのです。列なのです。

Page 61: 3D勉強会 第1回 3Dプログラミングのススメ

お待たせしました!お待たせしました!ここで変換行列の登場です!ここで変換行列の登場です!

この気の遠くなるような手順を簡単で軽くするために必要なのが変換行この気の遠くなるような手順を簡単で軽くするために必要なのが変換行列なのです。列なのです。

変換行列のデータ構造変換行列のデータ構造

float matrix[4][4]; float matrix[4][4]; //// 4x44x4の浮動小数点配列で表されるの浮動小数点配列で表される

Page 62: 3D勉強会 第1回 3Dプログラミングのススメ

お待たせしました!お待たせしました!ここで変換行列の登場です!ここで変換行列の登場です!

この気の遠くなるような手順を簡単で軽くするために必要なのが変換行この気の遠くなるような手順を簡単で軽くするために必要なのが変換行列なのです。列なのです。

変換行列のデータ構造変換行列のデータ構造

float matrix[4][4]; float matrix[4][4]; //// 4x44x4の浮動小数点配列で表されるの浮動小数点配列で表される

変換行列には変換行列には33次元での移動・拡大縮小・回転の要素を全て詰めること次元での移動・拡大縮小・回転の要素を全て詰めること

ができる!ができる!

Page 63: 3D勉強会 第1回 3Dプログラミングのススメ

お待たせしました!お待たせしました!ここで変換行列の登場です!ここで変換行列の登場です!

この気の遠くなるような手順を簡単で軽くするために必要なのが変換行この気の遠くなるような手順を簡単で軽くするために必要なのが変換行列なのです。列なのです。

変換行列のデータ構造変換行列のデータ構造

float matrix[4][4]; float matrix[4][4]; //// 4x44x4の浮動小数点配列で表されるの浮動小数点配列で表される

変換行列には変換行列には33次元での移動・拡大縮小・回転の要素を全て詰めること次元での移動・拡大縮小・回転の要素を全て詰めること

ができる!ができる!

行列のどこに何を代入すればいいの?とかの話は長くなるので今回は行列のどこに何を代入すればいいの?とかの話は長くなるので今回は割愛。割愛。

Page 64: 3D勉強会 第1回 3Dプログラミングのススメ

先ほどの変換手順はローカル座標以外、先ほどの変換手順はローカル座標以外、全て変換行列で表現できる全て変換行列で表現できる

ローカル座標(ただの座標情報なのでこのままでいい)ローカル座標(ただの座標情報なのでこのままでいい)

↓↓

ワールド座標ワールド座標・・・・・・ワールド変換行列ワールド変換行列

↓↓

カメラ座標カメラ座標・・・・・・カメラ変換行列カメラ変換行列

↓↓

透視投影座標透視投影座標・・・・・・透視投影変換行列透視投影変換行列

↓↓

スクリーン座標スクリーン座標・・・・・・スクリーン変換行列スクリーン変換行列

Page 65: 3D勉強会 第1回 3Dプログラミングのススメ

では、この変換行列をでは、この変換行列を

具体的にどうすればいいのか具体的にどうすればいいのか

Page 66: 3D勉強会 第1回 3Dプログラミングのススメ

とても大事な変換行列の性質とても大事な変換行列の性質

変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮小・回転が全て適用された座標になる小・回転が全て適用された座標になる

Page 67: 3D勉強会 第1回 3Dプログラミングのススメ

とても大事な変換行列の性質とても大事な変換行列の性質

変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮小・回転が全て適用された座標になる小・回転が全て適用された座標になる

ローカル座標ローカル座標××ワールド変換行列ワールド変換行列 = = ワールド座標ワールド座標

Page 68: 3D勉強会 第1回 3Dプログラミングのススメ

とても大事な変換行列の性質とても大事な変換行列の性質

変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮小・回転が全て適用された座標になる小・回転が全て適用された座標になる

ローカル座標ローカル座標××ワールド変換行列ワールド変換行列 = = ワールド座標ワールド座標

掛け算の順番は掛け算の順番はhttp://msdn.microsoft.com/enhttp://msdn.microsoft.com/en--us/library/windows/desktop/bb206269(v=vs.85).aspxus/library/windows/desktop/bb206269(v=vs.85).aspx

Page 69: 3D勉強会 第1回 3Dプログラミングのススメ

とても大事な変換行列の性質とても大事な変換行列の性質

変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮変換行列をローカル座標に掛けると、変換行列に設定されている移動・拡大縮小・回転が全て適用された座標になる小・回転が全て適用された座標になる

ローカル座標ローカル座標××ワールド変換行列ワールド変換行列 = = ワールド座標ワールド座標

掛け算の順番は掛け算の順番はhttp://msdn.microsoft.com/enhttp://msdn.microsoft.com/en--us/library/windows/desktop/bb206269(v=vs.85).aspxus/library/windows/desktop/bb206269(v=vs.85).aspx

つまりローカル座標つまりローカル座標××ワールド変換行列ワールド変換行列××カメラ変換行列カメラ変換行列××透視投影変換行列透視投影変換行列××スクリーン変換行列スクリーン変換行列

= = 求めたい最終結果の座標!求めたい最終結果の座標!

Page 70: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その変換行列の性質その22

行列同士も掛け算できる行列同士も掛け算できる

Page 71: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その変換行列の性質その22

行列同士も掛け算できる行列同士も掛け算できる

つまりローカル座標に掛ける前にあらかじめつまりローカル座標に掛ける前にあらかじめ変換行列同士を掛けておくことで更に計算量変換行列同士を掛けておくことで更に計算量を減らすことが出来る!を減らすことが出来る!

Page 72: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その変換行列の性質その22

行列同士も掛け算できる行列同士も掛け算できる

つまりローカル座標に掛ける前にあらかじめつまりローカル座標に掛ける前にあらかじめ変換行列同士を掛けておくことで更に計算量変換行列同士を掛けておくことで更に計算量を減らすことが出来る!を減らすことが出来る!

変換行列ありがとう!変換行列最高!変換行列ありがとう!変換行列最高!

Page 73: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その3変換行列の性質その3

((行列1行列1××行列2行列2)と、)と、 ((行列2行列2××行列1行列1)では)では

計算結果が異なる!=交換法則が成り立たない計算結果が異なる!=交換法則が成り立たない

Page 74: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その3変換行列の性質その3

((行列1行列1××行列2行列2)と、)と、 ((行列2行列2××行列1行列1)では)では

計算結果が異なる!=交換法則が成り立たない計算結果が異なる!=交換法則が成り立たない

これはこれはBLBL作品等におけるカップリングと同様の性質作品等におけるカップリングと同様の性質

であり、掛ける順番には注意が必要であるであり、掛ける順番には注意が必要である

Page 75: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の性質その3変換行列の性質その3

((行列1行列1××行列2行列2)と、)と、 ((行列2行列2××行列1行列1)では)では

計算結果が異なる!=交換法則が成り立たない計算結果が異なる!=交換法則が成り立たない

これはこれはBLBL作品等におけるカップリングと同様の性質作品等におけるカップリングと同様の性質

であり、掛ける順番には注意が必要であるであり、掛ける順番には注意が必要である

実際のプログラムで動作を確認してみよう!実際のプログラムで動作を確認してみよう!

Page 76: 3D勉強会 第1回 3Dプログラミングのススメ

変換行列の生成方法変換行列の生成方法

変換行列の生成は多くの変換行列の生成は多くの3D3Dライブラリにおいて豊富なヘルパー関数がライブラリにおいて豊富なヘルパー関数が

用意されており、イチから計算する必要はありません。用意されており、イチから計算する必要はありません。

移動行列生成関数(回転・拡大縮小の関数ももちろんある)移動行列生成関数(回転・拡大縮小の関数ももちろんある)

http://msdn.microsoft.com/jahttp://msdn.microsoft.com/ja--jp/library/cc372906.aspxjp/library/cc372906.aspx

カメラ行列生成関数カメラ行列生成関数

http://msdn.microsoft.com/jahttp://msdn.microsoft.com/ja--jp/library/cc372877.aspxjp/library/cc372877.aspx

透視投影変換行列生成関数透視投影変換行列生成関数

http://msdn.microsoft.com/jahttp://msdn.microsoft.com/ja--jp/library/cc372898.aspxjp/library/cc372898.aspx

スクリーン変換行列スクリーン変換行列

ライブラリ初期化時にウィンドウ情報と一緒にセットされるライブラリ初期化時にウィンドウ情報と一緒にセットされる

通常意識する必要なし通常意識する必要なし

Page 77: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

Page 78: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

行列こそが行列こそが3D3Dプログラミングの基本!とっても大事!プログラミングの基本!とっても大事!

Page 79: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

行列こそが行列こそが3D3Dプログラミングの基本!とっても大事!プログラミングの基本!とっても大事!

3D3D描画について、一から全て自分で計算する必要はない!描画について、一から全て自分で計算する必要はない!

Page 80: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

行列こそが行列こそが3D3Dプログラミングの基本!とっても大事!プログラミングの基本!とっても大事!

3D3D描画について、一から全て自分で計算する必要はない!描画について、一から全て自分で計算する必要はない!

かなり大部分をライブラリでカバーしてくれている。かなり大部分をライブラリでカバーしてくれている。

Page 81: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

行列こそが行列こそが3D3Dプログラミングの基本!とっても大事!プログラミングの基本!とっても大事!

3D3D描画について、一から全て自分で計算する必要はない!描画について、一から全て自分で計算する必要はない!

かなり大部分をライブラリでカバーしてくれている。かなり大部分をライブラリでカバーしてくれている。

実際の具体的な演算を理解するのは実際の具体的な演算を理解するのは3D3Dプログラミングという概念に慣れプログラミングという概念に慣れてからでも遅くはない!てからでも遅くはない!

Page 82: 3D勉強会 第1回 3Dプログラミングのススメ

まとめまとめ

行列こそが行列こそが3D3Dプログラミングの基本!とっても大事!プログラミングの基本!とっても大事!

3D3D描画について、一から全て自分で計算する必要はない!描画について、一から全て自分で計算する必要はない!

かなり大部分をライブラリでカバーしてくれている。かなり大部分をライブラリでカバーしてくれている。

実際の具体的な演算を理解するのは実際の具体的な演算を理解するのは3D3Dプログラミングという概念に慣れプログラミングという概念に慣れてからでも遅くはない!てからでも遅くはない!

3D3Dを恐れる必要はない。簡単なを恐れる必要はない。簡単な3D3Dプログラムならそんなに知識は必要プログラムならそんなに知識は必要ない。ない。

Page 83: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

Page 84: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

社内社内3D3D勉強会やりませんか?勉強会やりませんか?

Page 85: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

社内社内3D3D勉強会やりませんか?勉強会やりませんか?

これからスマホアプリでもこれからスマホアプリでも3D3D描画によるものが更に増えてくる筈。描画によるものが更に増えてくる筈。

Page 86: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

社内社内3D3D勉強会やりませんか?勉強会やりませんか?

これからスマホアプリでもこれからスマホアプリでも3D3D描画によるものが更に増えてくる筈。描画によるものが更に増えてくる筈。

今すぐに今すぐに3D3Dアプリ開発に手を出すわけではないにしても、技術の蓄積をアプリ開発に手を出すわけではないにしても、技術の蓄積をしておくに越したことはない。しておくに越したことはない。

Page 87: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

社内社内3D3D勉強会やりませんか?勉強会やりませんか?

これからスマホアプリでもこれからスマホアプリでも3D3D描画によるものが更に増えてくる筈。描画によるものが更に増えてくる筈。

今すぐに今すぐに3D3Dアプリ開発に手を出すわけではないにしても、技術の蓄積をアプリ開発に手を出すわけではないにしても、技術の蓄積をしておくに越したことはない。しておくに越したことはない。

UnityUnityを利用した開発にも絶対役立つ。なんならを利用した開発にも絶対役立つ。なんならUnityUnity勉強会を含めてし勉強会を含めてしまってもよい。まってもよい。

Page 88: 3D勉強会 第1回 3Dプログラミングのススメ

そして最後に私からの提案・・・そして最後に私からの提案・・・

社内社内3D3D勉強会やりませんか?勉強会やりませんか?

これからスマホアプリでもこれからスマホアプリでも3D3D描画によるものが更に増えてくる筈。描画によるものが更に増えてくる筈。

今すぐに今すぐに3D3Dアプリ開発に手を出すわけではないにしても、技術の蓄積をアプリ開発に手を出すわけではないにしても、技術の蓄積をしておくに越したことはない。しておくに越したことはない。

UnityUnityを利用した開発にも絶対役立つ。なんならを利用した開発にも絶対役立つ。なんならUnityUnity勉強会を含めてし勉強会を含めてしまってもよい。まってもよい。

将来への研究投資として会社からの支援があればと思います。将来への研究投資として会社からの支援があればと思います。

Page 89: 3D勉強会 第1回 3Dプログラミングのススメ

ご清聴ありがとうございました!ご清聴ありがとうございました!