ما هو السلوك الصحيح عندما يتم ربط كل من 1D و 2 D بالملمس في OpenGL؟
-
03-10-2019 - |
سؤال
قل أن لديك شيء مثل هذا:
glBindTexture(GL_TEXTURE_2D, my2dTex);
glBindTexture(GL_TEXTURE_1D, my1dTex);
glBegin...
ما هو سلوك OpenGL الصحيح؟ لرسم نسيج 1D ، 2D أو كليهما؟ لكل نسيج نشط ، هل هناك بالفعل قوام متعددة يمكن أن تكون مرتبطة بها في نفس الوقت (أي خريطة مكعب 3D ، ثنائية الأبعاد ، إلخ)؟
المحلول
حالة GL للربط هي اسم نسيج واحد لكل هدف (أي 1D/2D/3D/Cube). لذلك عند الاتصال
glBindTexture(GL_TEXTURE_2D, my2dTex)
glBindTexture(GL_TEXTURE_1D, my1dTex)
سوف تتذكر GL كلا الإعدادات.
الآن ، الجواب الذي سوف GL واحد سوف استعمال يعتمد على ما إذا كان لديك تظليل.
إذا كان التظليل قيد التشغيل ، فسيستخدم GL ما يقوله Shader. (استنادا إلى sampler1d/sampler2d ...).
إذا لم يكن هناك تظليل ، فإنه يعتمد أولاً على المكالمة التي تم إجراء مكالمة.
glEnable(GL_TEXTURE_2D)
glEnable(GL_TEXTURE_1D)
إذا على حد سواء يتم تمكينها ، هناك قاعدة أولوية ثابتة في المواصفات (3.8.15 تطبيق نسيج في GL 1.5 Spec).
Cube > 3D > 2D > 1D
لذلك في حالتك ، إذا تم تمكين كلا من أهداف الملمس ، فسيتم استخدام ثنائي الأبعاد.
كملاحظة جانبية ، لاحظ كيف تظليل لا يهتم سواء تم تمكين هدف الملمس أم لا ...
تحرير لإضافة:
وبالنسبة للأشخاص الذين يرغبون حقًا في الوصول إلى التفاصيل الشديدة ، أنت دائماً لديك نسيج مرتبط لكل هدف * كل وحدة. يتوافق الاسم 0 (الافتراضي لحالة الربط) مع سلسلة من كائنات الملمس ، واحدة لكل هدف. glBindTexture(GL_TEXTURE_2D, 0)
و glBindTexture(GL_TEXTURE_1D, 0)
كلاهما يربط الملمس ، ولكن ليس نفس الملمس ...
هذا تاريخي ، محدد لمطابقة سلوك GL 1.0 ، حيث لم تكن كائنات الملمس موجودة بعد. لست متأكدًا مما فعله إهمال في GL3.0 مع هذا.
نصائح أخرى
أعتقد أنه سيتم رسم نسيج 1D. على حد علمي ، يمكن أن يكون لكل وحدة ملمس نسيج واحد فقط ملزمة في وقت واحد. عدد أبعاد الملمس لا يأتي فيه حقًا.
للحصول على أكثر من مملوك واحد ، يجب عليك تنشيط أكثر من وحدة نسيج واحدة (باستخدام GlactiveTexture) ، مثل هذا:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, my2dTex);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_1D, my1dTex);
يأتي هذا من معرفتي بـ OpenGL 2.1 ، لذا يرجى تصحيح لي إذا قدموا بعض تمديد الملمس الجديد الرائع في إصدار لاحق!
الملمس المطبق هو الأخير المحدد مع روتين BindTexture.
من المواصفات:
كائن الملمس الجديد المرتبط بالهدف هو ، ويبقى نسيج الأبعاد والنوع المحدد بواسطة الهدف حتى يتم حذفه. .... إذا نجح الربط ، فلن يتم إجراء تغيير على حالة كائن الملمس المرتبط ، وأي ملزم سابق للهدف مكسور.
في الواقع ، في مثالك ، سيتم تطبيقه على نسيج 1D ، نظرًا لأنه "الكتابة فوق" حالة وحدة الملمس النشطة.