我有紋理128 x 128像素24位BMP文件。這是一條垂直線的綠色廣場。它用stbi_image加載OK。在初始化啓用OpenGL紋理不起作用,因爲它應該
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
和紋理參數
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
我有與立方體和圓柱(和一些多邊形頂點帶)製成的對象。我綁定紋理一個像這樣過剩:
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, tex1_id);
glColor3f(0.0f, 1.0f, 0.0f);
glTranslatef(-0.5f, 0.2f, 0.05f);
glScalef(2.4f, 0.4f, 1.0f);
glutSolidCube(0.6f);
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
或頂點方:
glPushMatrix();
glTranslatef(-0.03f, 1.26f, -0.35f);
glRotatef(94, 1.0f, 0, 0);
glBindTexture(GL_TEXTURE_2D, tex1);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.3f, 0.4f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.3f, 0.4f, 0.0f);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
我知道glutSolidCube不generete紋理座標,但顯然與上glEnables它工作得精細。所以紋理顯示在對象上。一切看起來都很好。
問題在我用lookAt更改視圖時開始,或者我在一些路徑中翻譯和旋轉對象。然後它看起來像紋理不會隨對象移動和旋轉,而是保持靜態。
第一:初始視圖;第二:稍微旋轉的看法(lookAt);第三種:稍微翻譯的對象
如果我將使用頂點繪製該對象,則會發生同樣的事情。我在C++中使用OpenGL 2.1。
我相信你自己發現了這個問題。沒有紋理座標,它怎麼可能將頂點映射到紋理中的一個點? – Dave
@Dave我希望有一些神奇的方式可以讓它成爲可能。立方體很容易實現,所以我更關心實體圓柱體的實現。如果我執行glutSolidCylinder並在其中添加一些紋理座標,它會起作用嗎? –