मैं द हज़ी माइंड द्वारा एक एक्सएनए ट्यूटोरियल का अनुसरण कर रहा हूं, मेरे पास एक मूल वस्तु है जिसमें एक स्थिति (वेक्टर 3) और एक रोटेशन (क्वाटरनियन) है। ऑब्जेक्ट मॉडल लग रहा है इस ब्लॉक के 6 किनारे घुमाए
ट्यूटोरियल में कैमरा कार्यान्वयन से की तरह, मैं रोटेशन की एक प्रतिलिपि बना और तरीकों रिवोल्व और वस्तु पर उन्हें क्रियान्वित किया है
public virtual void Rotate(Vector3 axis, float angle)
{
axis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, angle) * Rotation);
}
public virtual void Revolve(Vector3 target, Vector3 axis, float angle)
{
Vector3 revolveAxis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Quaternion rotate = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(revolveAxis, angle));
Position = Vector3.Transform(Position - target, Matrix.CreateFromQuaternion(rotate)) + target;
Rotate(axis, angle);
}
मेरे ब्लॉक वस्तु 6 बनाता है
और अब हम वास्तविक समस्या है, मेरे ब्लॉक पर घुमाएँ बुला: क्वाड के उदाहरण और प्रत्येक क्वाड वस्तु पर विधि प्रस्तुत करना कहता है, मैं ऑफसेट और रोटेशन प्रत्येक Quad पर सौंपा एक बनावट ब्लॉक इस तरह लग रही बनाने के लिए है obj ect ऑब्जेक्ट को रोटेशन बदलने के लिए स्वयं का कारण बनता है, और मेरी क्वाड ऑब्जेक्ट घुमाती नहीं है, इस प्रकार मैंने अपने ब्लॉक ऑब्जेक्ट पर एक नया घुमावदार फ़ंक्शन लागू किया।
public override void Rotate(Vector3 axis, float angle)
{
for (int i = 0; i < mySides.Length; i++)
{
Quad side = mySides[i];
side.Revolve(this.Position, axis, angle);
}
}
हालांकि मुझे उम्मीद परिणाम नहीं दिया, जैसा कि यहाँ देखी गई:
गलत समाधान
निम्नलिखित समाधान काम करेंगे लेकिन बहुत सामान्य नहीं होगा और सीमित हो जाएगा: अगर बयान के बारे में जांच करता है जो अक्ष पर जांच करता है कि मैं चारों ओर घूमना चाहता हूं और फिर हर तरफ (क्वाड ऑब्जेक्ट) को सही तरीके से घुमाता है।
उचित समाधान
वैकल्पिक रूप से मैं क्वाड का प्रतिपादन ब्लॉक वस्तु (अपने माता पिता) के रोटेशन पर निर्भर वस्तुओं बना सकता है, लेकिन मैं ऐसा करने के तरीके पर अनिश्चित हूं।
तीसरा और आखिरी विकल्प यह है कि घुमाव विधि प्रत्येक क्वाड ऑब्जेक्ट्स रोटेशन और सही मानों को स्थिति अपडेट करे, यह मुझे बिल्कुल भी कैसे करना है इस बारे में अनिश्चित है।
प्रश्न
तो क्या मैं के लिए पूछ रहा हूँ इस पर कुछ विचार या विचार है, शायद कुछ लिंक और/या ट्यूटोरियल XNA में Quaternions का उपयोग कैसे करें, अधिमानतः विजुअल तरीके समझा है।
चीयर्स, आपके इनपुट :)