SlideShare a Scribd company logo
OpenGLと行列についてnarrative nights 株式会社三好康祐
今回の目標OpenGLがどうやって表示を行っているかのフローについて理解する行列のイメージをつかむZバッファについて理解する
OpenGLは何をしてくれる?3次元の座標値をいっぱい与えるとしかるべき変換作業を行って座標変換したりテクスチャ張ったりライトを当てたり etc…端末の画面に表示をしてくれる (=ピクセルを1個ずつプチプチ打ってくれる)
行列glPushMatrix(),  glPopMatrix(), glMatrixMode() etc..PROJECTION_MODE, MODELVIEW_MODEって何だろう?良く出てくるMatrix(=行列)って一体何だろう?行列ってそもそも何の為に必要なんだろう?
算数での簡単な例{13, 4,  15,  6,  12,  1, …..,  23}といった様に、適当な数字が10個あるこれら1個1個に対して、5倍して3を足した値それぞれ求めなさい
Javaで書くとint numbers[] = {13, 4, 15, 6, 12, 1,..., 23};for(int i=0; i<10; ++i) {  int num = numbers[i];int num2 = num * 5 + 3;System.out.println(num2);}
もう少し難しくした例{13,4, 15, 6, 12, 1….. 23}という10個の数字があってこれら1個1個に対して、・5倍して3を足し、・その結果を、2倍して、1を引き・その結果にさらに、4倍して、6を足した結果は?
Javaで書くとint numbers[] = {13, 4, 15, 6, 12, 1,..., 23};for(int i=0; i<10; ++i) {  int num = numbers[i];int num2 = num * 5 + 3;  int num3 = num2 * 2 - 1;  int num4 = num3 * 4 + 6;System.out.println(num4);}
 5倍して3を足し
 2倍して、1を引き
 4倍して、6を足すa’ = 4 × (2 ×(5 × a + 3) -1) + 6↓      a’ = 4 × ((10× a + 6) -1) + 6↓      a’ = 40× a + 24 - 4 + 6↓      a’ = 40× a + 26
