![](/img/trans.png)
[英]OpenGL rendering to Framebuffer results in a white rectangle texture
[英]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.