Quaternion
これまでのところ、回転用を作成することができました。唯一の問題は、特定のキューブのみに適用するにはどうすればよいですか? 現時点でキーボードの右キーを押すと、すべての立方体が原点を中心に連続的に回転します。
参考までに、ルービック キューブ (2x2x2) と同様のセットアップで配置された 8 つのキューブがあります。右/左矢印を押すと、'Cube' (8 つの小さな立方体で構成される大きな立方体) の右/左面が、時計回り/反時計回りに 90 度回転します。
Cubes の 1 つの例 (合計 8 つのキューブのうち) の宣言:
GameObject subCube3 = new GameObject();
Vector3 subCube3Pos = new Vector3(-0.55f, -0.55f, 0.55f);
私の更新方法では:
// declare rotation floats
float updownRotation = 0.0f;
float leftrightRot = 0.0f;
// get state of keyboard
KeyboardState keys = Keyboard.GetState();
// if key is pressed, change value of rotation
if (keys.IsKeyDown(Keys.Right))
{
leftrightRot = -0.10f;
}
// if key is pressed, change value of rotation
if (keys.IsKeyDown(Keys.Left))
{
leftrightRot = 0.1f;
}
// if key is pressed, change value of rotation
if (keys.IsKeyDown(Keys.Up))
{
updownRotation = 0.1f;
}
// rotation around axis
Quaternion addRot = Quaternion.CreateFromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), leftrightRot);
//rotation of cubes
cubeRotation = cubeRotation * addRot;
私の描画機能:
void DrawGameObject(GameObject gameobject)
{
//graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
foreach (ModelMesh mesh in gameobject.model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;
effect.World =
Matrix.CreateScale(gameobject.scale) *
Matrix.CreateFromQuaternion(cubeRotation) *
Matrix.CreateTranslation(gameobject.position);
effect.Projection = cameraProjectionMatrix;
effect.View = cameraViewMatrix;
}
mesh.Draw();
}
}
私が問題だと思うのは、Matrix.CreateTranslation(gameobject.position)
明らかにすべてのキューブに影響を与えていることです。Vector3
新しいie:を作成しようとしましc_component1 = Vector3.Transform(cube1pos, cubeRotation);
たが、それでも、それをどこに置いて実際に使用するのかわかりません。
アイデアはありますか?どんな助けでも大歓迎です。