如何在OpenGL中将颜色更改为随机颜色?

3

我曾经尝试了无数次来让它工作。我已经移动了很多代码,但是仍然没有效果。当我按下M键时,我的灯应该会变成随机颜色。然而,它们只会变成白色。

这是我目前的代码...

float colorArray[100][3]; // 创建一个用于存储随机颜色的数组

keyPressed函数:

    case 'm' | 'M':
        updateLights(2);
    break;

defined_to_openGL function:

for (int i = 0; i < 3; i++)
{

    glPushMatrix();
    glColor3f(colorArray[i][0],colorArray[i][1],colorArray[i][2]);
        glTranslatef(-50*i/2,-20,0.5); // Begin the first circle at -50, -20. Then multiply by i to create a space between them.
        drawLights(2.0f);
    glPopMatrix();

    if(i <= 3)
    {
        glPushMatrix();
        glColor3f(colorArray[i][0],colorArray[i][1],colorArray[i][2]);
            glTranslatef(-38,-20,0.5);
            drawLights(2.0f);
        glPopMatrix();

        glPushMatrix();
        glColor3f(colorArray[i][0],colorArray[i][1],colorArray[i][2]);
            glTranslatef(-12,-20,0.5);
            drawLights(2.0f);
        glPopMatrix();
    }

}

更新灯光功能:

{
    cout << "update lights" << endl;
    for(int i = 0; i < 3; i++)
    {
        colorArray[i][0] = rand() % 255;
        colorArray[i][1] = rand() % 255;
        colorArray[i][2] = rand() % 255;
        glutPostRedisplay();
    }

}
1个回答

3
您正在使用glColor3f,该函数接受3个浮点参数,每个颜色强度的取值范围是[0.0,1.0],而rand()%255生成的输出值在[0,254]之间。
您可以切换到glColor3ub(GLubyte red, GLubyte green, GLubyte blue),该函数接受无符号字节(并将模数更改为%256,因为您跳过了一个值255),或通过将随机生成方式更改为rand()/((float)RAND_MAX+1)来生成[0.0,1.0]之间的值。但这意味着您必须将colorArray的类型更改为GLfloat

兄弟...我真的爱上你了。非常感谢你!glColor3f一直让我很头疼! ¬_¬ - Daniel Nelson
请注意,整个OpenGL库提供了不同的方式来调用相同的方法,具有不同的输入类型,这对于许多函数都是正确的。 - Jack
@Jack:请不要把OpenGL称为库,因为它不是。它是一个API规范,可以作为库实现。是的,我知道'L'最初代表库,但我个人将其反缩略为 - datenwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接