for(int i=0; i<10; ++i) {  int num = numbers[i];int num2 = num * 5 + 3;  int num3 = num2 * 2 - 1;  int num4 = num3 * 4 + 6;}           for(int i=0; i<10; ++i) {  int num = numbers[i];  int num2 = num * 40 + 26; }1回にまとまる!
3Dでの例8頂点分の座標があったとしてfloat vertex[] = {	-1.0f, -1.0f,  1.0f, // x,y,z	 1.0f, -1.0f,  1.0f,	 1.0f,  1.0f,  1.0f,	-1.0f,  1.0f,  1.0f,	 1.0f, -1.0f, -1.0f,	-1.0f, -1.0f, -1.0f,	-1.0f,  1.0f, -1.0f,	 1.0f,  1.0f, -1.0f};
それらの8頂点に対して、(-1,0,0)だけ移動してx,y,z成分をそれぞれ2倍してX軸を中心に、45度回転させて回転した状態から(0,5,0)だけ移動したらそれぞれの座標値はどこになる?
移動、回転、拡縮といった変換は、それぞれ行列によって表現できる例) x、y、zをそれぞれ2.0倍する変換xyZ120000200002000012x2y2Z1×
(-1,0,0) 移動X軸45度回転(0,5,0)移動2倍xyz××××xyz×1個にまとめられる!現在の複雑な状態が1個の行列で表現できる
OpenGL内の行列OpenGLは内部に、二つ行列を1個ずつ持っているPROJECTION行列MODEL_VIEW行列それぞれ何をする為の行列なんだろう?
gl.glMatrixMode(GL10.GL_PROJECTION); //↑これから呼び出すMatrix用命令は、PROJECTION 行列に対して行うgl.glLoadIdentity();// 行列を初期化gl.glFrustumf(-1,1, -1.5, 1.5, 1, 10);gl.glMatrixMode(GL10.GL_MODELVIEW);//↑これから呼び出すMatrix用命令は、MODELVIEW 行列に対して行うgl.glLoadIdentity(); // 行列を初期化gl.glTranslatef(0, 0, -3.0f);gl.glScalef(0.5f, 0.5f, 0.5f);gl.glRotatef(45, 0, 1, 0);同じglLoadIdentity()の呼び出しでも意味が違ってくる
PROJECTION行列Projection = 投影投影= 3次元上の点を2次元の平面上の点に写す
パース付きPROJECTION行列glFrustumf()にて行列を生成パース = 奥行き感奥行き感 = 遠くの物ほど小さく見せる どれくらい小さく見せるか、で遠近感を調整
glFrustumf(-1.5f,1.5f, -1.0f, 1.0f, 1.0f, 10.0f);広角レンズglFrustumf(-0.75f,0.75f, -0.5f,0.5f, 1.0f, 30.0f);望遠レンズ画角が大きい=遠くになるとすぐ小さくなる画角が小さい=遠く離れてもあまり小さくならない
パース無しPROJECTION行列glOrthof()で行列を生成パースが無い = 奥行き感が無い奥行き感が無い = 遠くに行っても大きさ同じ
パースが無い状態で、真正面から見たら?2DのUI表示はこの方式で表示している
MODELVIEW行列モノの位置やカメラの位置を表現する為の行列gl.glTranslatef(0, 0, -3.0f);// 移動してgl.glScalef(2.0f, 2.0f, 2.0f);  // 拡大してgl.glRotatef(45, 0, 1, 0);      // 回転
glScalef()glTranslatef()glRotatef()xyz×××xyz×OpenGL内では1個の行列(=MODELVIEW行列)にまとめられている
glPushMatrix()glPopMatrix()現在のMODELVIEW 行列 (=現在まで掛け合わされた行列の結果)を、glPushMatrix()で保存glPopMatrix()で復元
画面に表示されるまでPROJECTION行列MODELVIEW行列VIEWPORT変換行列x’y’z’xyz画面上の座標値×××※-1.0~1.0 といった座標系から0~320といった実際のピクセル単位での座標系に変換する為の行列
Zバッファ画面上の各ピクセルの座標値x’ y’z’さっき使わなかった奥行き値=zデプス値だけを全ピクセル分記録している場所がある =  Zバッファ(depthバッファ)

More Related Content

PPTX
CG2013 02
PPTX
CG2013 07
PPTX
CG2013 03
PPTX
CG2013 01
PPTX
CG2013 05
PPTX
CG2013 06
PPTX
CG2013 11
PPTX
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
CG2013 02
CG2013 07
CG2013 03
CG2013 01
CG2013 05
CG2013 06
CG2013 11
【Unity道場スペシャル 2017博多】クォータニオン完全マスター

What's hot (20)

PDF
【Unite Tokyo 2018】誘導ミサイル完全マスター
PDF
【Unity道場】ゲーム制作に使う数学を学習しよう
PPTX
x86x64 SSE4.2 POPCNT
PDF
Rの初歩: 6. グラフィックス
PPTX
The boolean operation for Cubic Bezier
PPTX
CG2013 08
PDF
最小カットを使って「燃やす埋める問題」を解く
PDF
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
PDF
glossはおもろい
PDF
Popcntによるハミング距離計算
PDF
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
PPT
アルゴリズムイントロダクション15章 動的計画法
PDF
kagamicomput201709
PDF
llvm入門
PPTX
論理指向とプログラミング2010年度秋学期第9回
PDF
kagamicomput201708
ODP
数列で学ぶ初めての CommonLisp #fibonacci
PDF
楕円曲線入門 トーラスと楕円曲線のつながり
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unity道場】ゲーム制作に使う数学を学習しよう
x86x64 SSE4.2 POPCNT
Rの初歩: 6. グラフィックス
The boolean operation for Cubic Bezier
CG2013 08
最小カットを使って「燃やす埋める問題」を解く
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
glossはおもろい
Popcntによるハミング距離計算
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
アルゴリズムイントロダクション15章 動的計画法
kagamicomput201709
llvm入門
論理指向とプログラミング2010年度秋学期第9回
kagamicomput201708
数列で学ぶ初めての CommonLisp #fibonacci
楕円曲線入門 トーラスと楕円曲線のつながり
Ad

