繁体   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