質問編集履歴

2

理想の動きを再現した動画のリンクを追加しました。

2023/06/20 13:35

投稿

siwameron
siwameron

スコア0

test CHANGED
File without changes
test CHANGED
@@ -34,3 +34,9 @@
34
34
  実際の動き
35
35
  ![![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/159e29ec-e2df-42bf-a7e9-d062ca75a2aa.png)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/b8f39d0d-0580-44f3-8ff9-6a7afa8d40df.png)![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/d80bcd86-190f-45cc-b5f5-81d30a31915a.png)
36
36
  上の画像はマウスを右に動かす前、下の画像はマウスを右に動かした後。
37
+
38
+ 理想の動き
39
+ 実際にBlenderというソフトを使用して、私が作成しているソフトにしてほしい動作の様子を再現しました。
40
+ 私は以下の動画のようなカメラの動きを実装したいです。
41
+ 動画のリンクです。
42
+ https://youtu.be/fB5qPW6og8U

1

現状のコードや質問を詳しくしました。

2023/06/20 12:48

投稿

siwameron
siwameron

スコア0

test CHANGED
File without changes
test CHANGED
@@ -11,3 +11,26 @@
11
11
  理想的なカメラの動きは、Blenderなどで、視点の中心に立方体をおいて、その立方体を360度眺めたり、平行移動したりした時の動きです。
12
12
  このような動きを実装するにはどうしたらよいでしょうか。
13
13
 
14
+ 追記
15
+
16
+ 遅れてすみません。
17
+ 質問には、glLookAtを使ってと書きましたが、私はこちらの資料をGLFWによるOpenGL入門https://tokoik.github.io/GLFWdraft.pdf
18
+ を参考にプログラムを書きました。こちらの資料では、glLookAt関数と同様の処理をlookAt関数を作成しました。
19
+
20
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/67bad348-79e8-4645-9054-4367c85b3735.png)
21
+
22
+ posにマウスの増加量を示すlocationを使って、球体座標のような座標を作成しています。
23
+ この処理で、マウスを動かすことで、立方体を中心とした球の表面をカメラが沿うような動きをさせています。
24
+
25
+ 上のlookAt関数の引数や機能はgluLookAt関数と同じだと思われます。第1から第3引数にカメラの座標、第4から第6引数にカメラの視線を向かせる方向を示す座標、第7から第9引数にカメラの上方向を示す座標です。
26
+ 今回は、球に沿った座標を入れたposがカメラの座標となり、視線が原点を向き続けることで、原点周辺にある、立方体を360度眺めることができています。
27
+
28
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/0fd42649-42be-481b-a756-eca395d62906.png)![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/3e59e5b2-5967-4937-8a34-183834504d4d.png)
29
+ 画像では位置や大きさが変わっているように見えますが、実際にはその場で大きさも変わらずに、カメラが立方体の周囲を回りこんだような出力が得られています。
30
+
31
+ 現在のプログラムでは行っていませんが、カメラを平行移動のみさせることはできます。
32
+ ただ、カメラを球面座標を用いた移動をさせた後に、通常のx,y座標軸ではなくカメラの姿勢に沿った平行移動をさせようとすると、カメラの姿勢に沿った座標軸ではないのか、もしかしたら通常のx,y座標軸に沿った移動をしてるのか、画像の立方体が大きさや回転によって見えている面が変わらず、画像の立方体をトリミングして左に動かしたかのような平行移動をさせたいのですが、うまくいきません。
33
+
34
+ 実際の動き
35
+ ![![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/159e29ec-e2df-42bf-a7e9-d062ca75a2aa.png)](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/b8f39d0d-0580-44f3-8ff9-6a7afa8d40df.png)![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-06-19/d80bcd86-190f-45cc-b5f5-81d30a31915a.png)
36
+ 上の画像はマウスを右に動かす前、下の画像はマウスを右に動かした後。