Viewers also liked (20)

PPTX
OpenGLと行列
PDF
OpenGL ES Introduction
KEY
SurfaceTextureとシェーダを使って遊んでみる
PDF
ネイティブ原理主義
PPTX
どこでも動くゲームを作るためのベタープラクティス
PDF
簡単!OpenGL ES 2.0フラグメントシェーダー
PDF
FiltersでGLSLを楽しく学んじゃおう!
PPTX
OpenGL ES2.0 一問一答
PDF
OpenGL 3DCG
PPTX
Live2Dの描画の裏側の話
PPT
視野変換1(基礎編)
PDF
GLSLによるシェーダーアートことはじめ
PDF
Tabc vol3 テクニカルアーティストを始めるにあたって
PPT
Direct xとopenglの隠蔽実装例
PDF
中級グラフィックス入門~シャドウマッピング総まとめ~
PDF
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
PPT
OpenGL Basics
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
PDF
Introducing libpd -Pdをアプリのサウンドエンジンに-
PDF
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
OpenGLと行列
OpenGL ES Introduction
SurfaceTextureとシェーダを使って遊んでみる
ネイティブ原理主義
どこでも動くゲームを作るためのベタープラクティス
簡単!OpenGL ES 2.0フラグメントシェーダー
FiltersでGLSLを楽しく学んじゃおう!
OpenGL ES2.0 一問一答
OpenGL 3DCG
Live2Dの描画の裏側の話
視野変換1(基礎編)
GLSLによるシェーダーアートことはじめ
Tabc vol3 テクニカルアーティストを始めるにあたって
Direct xとopenglの隠蔽実装例
中級グラフィックス入門~シャドウマッピング総まとめ~
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
OpenGL Basics
カスタムメモリマネージャと高速なメモリアロケータについて
Introducing libpd -Pdをアプリのサウンドエンジンに-
テクニカルアーティストの仕事とスキル ~パイプライン系TAの事例~
Ad

Similar to OpenGLと行列 (20)

PPTX
プログラミング技法特論第4回
PDF
Processing授業テキスト
PDF
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PDF
Rで学ぶ逆変換(逆関数)法
PDF
Android OpenGL HandsOn
PPTX
シェーダー伝道師 第二回
PDF
15分でざっくり分かるScala入門
PDF
ディジタル信号処理 課題解説(その3) 2014年度版
PDF
Processing
PPTX
プログラミング技法特論第8回
PDF
p5.js 授業テキスト
PDF
STC-OC2019_1st201906
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
PDF
動的計画法入門(An introduction to Dynamic Programming)
PDF
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
PDF
【Unity道場スペシャル 2017札幌】乱数完全マスター
KEY
Clojure programming-chapter-2
PPTX
20150725 オープンキャンパス資料
PPTX
明日機械学習に役立つかもしれない数学
プログラミング技法特論第4回
Processing授業テキスト
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
Rで学ぶ逆変換(逆関数)法
Android OpenGL HandsOn
シェーダー伝道師 第二回
15分でざっくり分かるScala入門
ディジタル信号処理 課題解説(その3) 2014年度版
Processing
プログラミング技法特論第8回
p5.js 授業テキスト
STC-OC2019_1st201906
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
動的計画法入門(An introduction to Dynamic Programming)
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017札幌】乱数完全マスター
Clojure programming-chapter-2
20150725 オープンキャンパス資料
明日機械学習に役立つかもしれない数学

OpenGLと行列