एक लक्ष्य की ओर एक 3 व्यक्ति कैमरा घूर्णन


10

मेरे पास एक 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;

हालांकि इसके ऊपर के आरेख में यह काफी काम नहीं करता है क्योंकि रोटेशन मूल से ऑफसेट है।

जवाबों:


1

यदि यह किसी और को एक दिन मदद करता है, तो खुद को जवाब देना:

SFDKT के पास वर्तमान कैमरा लुक दिशा में लक्ष्य बिंदु को प्रोजेक्ट करने के बारे में सही विचार है।

हालाँकि, मेरी सबसे बड़ी समस्या यह बिंदु पा रही थी। पी। ने बताया कि त्रिकोणमिति का एक बिट इसे हल करने में कामयाब रहा।

तीन बिंदुओं CPO द्वारा गठित त्रिकोण को ध्यान में रखते हुए:

  1. चूंकि मुझे पता है कि एलओ, ओसी और सीएल लंबाई सी पर कोण की गणना कर सकते हैं।

  2. अब मुझे कोण C और OC और PO की लंबाई पता है। सीन्स के नियम का उपयोग करके आप कोण को O पर पा सकते हैं (मैंने इस वेबसाइट को लापता कोणों को खोजने के लिए बहुत उपयोगी पाया )

  3. तब मैं अंतिम लापता कोण पी को पा सकता हूं और लंबाई सी.पी. को खोजने के लिए फिर से सीन्स के कानून का उपयोग कर सकता हूं।

  4. पोज़ दिशा को सामान्य करें + सामान्यीकृत (CL) * lengthCP मुझे P की स्थिति प्रदान करता है।

  5. एक बार मेरे पास पीआई ओपी और ओटी के बीच सबसे छोटी रोटेशन की गणना कर सकता है जो मुझे चतुष्कोण देता है जो मुझे अपने कैमरे को घुमाने की जरूरत है।

मुझे 3 डी में अनचाहे रोल से थोड़ी परेशानी हुई लेकिन मैंने सिर्फ Z = 0 के साथ समस्या को हल किया और फिर कैमरे के अप वेक्टर को सीधा रखने के लिए गायब पिच रोटेशन की गणना की।


0

यह चित्र आसान प्रश्न को हल करने के लिए आवश्यक समरूपता को जोड़ता है।

यहाँ छवि विवरण दर्ज करें

बस Lवेक्टर के साथ प्रोजेक्ट करें CLताकि |P-O|=|T-O|

अब यह स्पष्ट रूप से आपके वांछित कोण द्वारा घुमाए गए केवल दो समान त्रिकोण ( CPOऔर C'TO) हैं। अर्थातang(OT)-ang(OP)

C'और L'दोनों समान राशि के अनुसार, घूमने Cऔर Lफिरने के बाद Oभी समान हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.