見ている人がいるか知らんがメモ
Siv3Dというすばらしいライブラリに出会ったので少し触っています.
去年シリアル通信や3Dにも対応したみたいで,今後の発展が楽しみです.
で,既存のカメラがキーボード入力のみで,視点回転ができず?だったのでマウスでできるようにしました.
【注意】操作バグありますがビューワー程度には使えるかと・・・
使い方は,Graphics3D::FreeCamera()を呼ばずにoperateCameraByMouse(double)を呼ぶだけ
右ドラッグで回転,ホイールでズームします
今後の課題
原点を中心にしか回転できないので改善します
なんかズームおかしい
カメラ位置がx<0のとき上下逆になる
# include <Siv3D.hpp> void operateCameraByMouse(const double SPEED) { //前フレームのカメラ設定をコピー struct Camera camera = Graphics3D::GetCamera(); //カメラの回転移動 マウスの右ボタンを使用 if (Input::MouseR.pressed){ const Point delta = Mouse::Delta(); //マウスカーソルの移動量 //原点(0,0)を中心にカメラが回転移動 Quaternion rotate = Quaternion::Identity(); rotate.rotateRollPitchYaw(0, Radians(SPEED*delta.y), Radians(SPEED*delta.x)); camera.pos = rotate * camera.pos; } //カメラのズーム マウスホイールを使用 const int wheelY = Mouse::Wheel(); // 縦方向のホイール回転量 camera.pos = Vec3( camera.pos.x + (camera.pos.x*SPEED*wheelY), camera.pos.y + (camera.pos.y*SPEED*wheelY), camera.pos.z + (camera.pos.z*SPEED*wheelY)); Graphics3D::SetCamera(camera); } void Main() { Cylinder x_axis_model(Vec3(0, 0, 0), 1.0, 1000.0, Quaternion(Vec3(0, 0, 1), Radians(90))); Cylinder y_axis_model(Vec3(0, 0, 0), 1.0, 1000.0, Quaternion(Vec3(0, 0, 0), Radians(0))); Cylinder z_axis_model(Vec3(0, 0, 0), 1.0, 1000.0, Quaternion(Vec3(1, 0, 0), Radians(90))); //main loop while (System::Update()) { //Graphics3D::FreeCamera(); operateCameraByMouse(0.1); x_axis_model.draw(Palette::Red); y_axis_model.draw(Palette::Green); z_axis_model.draw(Palette::Blue); Plane(1000).draw(); Sphere(Vec3(0, 0, 0), 2).draw(Palette::Orange); Sphere(Vec3(10, 0, 0), 2).draw(Palette::Red); Sphere(Vec3(0, 10, 0), 2).draw(Palette::Green); Sphere(Vec3(0, 0, 10), 2).draw(Palette::Blue); } }