উত্তর:
আপনি আপনার চৌবাচ্চাটি ইয়া / পিচ / রোলের কোণে বিভক্ত করতে পারেন তবে এটি সাধারণত ওভারকিল।
আপনার চতুর্ভুজগুলি এভাবে রচনা করার পরিবর্তে:
cameraOrientation = cameraOrientation * framePitch * frameYaw;
এটা চেষ্টা কর:
cameraOrientation = framePitch * cameraOrientation * frameYaw;
এরপরে এটি কখনও iltালু / রোল উত্পন্ন করে না এবং ইয়াও এবং পিচ পৃথকভাবে সঞ্চয় করার সমতুল্য
framePitchএবং frameYaw floatধরনের? এছাড়াও, আমি আপনার প্রথম বাক্যে কিছু স্পষ্টতার জন্য কৃতজ্ঞ হব।
cameraOrientation, framePitchএবং frameYawসমস্ত কোয়ার্টারিয়ন (প্রতিটি চৌম্বকটি 4 টি ফ্লোট বা ডাবল)।
এটি আমার কিছু সময়ের জন্য সমস্যা ছিল এবং এর কোনও উত্তর আমি খুঁজে পাইনি, তাই আমি ভেবেছিলাম আমি এটি এখানে পোস্ট করব।
এটা আসলে বেশ সহজ। আপনি কীভাবে ঘোরানগুলি সম্ভবত করছেন তা হ'ল:
currentDirection * newRotation;
তবে, এটি এরকমভাবে করা কোনওভাবেই কাজ করে না।
newRotation * currentDirection;
আপনাকে যা করতে হবে তা হ'ল এটি প্রথম এবং ক্রমটি নীচে ঘোরানোর জন্য এবং দ্বিতীয় ক্রমে পাশের আবর্তনের জন্য।
আমার জন্য, এটি এমন ছিল:
if (keyboard.IsKeyDown(Keys.Up))
Direction = Direction * Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), TurnSpeed);
if (keyboard.IsKeyDown(Keys.Down))
Direction = Direction * Quaternion.CreateFromAxisAngle(new Vector3(-1, 0, 0), TurnSpeed);
if (keyboard.IsKeyDown(Keys.Left))
Direction = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, 1), TurnSpeed) * Direction;
if (keyboard.IsKeyDown(Keys.Right))
Direction = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, -1), TurnSpeed) * Direction;
একটি কারণের জন্য, প্রথম উপায়ে বর্তমান পাশের দিকের সাথে ঘোরানো ঘূর্ণন রয়েছে যা আপনি উপরে এবং নীচের জন্য চান তবে আপনি চান না যে পাশের পাশের আবর্তনের জন্য, দ্বিতীয় কারণটি প্রয়োজন।
কোনও এফপিএস ক্যামেরার জন্য আপনি সাধারণত রোল চান না এবং +/- 90 ডিগ্রি পিচ সীমাবদ্ধ, সুতরাং আমি কেবল ইয়া এবং পিচ কোণ ব্যবহার করে বর্তমান অবস্থার উপর নজর রাখি। চতুষ্পদের পূর্ণ শক্তি এর জন্য সত্যই সহায়ক নয়।
আপনি যদি কোয়ার্টারিয়ন কীফ্রেম ইন্টারপোলেশন বা এ জাতীয় কিছু ব্যবহার করে এফপিএস ক্যামেরা এবং অ্যানিমেটেড ক্যামেরার মধ্যে রূপান্তর করতে চান তবে আপনি ইয়াও / পিচ কোণগুলিকে এবং কোয়ার্ট্রিয়নে রূপান্তর করতে পারেন।