तो एक विषय की तरह मुझे 2 वस्तुएं मिलीं जिनमें से एक मैं घूम रहा था (जेड और एक्स अक्ष पर) दूसरा स्थिर है लेकिन हमेशा दूसरे को देखने के लिए वाई अक्ष के चारों ओर घूमना चाहिए ... और मैं इसके साथ पहले से ही लड़ रहा हूं सप्ताह

मुझे अब क्या मिला है

1object से 2object तक वेक्टर और 2object के वास्तविक रूप (भी वेक्टर) पर मैं इन दो वैक्टरों के बीच परी की गणना कर रहा हूं और इसे 2 ऑब्जेक्ट के रोटेटशन में जोड़ रहा हूं, लेकिन यह ठीक से काम नहीं कर रहा है

कोई विचार यह कैसे काम करता है? बीटीडब्ल्यू मैं यूलर एंजेल ट्रांसफॉर्म का उपयोग कर रहा हूं

छद्म कोड:

vectorFrom1to2 = vector1 - vector2;
lookatVectorof2ndObject;

मैं उन दोनों को सामान्य करता हूं और फिर

float angle = acos(dot(vectorFrom1to2, lookatVectorof2ndObject));
object2.rotateY = angle;

मुझे नहीं पता कि मैं कहाँ गलती करता हूँ

1
ThomasAnsiC 18 नवम्बर 2018, 23:58

1 उत्तर

सबसे बढ़िया उत्तर

अंगूठे के एक सामान्य नियम के रूप में, जो मैंने कई स्थितियों में खुद को सही साबित किया है: जैसे ही आप खुद को वैक्टर से कोणों की गणना करते हुए पाते हैं, आप संभवतः आवश्यकता से अधिक अनावश्यक रूप से जटिल तरीके से कुछ कर रहे हैं। .

आपको केवल एक आधार परिवर्तन की आवश्यकता है जो पहली वस्तु के स्थानीय समन्वय प्रणाली को उसके स्थानीय Z अक्ष को दूसरी वस्तु की ओर इंगित करने के लिए बदल देता है। आप इसे एक साधारण रोटेशन मैट्रिक्स के साथ कर सकते हैं (बशर्ते आपके पास इसे और अधिक आसानी से सुविधाजनक बनाने के लिए एक मैट्रिक्स/वेक्टर लाइब्रेरी तैयार हो)।

इसलिए, बशर्ते आपके पास स्थिति p1 के साथ ऑब्जेक्ट 1 और स्थिति p2 के साथ ऑब्जेक्ट 2 हो और आप p1 को p2 की ओर घुमाना चाहते हैं, तो रोटेशन मैट्रिक्स निम्नानुसार प्राप्त किया जा सकता है :

(मैं यहाँ सिर्फ GLSL छद्म वाक्य रचना का उपयोग कर रहा हूँ)

vec3 p1 = ... // <- position of first object
vec3 p2 = ... // <- position of second object
vec3 d = normalize(p2 - p1)
vec3 r = cross(vec3(0.0, 1.0, 0.0), d)
       = vec3(d.z, 0, -d.x)
mat3 m = mat3(d.z, 0, -d.x, // <- first column ('right' vector)
              0, 1, 0,      // <- second column (keep Y)
              d.x, 0, d.z)  // <- third column (map Z to point towards p2)

पहली वस्तु के शीर्षों v को m से बदलने पर: v' = m * v आपको वस्तु का Z अक्ष p1 मिलता है जो p2 की स्थिति की ओर इंगित करता है, सभी एक ही "विश्व" समन्वय प्रणाली में तैयार किए गए हैं।

1
Kai Burjack 18 नवम्बर 2018, 21:31