मेरे पास एक 3 व्यक्ति कैमरा है जो सीधे खिलाड़ी पर नहीं दिखता है लेकिन कहीं न कहीं उसके सामने है।
जब उपयोगकर्ता शूटिंग मोड में प्रवेश करता है, तो मैं चाहता हूं कि कैमरा लक्ष्य का सामना करने के लिए खिलाड़ी को घुमाए।
ऊपर की छवि में। "ओ" खिलाड़ी (उत्पत्ति) है, "एल" लुकैट है, "सी" कैमरा स्थिति है और "टी" लक्ष्य है। मैं लुकअप लाइन C-> L को घुमाना चाहता हूं ताकि यह उत्पत्ति ("O") के चारों ओर T (C '-> L' -> T ') से होकर गुजरे।
मूल रूप से मुझे उस कोण अल्फा को खोजने की आवश्यकता है जिसे मैंने तस्वीर में लाल रंग में रखा है।
मैं अपने कैमरे की स्थिति को इस तरह संरचना में संग्रहीत करता हूं:
struct CameraTarget {
Quaternion absoluteRotation;
Vec3 absolutePosition;
Vec3 cameraOffset;
Vec3 lookatOffset;
float FOV;
}
इसलिए अगर मुझे वह कोण मिल जाए जिसकी मुझे तलाश है तो मैं कुछ कर सकता हूं:
cam->absoluteRotation = cam->absoluteRotation * alpha;
हमेशा लक्ष्य को देखने के लिए खिलाड़ी को पाने के लिए।
अगर लुक ओरिजनल से गुजर रहा था तो मैं बस कर सकता था
Vec3 origDir = cam->lookAtOffset - cam->absolutePosition;
origDir.normalize();
Vec3 newDir = cam->target - cam->absolutePosition;
newDir.normalize();
Quaternion q(origDir, newDir); // from->to
cam->absoluteRotation = cam->absoluteRotation * q;
हालांकि इसके ऊपर के आरेख में यह काफी काम नहीं करता है क्योंकि रोटेशन मूल से ऑफसेट है।