사람이 나에게 어떤 조언이나 제안을 줄 수운동 2D에서 3D
나는 사진의 개체 한 위치에서 다른 위치로 이동이 얼마나 찾을 필요(물론 실제로 나는 카메라가 얼마나 많은 계산해야 2 개의 이미지 사이를 움직였습니다. 그러나 물체가 정지 상태로 유지되고 Y 축에서 회전하기 때문에 이미지를 더 쉽게 움직일 수 있습니다). 이 예제와 거의 비슷하지만 복잡하지는 않습니다.
그래서 내가 여기 의 예에 따라 큐브에 4 점을 rubiks 큐브의 첫 번째 사진을 촬영하고 선택한 이미지는 Texture2D과 파란색 동그라미의 전면의 4 점을 나타내는 것입니다 큐브를 선택합니다. 이 4 점은 목록에 저장되고 다음 이미지는 다음과 같이로드됩니다. 다시 사용자는 이전과 동일한 얼굴의 4 개 점 (흰색면)을 선택해야합니다. 그런 다음이 4 점이 새 목록에 저장됩니다.
그래서 지금은 두 개의 목록을 가지고
하지만 더 중요한 것은 다음과 같이 나는 이미지 2 이미지 1에서 "전체 전면는"(/ 크기/회전 변환) 이동 얼마나 많은 계산해야 , 3D로이 운동을 계산해야합니다! 따라서 첫 번째 이미지의 경우 z- 구성 요소 = 0이라고 가정합니다. 예를 들어 이미지 1의 왼쪽 상단을 가정합니다. (10, 10, 0).
이미지 2의 얼굴이 3D 공간에서 움직일 수있는 특정 방식으로 회전/확대/축소 된 경우 "가정"할 수있는 방법이 있습니까? 따라서 이미지 2의 왼쪽 상단이 이미지 1 (시작 이미지)의 왼쪽 상단에있는 경우 카메라가 오른쪽으로 이동해야합니다. 그리고 같은 점이 포인트의 위 또는 아래로 갈 것입니까? 회전에 관해서는 이미지 1의 점과 이미지 2의 점 사이의 각도를 계산할 수 있을까요? 그리고 카메라가 얼마나 회전했는지 계산할 수 있습니까?
제 코드의 경우 이런 식으로 생각하고 있었습니까? 운동
// Image 1 coordinates for the front face
// Assume z = 0
cube1 = new List<Vector3>();
cube.Add(new Vector3(10, 10, 0));
cube.Add(new Vector3(20, 10, 0));
cube.Add(new Vector3(10, 20, 0));
cube.Add(new Vector3(20, 20, 0));
// Get image 2 coordinates
cube2 = new List<Vector3>();
cube.Add(new Vector3(newX, newY, ?)); // Keep Z = 0?
cube.Add(new Vector3(newX, newY, ?));
cube.Add(new Vector3(newX, newY, ?));
cube.Add(new Vector3(newX, newY, ?));
*이 ....
// Rotation
Matrix rotation = Matrix.CreateFromAxisAngle(
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?)); // Not sure here
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation);
포인트는 규칙을 준수해야합니까? 그들은 모두 같이 있어야합니다처럼? – MerickOWA
그래, 응용 프로그램의 목적을 위해 모든 지점은 동일 평면에있는 것으로 간주됩니다. 따라서 사용자는 큐브의 한 면만 선택할 수 있으며 모든 점은 하나의 평면에 있다고 간주됩니다 – heyred