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

Post on 24-May-2015

13.287 views 1 download

description

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

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

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

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

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

齊藤齊藤 一誠一誠

・・自己紹介自己紹介

・・自己紹介自己紹介

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

・・自己紹介自己紹介

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

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

・・自己紹介自己紹介

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

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

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

・・自己紹介自己紹介

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

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

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

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

・・自己紹介自己紹介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

↓↓

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

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

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

↓↓

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

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

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

↓↓

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

↓↓

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

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

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

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

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

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

↓↓

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

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

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

↓↓

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

↓↓

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

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

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

↓↓

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

↓↓

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

↓↓

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

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

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

↓↓

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

↓↓

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

↓↓

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

↓↓

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ができる!ができる!

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

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

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

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

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

ができる!ができる!

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

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

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

↓↓

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

↓↓

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

↓↓

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

↓↓

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

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

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

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

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

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

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

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

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

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

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

掛け算の順番は掛け算の順番は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

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

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

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

掛け算の順番は掛け算の順番は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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

変換行列の生成は多くの変換行列の生成は多くの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

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

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

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

まとめまとめ

まとめまとめ

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

まとめまとめ

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

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

まとめまとめ

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

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

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

まとめまとめ

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

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

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

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

まとめまとめ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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