簡體   English   中英

OpenGL 渲染白色紋理錯誤

[英]OpenGL rendering white texture bug

我使用 OpenGL 和 SDL2 來渲染脊椎動畫。 在特定的 z 順序中,這些動畫像白色塊一樣排列。 所有紋理都變白。 我猜這個錯誤在 OpenGL 繪制代碼中。

glPushMatrix();

float texw=0, texh=0;
if (texture) {
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    if (SDL_GL_BindTexture(texture, &texw, &texh) != 0)
        printf("WTF\n");
}

glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(color[0], color[1], color[2], color[3]);

glVertexPointer(2, GL_FLOAT, 0, vertices);


glTexCoordPointer(2, GL_FLOAT, 0, uvs);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// if (num_vertices > 0) {
glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, indices);

glDisableClientState(GL_VERTEX_ARRAY);
// glDisableClientState(GL_COLOR_ARRAY);


if (texture) {
    SDL_GL_UnbindTexture(texture);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}

glColor4f(1.0, 1.0, 1.0, 1.0);
glPopMatrix();

這是我的代碼,有人看到這段代碼有問題嗎? 為什么我得到白色紋理? 在此處輸入圖像描述

二維紋理必須通過glEnable(GL_TEXTURE_2D)啟用,並且可以通過glDisable(GL_TEXTURE_2D)禁用。
如果啟用了紋理,則在繪制幾何圖形時當前綁定的紋理將包裹在幾何圖形上。

如果啟用紋理,則默認情況下紋理元素的顏色乘以當前顏色,因為默認情況下紋理環境模式( GL_TEXTURE_ENV_MODE )為GL_MODULATE 請參閱glTexEnv 這會導致紋理紋素的顏色與您設置的最后一種顏色“混合” glColor4f

glEnable(GL_TEXTURE_2D);
glDrawElements(GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, indices);
glDisable(GL_TEXTURE_2D);

請注意,如果您不使用着色器程序,所有這些僅適用於即時模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM