موقف الكاميرا ثلاثي الأبعاد إعطاء بعض النقاط

StackOverflow https://stackoverflow.com/questions/754060

  •  09-09-2019
  •  | 
  •  

سؤال

مرحبا،

أنا أعمل حاليا في مشروع حيث أحتاج إلى وضع الكاميرا بحيث تكون الحركة الكاملة للشخصية غير قابلة للعرض دون تحريك الكاميرا. لدي الموضع الذي تبدأ فيه الحرف، وكذلك المسافة القصوى التي ستقوم بها الشخصية في الاتجاهات الثلاثة (x، y، & z). لدي أيضا مجال الرؤية (وهو 90 درجة).

هل هناك معادلة سوف تشكل فيها حيث أحتاج إلى وضع الكاميرا، لذلك لن تضطر إلى التحرك لرؤية الحركة الكاملة؟

ملاحظة: هذا يستخدم OpenGL.

التوضيح: يجب أن تكون الكاميرا "أمام" الشخصية الموجودة في الحركة، وليس أعلاه.

سوف تتحرك أيضا على طول الطائرة الأرضية.

هل كانت مفيدة؟

المحلول

إذا قمت بإنشاء كرة مرتبطة بالنقاط، فكل ما عليك فعله هو الحفاظ على الكاميرا على بعد أكبر من أو تساوي نصف قطر المجال / الخطيئة المحيطة (FOV / 2).

على سبيل المثال، إذا كان لديك كرة أرضية مع دائرة نصف قطرها RADIUS، ومجال معين من عرض FOV، فإن الكاميرا تحتاج فقط إلى أن تكون عند نقطة "DIST" بعيدا، مشيرا نحو مركز المجال المحيط.

المعادلة لحساب المسافة هي: DIST = دائرة نصف قطرها / الخطيئة (FOV / 2)؛

هذا سيعمل في ثلاثي الأبعاد، لكاميرا في أي اتجاه.

نصائح أخرى

ببساطة وجود الحد الأقصى لمجموعة (X، Y، Z) ليس بمقدار ما يكفي، لأن منفذ المشاهدة يشبه هرم، مع وجود قمة الهرم في وضع العين.

من أجل الحجة، دعونا نفترض أن جميع الحركة في الطائرة (x، z) (أي الأرض)، والعين مباشرة فوق الأصل 10M على طول المحور Y.

على افتراض وجود عرض مربعة، من خلال حقل العرض 90˚ الخاص بك من الرؤية من ± 10M وفقا لمحور X و Z، ولكن فقط للكائنات الموجودة على الأرض (Y = 0). بمجرد أن يخرجون من الأرض يتم تقليل رأيك. إذا كان 1 متر من الأرض، فإن المدى الخاص بك (x، z) هو ± 9m فقط.

من الواضح أن الكاميرا الحقيقية يمكن وضعها على أي حال في المشهد، تواجه أي اتجاه. حتى زاوية "لفة" من الكاميرا يمكن أن تتغير كم هو مرئي. هناك بالفعل العديد من نقاط الكاميرا هذه في الواقع، لذلك ستحتاج إلى تقييد معاييرك إلى حد ما.

خذ شريحة الخط من نقطة انطلاق إلى نقطة النهاية. بناء طائرة متعامدة على هذا الجزء الخط من خلال نقطة منتصف الجزء. ثم ضع الكاميرا في مكان ما في هذه الطائرة على مسافة أكثر من ما يلي من نقطة تقاطع الطائرة والخط ينظر إلى نقطة التقاطع. يجب أن يكون ناقل ما يصل الكاميرا في الطائرة ويجب أن يكون الحقل الأفقي للعرض 90 درجة.

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

ستكون جميع مراكز الكاميرا هذه نقطة انقطاع ونقطة النهاية على الحدود اليسرى أو اليمنى لميناء العرض والمتركز العيادي.

قد يكون حل آخر هو كتابة وظيفة تأخذ نقطة التشغيل ونقطة النهاية والموضع المرغوب لكلا النقاط على الشاشة. ثم فقط حل معادلة الإسقاط لتحويل الكاميرا.

يعتمد ذلك على سبيل المثال، إذا كان الكائن سيحرك في طائرة، فيمكنك فقط وضع الكاميرا خارج الكرة التي تقيد منطقة حركتها (وهذا يعتمد على حقيقة أن FOV هو 90، وهو زاوية محظوظة).

إذا كان الكائن سيحرك ثلاثي الأبعاد، فهذا أكثر صعوبة. سيساعد ذلك إذا حددت المنطقة التي يتحرك فيها الكائن (Cube مقابل الكرة ...) والاتجاه الذي تريد رؤيته منه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top