GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
dxlib_camera.h
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
8#ifndef DESIGNLAB_DXLIB_CAMERA_H_
9#define DESIGNLAB_DXLIB_CAMERA_H_
10
11
12#include <Dxlib.h>
13
14#include "math_quaternion.h"
15
16
17namespace designlab::enums
18{
19
36
37} // namespace designlab::enums
38
39
40namespace designlab
41{
42
53class DxlibCamera final
54{
55public:
57
59 void Update();
60
63
66 void AddCameraToTargetLength(float length_dif);
67
68
72
76 {
77 return camera_view_mode_;
78 }
79
83 inline void SetTargetPos(const Vector3& pos)
84 {
85 goal_camera_state_.target_pos = pos;
86 }
87
91 {
92 return goal_camera_state_.camera_quat.GetNormalized();
93 }
94
97 inline void SetCameraQuat(const Quaternion& quat)
98 {
99 goal_camera_state_.camera_quat = quat.GetNormalized();
100 }
101
104 inline void SetFreeTargetPos(const Vector3& pos)
105 {
106 free_controlled_target_pos_ = pos;
107 }
108
112 {
113 return free_controlled_target_pos_;
114 }
115
116 constexpr Quaternion GetNowCameraQuat() const
117 {
118 return now_camera_state_.camera_quat;
119 }
120
121 constexpr Vector3 GetNowTargetPos() const
122 {
123 return now_camera_state_.target_pos;
124 }
125
126 constexpr float GetNowCameraToTargetLength() const
127 {
128 return now_camera_state_.length_camera_to_target;
129 }
130
131 constexpr Vector3 GetNowCameraPos() const
132 {
133 Vector3 camera_target_dif =
134 RotateVector3(kDefaultCameraFrontVec, now_camera_state_.camera_quat) *
135 now_camera_state_.length_camera_to_target;
136
137 return camera_target_dif + now_camera_state_.target_pos;
138 }
139
140private:
141 static constexpr float kDefaultCameraZoom{ 1500.f };
142
143 struct CameraState final
144 {
145 CameraState() : camera_quat{}, target_pos{}, length_camera_to_target(0) {}
146
147 Quaternion camera_quat;
148 Vector3 target_pos;
149 float length_camera_to_target;
150 };
151
152
153 // now_camera_state_ の値で,カメラの位置と姿勢を dxlib の関数でセットする.
154 void SetCameraPosAndRot();
155
156
157 constexpr static bool kOutputDebugLog = false;
158
159 const Vector3 kDefaultCameraFrontVec;
160
161 const Vector3 kDefaultCameraUpVec;
162
163
164 enums::CameraViewMode camera_view_mode_;
165
166 Vector3 free_controlled_target_pos_;
167
168 CameraState now_camera_state_;
169
170 CameraState goal_camera_state_;
171};
172
173} // namespace designlab
174
175
176#endif // DESIGNLAB_DXLIB_CAMERA_H_
Dxlib の3Dのカメラの状態を管理するクラス.
Vector3 GetFreeTargetPos() const
注視点を操作する際の,カメラの注視する座標を取得する.
constexpr Vector3 GetNowCameraPos() const
enums::CameraViewMode GetCameraViewMode() const
カメラのモードを取得する
void AddCameraToTargetLength(float length_dif)
カメラの注視する目標の座標からカメラまでの距離を増やす.
void InitCameraTargetLength()
カメラと注視点との距離を初期化する.
constexpr Quaternion GetNowCameraQuat() const
void Update()
カメラの位置などの更新を行う.毎フレーム実行すること.
constexpr Vector3 GetNowTargetPos() const
void SetTargetPos(const Vector3 &pos)
カメラの注視する目標の座標をセットする. camera の mode が kFreeControlledAndMovableTarget の時はセットできない.
Quaternion GetCameraQuat() const
カメラの回転を表すクォータニオンを取得する.
void SetCameraViewMode(enums::CameraViewMode mode)
カメラのモードをセットする.同時にカメラの目標回転角度などを設定する.
constexpr float GetNowCameraToTargetLength() const
void SetFreeTargetPos(const Vector3 &pos)
注視点を操作する際の,カメラの注視する座標をセットする.
void SetCameraQuat(const Quaternion &quat)
カメラのクォータニオンをセットする.
CameraViewMode
カメラの視点を表す列挙体.
@ kFreeControlledAndMovableTarget
自由に操作可能かつ注視点を設定可能.
@ kLeftSideView
右から真横の視点.
@ kTopView
上からの見下ろし視点.
@ kRightSideView
右から真横の視点.
@ kBackView
背面からの視点.
@ kFrontView
正面からの視点.
@ kFreeControlled
自由に操作可能.
Vector3 RotateVector3(const Vector3 &vec, const EulerXYZ &rot)
回転させたベクトルを返す.三角関数の処理が多く重たいので注意.
クォータニオンを表す構造体.
Quaternion GetNormalized() const noexcept
正規化したクォータニオンを返す. クォータニオンの正規化とは,ノルムを1にすることを表す. クォータニオンqの正規化は,q / |q| で求められる.
3次元の位置ベクトルを表す構造体.