Plane の回転の中心
こんにゃくのり 2015/11/28(Sat) 00:51
Plane の左辺を軸に回転させようと center を操作してみたのですが
期待通りにはなりませんでした。
どのようにすればよいでしょうか。
# include <Siv3D.hpp>
void Main() {
Camera mycam;
mycam.pos.set(0, 0, 0);
mycam.lookat.set(0, 0, 1);
Graphics3D::SetCamera(mycam);
Plane p({ 0, 0, 2 }, 1, 1);
p.center.x = -0.5;
double r = 0;
while (System::Update()){
p.rollPitchYaw(r,-Pi/2,0).draw();
r += 0.1;
}
}
簡便な方法がないのであれば頑張って計算します。
Reputeless 2015/11/28(Sat) 23:30
Plane や Box, Sphere などの形状型は行列を持たないため、座標変換の自由度が高くありません。
asMesh() で Mesh 型に変換してから .translated() や .rotated() で移動や回転を適用してください。
# include <Siv3D.hpp>
void Main()
{
Plane plane(5);
Box box(0, 0, 0, 5, 0.1, 5);
double r = 0;
while (System::Update())
{
Graphics3D::FreeCamera();
Sphere(0.2).draw(Palette::Red);
plane.asMesh()
.translated(2.5, 0, 0)
.rotated(-Pi / 2, 0, r)
.draw();
box.asMesh()
.translated(2.5, 0, 0)
.rotated(-Pi / 2, 0, r + Pi)
.draw();
r += 0.05;
}
}
なお、Siv3D の次期バージョンからは Plane の裏面も描画されるようになります。