سؤال

لم يكن مصممو OpenGL يخافون أبدًا من الرياضيات ، ومعرفة الجبر الخطي ضروري للجميع باستثناء أبسط تطبيقات OpenGL. أعتقد أنه يمكن افتراض أن مبرمجي OpenGL على دراية بالزوايا في الراديان.

رياضيا ، الراديان أكثر أناقة من الدرجات في كل النواحي. لديهم أيضا مزايا عملية:

  • تستخدم مكتبة C القياسية الراديان.
  • إلى حد كبير أي مكتبة أخرى تستخدم الراديان كذلك.
  • الراديان أكثر ملاءمة في بعض الحسابات ، على سبيل المثال طول القوس الدائري.

لماذا ، إذن ، قرر مصممو OpenGL تحديد وظائف مثل glRotatef و gluPerspective لاستخدام الدرجات؟

(أعرف أنها ليست ذات أهمية عملية ، ولن تتغير على أي حال. أنا فضولي فقط ، ولم أتمكن من العثور على الإجابة على OpenGl.org.)

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

المحلول

لأن الأشخاص العاديين يستخدمون أكثر لحساب الدرجات - من المفترض أن يستخدم OpenGL بسيطًا. لاحظ أن جميع الوظائف التي تعمل على الدرجات هي وظائف "عالية المستوى".

بالنسبة إلى OpenGL نفسه ، لا يوجد فرق سواء كان يتلقى راديان أو درجات - يتم تحويلهم داخليًا إلى مصفوفات التحول على أي حال ، لذلك لا يوجد مكسب حسابي لاستخدام واحد أو آخر.

فلماذا تعقيد الأشياء للأشخاص إذا كنت تستطيع السماح لهم باستخدام الدرجات؟ أي شخص يشفر بجدية في OpenGL سيوفر المصفوفات الخاصة به المحسوبة من الرباعي على أي حال.

في نفس الروح التي يمكن أن نسألها ، لماذا glRotatef و gluPerspective على أي حال ، نظرًا لأن المصفوفات أكثر أناقة في كل النواحي ، وتسمح بدرجة أعلى من السيطرة.

نقطة بنقطة:

  • الأناقة - المصفوفات أكثر أناقة في كل جانب
  • C Library - C Library تستخدمها لأسباب حسابية ، لا يُقصد من وظائف GL زوايا باستخدام المهام الثقيلة الحسابية (استخدام المصفوفات مباشرة) ، وربما يكون للتنفيذ جدول بحث للدرجات على أي حال.
  • أي مكتبة أخرى - متابعة مكتبة C لنفس أسباب CLIB - أيضًا ، فهي غير صحيحة - تسمح العديد من مكتبات C ++ بالاختيار ، والبعض الآخر يستخدم هذا الأخير
  • Compitation Conviniency - لا يهم - التمثيل الداخلي هو المصفوفات ، ومن المحتمل أن يتم إجراء الحسابات باستخدام جداول البحث إذا كان من المفترض أن تكون فعالة - لا توجد عملية مباشرة على الزوايا ، لذلك لا يهم التمثيل

ملاحظة أيضا: يتم إهمال جميع الوظائف باستخدام الدرجات في المعيار الحالي (3.2). glRotatef هل فقط وظيفة أخذ الدرجات ، أو في الواقع ، زاوية على الإطلاق. غلو هي مكتبة فائدة غير مخصصة للنشر الشاق ، وبالتالي فهي مصممة تجاه قابلية القراءة ، و gluPerspective(... 60.0f..) أكثر قابلية للقراءة و "قياسية" من حيث تزويد FOV من gluPerspective( ... M_PI / 3.0f ... ) سيكون.

الملاحظات النهائية:

نصائح أخرى

أود أن أقول أنه نظرًا لأن OpenGL تم تصميمه مع وضع المستخدم النهائي في الاعتبار ، فقد تم استخدام الدرجات لأنه يمكن للمرء أن يحدد زوايا مهمة (90, 180, 270 ...) مع الأعداد الصحيحة فقط ، وبالتالي ليست هناك حاجة لنقطة عائمة GL_PI ثابت.

أعتقد أنه لأنك يجب أن تكون قادرًا على الحصول على مصفوفة دوران دقيقة لزوايا معينة مثل 90 أو 180 درجة. مثل الأشخاص الآخرين هنا ، إذا كنت تستخدم PI/2 بدلاً من 90 درجة ، فقد تؤدي أخطاء التقريب إلى مصفوفة تحويل تقريبيا يؤدي دوران بنسبة 90 درجة.

الكود أسهل في القراءة ، فإنه يخفف من منحنى التعلم للمبتدئين ويسمح بالقرصنة السريعة.

كما هو مذكور بالفعل - درجات لها ميزة - يتم استخدام البشر بشكل أفضل للدرجات ، مقارنة: 0.7853981639744830961566084581988 ... إلى 45 درجة على سبيل المثال:/.

للاستخدامات المتقدمة لـ OpenGL ، يمكنك تقديم المصفوفات الخاصة بك على أي حال.

حسنًا ، ما يحدث في معظم الحالات هو أنك تستخدم مكتبة الرياضيات للتحويل من الراديان إلى الدرجات والعودة إلى Radians. وأنا أتفق مع معظم ما قلت من قبل الملصقات الرائعة السابقة.

إنه أكثر إنسانية قابلة للقراءة.

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