किसी को भी मुझे कुछ सलाह या सुझाव दे सकते हैं2 डी से 3 डी
मैं कितना एक तस्वीर में एक वस्तु एक स्थान से दूसरे में स्थानांतरित किया गया है खोजने की जरूरत है (अच्छी तरह से वास्तव में मैं कितना कैमरा है की गणना करने की जरूरत है 2 छवियों के बीच स्थानांतरित हो गया, लेकिन वस्तु स्थिर रहेगी और बस अपने वाई-अक्ष पर घुमाया जाएगा, मुझे लगता है कि छवि को स्थानांतरित करना आसान होगा)। इस उदाहरण के रूप में काफी कुछ है लेकिन काफी जटिल नहीं है।
तो मैं उदाहरण यहाँ अनुसार घन पर एक rubiks घन की पहली तस्वीर लेने के लिए और 4 अंक का चयन छवि एक Texture2D और नीले हलकों के सामने चेहरे के 4 अंक का प्रतिनिधित्व करता है उपयोगकर्ता द्वारा चुने गए क्यूब। ये 4 अंक सूची में संग्रहीत हैं और अगली छवि लोड की गई है जो इस
जैसा दिखता है फिर उपयोगकर्ता को पिछले (सफेद चेहरे) के समान चेहरे के 4 अंक चुनना होगा। फिर इन 4 अंक एक नई सूची में संग्रहीत हैं।
तो अब मैं दो सूचियों है और मैं जैसा कि यहाँ दिखाया
लेकिन अधिक महत्वपूर्ण बात यह छवि 2 करने के लिए छवि 1 से गणना करने के लिए कितना "पूरे सामने चेहरा" ले जाया गया है (घुमाएगी/पैमाने/अनुवाद) की जरूरत है , मुझे 3 डी में इस आंदोलन की गणना करने की आवश्यकता है! तो पहली छवि के लिए मुझे लगता है कि z-घटक = 0. उदाहरण के लिए मैं छवि 1 के शीर्ष बाएं कोने मानता हूं = उदा। (10, 10, 0)।
क्या कोई तरीका है कि मैं "मान ले सकता हूं" कि अगर छवि 2 का चेहरा घूर्णन/स्केल/अनुवादित किया गया है तो इसे 3 डी स्पेस में स्थानांतरित किया जा सकता है? तो यदि छवि 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, ?));
आंदोलन के लिए बाएं या दाएं सिर्फ गणना कितना प्रत्येक बिंदु
//Translation
Matrix translating = Matrix.CreateTranslation(new Vector3(amountMovedX, amountMovedY, 0));
List<Vector3> imageAfterTranslating = transformListOfVertices(imageAfterScaling, translating);
और तिरछा के लिए (आईएम थोड़ा अटक) ले जाया गया है ....
// Rotation
Matrix rotation = Matrix.CreateFromAxisAngle(
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?)); // Not sure here
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation);
क्या अंक किसी भी नियम का पालन करना है? जैसे वे सभी coplaner होना चाहिए? – MerickOWA
हाँ आवेदन के उद्देश्य के लिए हाँ सभी बिंदु coplanar माना जाएगा। तो उपयोगकर्ता केवल घन का एक चेहरा चुन सकता है और उन सभी बिंदुओं को एक विमान पर माना जाएगा – heyred