3D プレイヤー移動
CygwinUser 2014/05/27(Tue) 22:31
カメラの方向に合わせてプレイヤーの移動方向も変えることしたいと思ってるんですけど、MatrixとVectorを使ってやろうとしてるんですけど、MatrixをVectorに変換するためのTransformがなくて困っています。
TPSの動きがしたいと思っています
もし、やり方があれば、教えてもらえないでしょうか?
よろしくお願いします
Reputeless 2014/05/27(Tue) 23:38
Quaternion を使って TPS 風の移動をする簡単なサンプルを紹介します。
参考になれば幸いです。
# include <Siv3D.hpp>
Image CreateCheckerboard()
{
Image image{ 400, 400 };
for (int y = 0; y < image.height; ++y)
{
for (int x = 0; x < image.width; ++x)
{
image[y][x] = (x % 40 < 20 == y % 40 < 20) ? Palette::Lightblue : Palette::White;
}
}
return image;
}
void Main()
{
const Texture floorTexture(CreateCheckerboard(), Texture::Mipped);
const Texture shadowTexture(L"Example/Particle.png", Texture::Mipped);
Graphics::SetAmbient(ColorF(0.2));
Graphics::SetLight(0, Light::Directional({ 0.5, 1, 0.5 }));
// 丸影用のレンダラー
const Renderer shadowRenderer(RendererProperty::Forward());
Vec3 playerPos{ 0, 0.8, 0 };
Quaternion playerRotation = Quaternion::Identity();
Camera camera;
Println(L"[W][A][S][D]: 移動 / [マウス]: 方向");
while (System::Update())
{
double yaw = Clamp((Mouse::Pos().x - Window::Size().x / 2) / 4000.0, -0.05, 0.05);
if (Abs(yaw) < 0.03)
{
yaw = 0.0;
}
playerRotation *= Quaternion::RotateYaw(yaw);
const Vec3 walkDirection =
Input::KeyA.pressed * Vec3::Left
+ Input::KeyD.pressed * Vec3::Right
+ Input::KeyW.pressed * Vec3::Forward
+ Input::KeyS.pressed * Vec3::Backward;
playerPos += playerRotation * walkDirection * 0.1;
Plane(20.0).draw(floorTexture);
Plane(playerPos.x, 0.01, playerPos.z, 1.6).draw(shadowTexture, Palette::Black, shadowRenderer);
//丸影テクスチャの代わりにマイナス点光源を使っても良い(ただし、たくさん使うと重くなる)
//Graphics::SetLight(1, Light::Point({ playerPos.x, 0.3, playerPos.z }, 1.5, ColorF(-3)));
Cylinder(0.5, 1.6)
.rotate(playerRotation)
.translate(playerPos)
.draw(Palette::Lawngreen);
const Vec3 direction = playerRotation * Vec3::Forward;
camera.lookat = playerPos;
camera.pos = playerPos - direction * 6 + Vec3::Up * 2;
Graphics::SetCamera(camera);
}
}
なお、Matrix 型の行列 m で Vector 型の 3D ベクトル v をトランスフォームしたい場合
DirectX::XMVector3Transform(v, m) を使うことができます。
PeterPaM 2019/03/05(Tue) 02:19
The impeachment of President Donald Trump suddenly looks like much more than just a theoretical possibility
http://magnitola-gps.ru
英数字 文字以内
PeterPaM 2019/03/05(Tue) 02:42
The impeachment of President Donald Trump suddenly looks like much more than just a theoretical possibility
http://mrfest.ru
英数字 文字以内
PeterPaM 2019/03/05(Tue) 04:56
The impeachment of President Donald Trump suddenly looks like much more than just a theoretical possibility
http://zimnyaya-obuv.ru
英数字 文字以内
JacobPaM 2019/04/01(Mon) 15:23
China announces new crackdown on fentanyl in win for US President Trump
http://buxpartner.ru
英数字 文字以内
LucasPaM 2019/06/23(Sun) 14:48
China announces new crackdown on fentanyl in win for US President Trump
http://vkusnyisayt.ru
英数字 文字以内