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

英数字 文字以内

- WEB PATIO -