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

时间:2012-11-29 22:31:39

标签: opengl

我已经尝试了无数次试图让它发挥作用。我已经移动它的负载,但仍然没有任何作用。当我按下M键时,我的灯光会变成随机颜色。但是,它们只是改变为白色。

这就是我的......

float colorArray [100] [3]; //为随机颜色创建一个数组

keyPressed功能:

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

defined_to_openGL函数:

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 个答案:

答案 0 :(得分:3)

您正在使用glColor3f,在[0.0,1.0]中为每种颜色强度接受3个浮点参数,而rand()%255生成的输出位于[0,254]

您可以切换到接受无符号字节的glColor3ub( GLubyte red, GLubyte green, GLubyte blue)(并将模数更改为%256,因为您要使用255跳过值)或在{{1}中生成值通过将随机生成更改为 [0.0,1.0] 但这意味着您必须将rand()/((float)RAND_MAX+1)的类型更改为colorArray