C++ 文本颜色不正确 无效文本(字符串str) { 对于(int i=0;i

C++ 文本颜色不正确 无效文本(字符串str) { 对于(int i=0;i,c++,opengl,C++,Opengl,我不确定白色的“正面”和黄色的“顶部”/“右侧”是从哪里来的(就颜色而言)。它们都应该是黑色的。有人知道问题是什么吗 以下是输出结果: 正如所怀疑的那样,这可能会令人震惊,但调用该函数时,glRasterPos(…)实际上会跟踪“当前”颜色。也就是说,在调用glRasterPos(…)之前设置的任何颜色都将作为该位置绘图操作的“当前颜色”。可以把它看作光栅化器与glVertex(…)的类似,我将在下面解释 在调用glRasterPos(…)之前,您需要设置当前颜色,为此,您应该从text(…)函

我不确定白色的“正面”和黄色的“顶部”/“右侧”是从哪里来的(就颜色而言)。它们都应该是黑色的。有人知道问题是什么吗

以下是输出结果:

正如所怀疑的那样,这可能会令人震惊,但调用该函数时,
glRasterPos(…)
实际上会跟踪“当前”颜色。也就是说,在调用
glRasterPos(…)
之前设置的任何颜色都将作为该位置绘图操作的“当前颜色”。可以把它看作光栅化器与
glVertex(…)
的类似,我将在下面解释

在调用
glRasterPos(…)
之前,您需要设置当前颜色,为此,您应该从
text(…)
函数中完全删除
glColor3f(…)
调用,或者修改该函数以同时执行这两项操作-设置颜色和光栅位置,然后绘制文本


: 当前光栅位置由三个窗口坐标(x、y、z)、剪辑坐标值(w)、眼睛坐标距离、有效位以及关联的颜色数据和纹理坐标组成


那些看起来很时髦的斜面立方体,我假设它们是你的“二极管”,我很确定字体渲染器使用的颜色是跟踪这些立方体设置的“当前”颜色。如果可以,我希望在您的问题中添加
二极管(…)
的实现,这将非常有帮助。同时,类似于
glColor4f(0.0f,0.0f,0.0f,1.0f)文本(…)
之前的code>可能会解决您的问题。呜呜,刚刚添加了二极管
void text(string str)
{
    for (int i = 0; i < str.length(); i++)
    {
        glColor3f(0.0f, 0.0f, 0.0f);
        glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, str[i]);
    }
}

void render(void)
{
    int width  = glutGet(GLUT_WINDOW_WIDTH);
    int height = glutGet(GLUT_WINDOW_HEIGHT);
    if (height == 0) height = 1;
    GLfloat aspect = (GLfloat)width / (GLfloat)height;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_SCISSOR_TEST);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, aspect, 0.1f, 100.0f);

    // Top view - top left
    glViewport(0, 0, width/2, height/2);
    glScissor(0, 0, width/2, height/2);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    PilotView(0.0f, 0.0f, -5.0f, 0.0f, 0.0f, 0.0f, 1.0f);
    glRasterPos3f(-0.1f, -0.1f, 4.0f);
    text("Front");
    diode();

    // Corner view - top right
    glViewport(width/2, 0, width/2, height/2);
    glScissor(width/2, 0, width/2, height/2);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    PilotView(0.0f, 0.0f, -5.0f, 0.0f, -90.0f, 0.0f, 1.0f);
    glRasterPos3f(4.0f, -0.1f, 0.1f);
    text("Right");
    diode();

    // Front view - bottom left
    glViewport(0, height/2, width/2, height/2);
    glScissor(0, height/2, width/2, height/2);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    PilotView(0.0f, 0.0f, -5.0f, 90.0f, 0.0f, 0.0f, 1.0f);
    glRasterPos3f(-0.1f, 4.0f, 0.0f);
    text("Top");
    diode();

    // Right view - bottom right
    glViewport(width/2, height/2, width/2, height/2);
    glScissor(width/2, height/2, width/2, height/2);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    PilotView(0.0f, 0.0f, -5.0f, 20.0f, 0.0f, 0.0f, 1.0f);
    glRasterPos3f(-0.1f, 4.0f, 0.0f);
    text("Fro4nt");
    diode();

    glDisable(GL_SCISSOR_TEST);
    glutSwapBuffers();
}