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

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

سؤال

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

// load image from file, called one time on load:
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);

RgbImage theTexMap( filename );

glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, theTexMap.GetNumCols(), theTexMap.GetNumRows(), 0, GL_RGB, GL_UNSIGNED_BYTE, theTexMap.ImageData() );

// render quad and texture, called inside glutDisplayFunc callback
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-50.0, -50.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-50.0, 50.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(50.0, 50.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(50.0, -50.0, 0.0);
glEnd();

glFlush();
glDisable(GL_TEXTURE_2D);

أؤكد الكثير من التعليمات البرمجية لأنني أحاول تمديد مثال من مكتبة الطرف الثالث (Artoolkit). هناك الكثير من التعليمات البرمجية هناك أكثر من الاحتياجات التي تظهر هنا.

أي أفكار لخطأ قد أرتكبها من شأنها أن تعرض الربع ، ولكن لا تجعل الملمس/الصورة؟

alt text

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

المحلول

إعادة صياغة كائن الملمس الخاص بك في الخاص بك glutDisplayFunc() رد الاتصال ، فقط في Case ™.

أيضا ، أنا حذر قليلا من GL_RGBA8. محاولة GL_RGBA. ربما الخرافات من جانبي رغم ذلك.

نصائح أخرى

Dunno دون تجربته بنفسي ، لكن يبدو من الغريب بعض الشيء أنك تستخدم GL_RGBA8 للتنسيق الداخلي و GL_RGB لتنسيق بكسل.

شخصيا ، ما لم أستخدمه على ملمستي ، سأفعل أيضًا GL_DISABLE(GL_LIGHTING) أيضًا بالنسبة للكائنات المحكم ، إذا كان ذلك سيساعد ذلك ، فأنا أعلم أنني أواجه بعض الأشياء التي لم أفهمها حقًا فيما يتعلق بمجموعات الضوء والملمس.

بعض الأفكار:

ألا ينبغي أن تتصل بـ Glenable (gl_texture_2d) قبل تكوين الملمس وتحميله؟

هل تأكدت من أن أبعاد الملمس هي قوى 2؟

إذا كنت ترغب في استخدام وظائف GL_LINEAR للتضخم/التصغير ، فربما ترغب في إنشاء MIPMAPS من نسيجك الأصلي.

هل حاولت استخدام gl_replace بدلاً من gl_modulate؟

لا أراك تمرر أي لون مع رؤوسك ، وسيتم تعديل GL_Modulate مع كل ما هو اللون الحالي.

يحدد نسيجك فقط مستوى MIP 0 ، وليس مستويات MIP الأخرى ، وبالتالي قد تكون النتيجة غير محددة إذا لم يتم تقديمها عند مستوى MIP 0. الإصلاح السريع هو:

gltexparameteri (gl_texture_2d ، gl_generate_mipmap ، gl_true) ؛

إنه خطأ سهل. مرجع جيد:

http://www.opengl.org/wiki/Common_Mistakes

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