C++ 纹理不是';映射到四边形的t

C++ 纹理不是';映射到四边形的t,c++,opengl,sdl,C++,Opengl,Sdl,我正在使用以下代码在OpenGL中绘制文本(使用SDL) 这里怎么了 glOrtho(0.0,屏幕宽度,屏幕高度,0.0,-1.0,10.0) OpenGL v2.2 SDL v1.2.15 Kubuntu Raring x64 更新:当使用…\u Solid而不是…\u Blended时,调用glColor3f(1,1,1)并传递SDL\u Color{255255255}会导致一些奇怪的结果: 四边形显示在它应该显示的位置,并显示奇怪的内容。怎么了?问题是在调用上述方法之前,我没有

我正在使用以下代码在OpenGL中绘制文本(使用SDL)

这里怎么了


  • glOrtho(0.0,屏幕宽度,屏幕高度,0.0,-1.0,10.0)
  • OpenGL v2.2
  • SDL v1.2.15
  • Kubuntu Raring x64

更新:当使用…\u Solid而不是…\u Blended时,调用
glColor3f(1,1,1)
并传递SDL\u Color{255255255}会导致一些奇怪的结果:


四边形显示在它应该显示的位置,并显示奇怪的内容。怎么了?

问题是在调用上述方法之前,我没有调用
glBlendFunc
。所以OpenGL设置了错误的混合模式。使用
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA)后看起来不错。

不设置“背景色”。它设置当前颜色。取决于您的纹理环境。状态,这通常意味着颜色与纹理相乘以生成最终颜色。很明显,如果你用黑色乘以一些东西,你会得到黑色。是的,但这并不能解释为什么我没有得到任何文本,是吗?它解释了为什么你的纹理包含的任何东西都没有被应用。你可以有一个全白色的纹理,如果你将它乘以(0.0,0.0,0.0),你永远不会知道你会看到所有的黑色。我也尝试过白色,它会变成全白色,与任何其他颜色一样(当文本颜色为白色时)。这一定意味着纹理完全变白了,对吗?
void renderText(const TTF_Font *font, const SDL_Color color,
                const double& x, const double& y, const double& z,  const std::string& text) {
    bool textured = glIsEnabled(GL_TEXTURE_2D);
    glEnable(GL_TEXTURE_2D);
    //test color: black
    glColor3f(0,0,0);
    SDL_Surface *Message = TTF_RenderText_Blended(const_cast<TTF_Font*>(font), text.c_str(), color);
    GLuint Texture = 0;

    //Generate an OpenGL 2D texture from the SDL_Surface
    glGenTextures(1, &Texture);
    glBindTexture(GL_TEXTURE_2D, Texture);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Message->w, Message->h, 0, GL_BGRA,
                 GL_UNSIGNED_BYTE, Message->pixels);

    //Draw this texture on a quad with the given xyz coordinates.
    glBegin(GL_QUADS);
        glTexCoord2d(0, 0); glVertex3d(x, y, z);
        glTexCoord2d(1, 0); glVertex3d(x+Message->w, y, z);
        glTexCoord2d(1, 1); glVertex3d(x+Message->w, y+Message->h, z);
        glTexCoord2d(0, 1); glVertex3d(x, y+Message->h, z);
    glEnd();

    //Clean up
    glDeleteTextures(1, &Texture);
    SDL_FreeSurface(Message);
    if (!textured)
        glDisable(GL_TEXTURE_2D);
}
font: previously loaded TTF_Font != NULL
color: SDL_Color {255,255,255} (white)
x = 10
y = 10
z = 0
text = "test"