SlideShare una empresa de Scribd logo
1 de 28
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); }
[object Object]
 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倍する変換 x y Z 1 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 1 2x 2y 2Z 1 ×
(-1,0,0) 移動 X軸45度回転 (0,5,0)移動 2倍 x y z × × × × x y z × 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() x y z × × × x y z × OpenGL内では1個の行列(=MODELVIEW行列) にまとめられている
glPushMatrix()glPopMatrix() 現在のMODELVIEW 行列 (=現在まで掛け合わされた行列の結果)を、 glPushMatrix()で保存 glPopMatrix()で復元
画面に表示されるまで PROJECTION行列 MODELVIEW行列 VIEWPORT変換行列 x’ y’ z’ x y z 画面上の 座標値 × × × ※-1.0~1.0 といった座標系から0~320と いった実際のピクセル単位での座標系に 変換する為の行列
Zバッファ 画面上の各ピクセルの座標値 x’  y’ z’ さっき使わなかった奥行き値=zデプス値だけを全ピクセル分記録している場所がある   =  Zバッファ(depthバッファ)

Más contenido relacionado

La actualidad más candente

ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
MITSUNARI Shigeo
 
論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回
Noritada Shimizu
 

La actualidad más candente (20)

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

Destacado

Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
tecopark
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 

Destacado (20)

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

Similar a OpenGLと行列

プログラミング技法特論第4回
プログラミング技法特論第4回プログラミング技法特論第4回
プログラミング技法特論第4回
Noritada Shimizu
 
プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回
Noritada Shimizu
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 

Similar a OpenGLと行列 (20)

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

OpenGLと行列