ما هو السلوك الصحيح عندما يتم ربط كل من 1D و 2 D بالملمس في OpenGL؟

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

سؤال

قل أن لديك شيء مثل هذا:

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 ، نظرًا لأنه "الكتابة فوق" حالة وحدة الملمس النشطة.

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