আমার কাছে একটি তৃতীয় ব্যক্তির ক্যামেরা রয়েছে যা সরাসরি প্লেয়ারের দিকে না তাকিয়ে তার সামনে কোথাও।
যখন ব্যবহারকারী শ্যুটিং মোডে প্রবেশ করেন, আমি ক্যামেরাটি খেলোয়াড়কে লক্ষ্যটির মুখের দিকে ঘুরিয়ে দিতে চাই।
উপরের ছবিতে। "ও" প্লেয়ার (অরিজিন), "এল" হ'ল লুক, "সি" ক্যামেরার অবস্থান এবং "টি" লক্ষ্যবস্তু। আমি লিক্যাট লাইনটি সি-> এলটি ঘুরতে চাই যাতে এটি টি (সি '-> এল' -> টি ') দিয়ে অরিজিনের ("ও") কাছাকাছি যায়।
মূলত ছবিতে আমি লাল এঙ্গেল আলফাটি খুঁজে বের করতে পারি।
আমি আমার ক্যামেরার অবস্থান যেমন একটি কাঠামোতে সঞ্চয় করি:
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;
তবে উপরের চিত্রটিতে এটি পুরোপুরি কার্যকর হয় না কারণ আবর্ত থেকে উত্সটি অফসেট হয়ে গেছে।