3DCGの座標変換ですが色々な説明があり色々な解説があり困っています。まずワールド座標変換と呼ばれる(スケール、回転、平行移動)の行列を用意しました。そのあとビュー射影行列を用意しましたがこのあとどうすればいいのでしょうか?
参考サイト: http://www.inftyproject.org/suzuki/lectures/java/ToBegin.pdf
参考サイト2: https://yttm-work.jp/gmpg/gmpg_0003.html
参考サイト3: http://marupeke296.com/DXG_No72_ViewProjInfo.html
参考サイト4: https://ja.wikibooks.org/wiki/%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/3D%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF
参考サイト: https://monolizm.com/sab/pdf/%E7%AC%AC%E4%B8%89%E5%9B%9E_%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99(%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A93D%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E6%8F%8F%E7%94%BB%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF).pdf
ビュー行列 * プロジェクション行列 でビュー射影配列を得る事ができるはずです。
cpp
1 2class Game 3{ 4public: 5 Vector3 cv; 6 7 Game(); 8 9 bool Initialization(); 10 11 bool RunLoop(); 12 13 void Update(); 14 void GenerateOutput(); 15 16 17private: 18 bool mIsRunLoop;//メインループ 19 20 21 Vector3 pos; 22 23 24 //ビュー行列 25 GLfloat view[4][4] = { 26 {0,0,0,0}, 27 {0,0,0,0}, 28 29 {0,0,0,0}, 30 {0,0,0,1} 31 32 }; 33 34 //プロジェクション 35 GLfloat projection[4][4] = { 36 { 0,0,0,0 }, 37 { 0,0,0,0 }, 38 39 { 0,0,0,0 }, 40 { 0,0,0,0 }, 41 }; 42 43 44 //頂点バッファー 45 GLfloat Vertex[18] = 46 { 47 -0.5, 0.5, 1.0, 48 -0.5, -0.5, 1.0, 49 0.5, -0.5, 1.0, 50 51 -0.5, 0.5, 1.0, 52 0.5, 0.5, 1.0, 53 0.5, -0.5, 1.0 54 }; 55 56 57 58 59 60 61 //スケール行列 62 const GLfloat scale[4][4] = { 63 {1,0,0,0}, 64 {0,1,0,0}, 65 {0,0,1,0}, 66 {0,0,0,1} 67 }; 68 69 70 //回転 71 float r = 1; 72 const GLfloat rotate[4][4] = { 73 (pos.x * pos.x +(1 - cos(r)) + cos(r)), 74 (pos.x * pos.y +(1 - cos(r)) + pos.z * sin(r)) 75 ,(pos.x * pos.z +(1 - cos(r)) - pos.y * sin(r)),0, 76 77 78 (pos.x * pos.x +(1 - cos(r)) + sin(r)), 79 (pos.y * pos.y +(1 - cos(r)) + cos(r)), 80 (pos.y * pos.z +(1 - cos(r)) + pos.x * sin(r)),0, 81 82 83 (pos.x * pos.z + (1 - cos(r)) - pos.z * sin(r)), 84 (pos.y * pos.z +(1 - cos(r)) - pos.x * sin(r)), 85 (pos.z * pos.z + (1 - cos(r)) + cos(r)),0, 86 }; 87 88 89 //平行移動 90 float mx = 0; 91 float my = 0; 92 float mz = 0; 93 const GLfloat move[4][4] = 94 { 95 1,0,0,mx, 96 0,1,0,my, 97 0,0,1,mz, 98 0,0,0,1, 99 }; 100
GLSL
1#version 400 2//頂点シェーダー 3 4in vec3 position;//頂点座標 5 6uniform mat4 scale;//スケール行列 7uniform mat4 rotate;//回転行列 8uniform mat4 move;//平行移動行列 9 10 11 12void main() 13{ 14 vec4 v = vec4(position ,1.0); 15 v =* scale; 16 v =* rotate; 17 v =* move; 18 19 20 21 22 23 gl_Position = scale * rotate * move * v; 24 //gl_Position = v; 25} 26 27
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/15 04:35
退会済みユーザー
2020/09/15 04:49
2020/09/15 04:55
退会済みユーザー
2020/09/15 04:57
2020/09/15 04:58
退会済みユーザー
2020/09/15 05:17