지금까지 나는 회전을 위해 Quaternion
을 생성 해 냈습니다. 이제는 문제가 발생합니다. 특정 큐브에만 어떻게 적용합니까? 현재 키보드의 오른쪽 키를 누를 때마다 모든 큐브가 원점을 중심으로 계속 회전합니다.XNA의 회전 큐브
참고로 Rubik 's Cube (2x2x2)와 비슷한 설정으로 8 개의 큐브를 배치했습니다. 따라서 오른쪽/왼쪽 화살표를 누르면 'Cube'의 오른쪽/왼쪽면 (8 개의 작은 입방체로 구성된 큰 입방체)이 시계 방향/반 시계 방향으로 90도 회전합니다.
선언 (총 여덟 개 큐브 만점) 큐브의 하나의 예 : 내 업데이트 방법에
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
을 새로 만들려고 시도했습니다. 즉, c_component1 = Vector3.Transform(cube1pos, cubeRotation);
이지만 그 위치에 넣고 실제로 사용하는 것이 확실하지 않습니다.
아무도 아이디어가 없습니까? 어떤 도움을 많이 주시면 감사하겠습니다.
게시물을 편집하고 코드 서식을 수정하기에 충분한 담당자가 있었으면 좋겠다. –
와우, 정말 무의미한 게시물에 감사드립니다.내 실제 질문 및 쿼리와 관련하여 말할만한 가치가없는 항목이 있다면 스레드에 게시 할 이유가 무엇입니까? 코드 형식에 대한 의견 외에도 도움을 줄 수 없다면 (파일에서 복사했기 때문에 분명히 이런 식으로) 다른 스레드를 트롤하십시오. 감사합니다. DaveT – DAVETELFA
서식에 대한 제 의견은 개인적으로 받아 들여지지 않았습니다. 그러나 그것이 당신이 원하는 방식이라면 : 당신이 너무 게으르거나 당신의 글을 읽을 수있게하기에 부적합하다면, 그것은 당신에게 지적한 후에도 가능합니다 (포맷 도움은 찾기가 어렵지 않습니다!) 그리고 당신은 당신의 질문에 답하기위한 목적으로 시간을내어 (* 두 번 *) 누군가에게 욕설을 퍼붓고, 당신의 질문은 당신이 만든 스레드의 중간 * XNA 포럼에서 누군가가 당신을 돕기 위해 어떤 노력을 기울여야하는지에 대해서는 알지 못합니다. –