使用灯光

时间:2017-01-25 09:32:43

标签: c opengl

我有一个棋盘。 这样做的:

for(int i = 0; i < 8; i++)
    for (int j = 0; j < 8; j++) {
        drawSquare(i, j);
        int type = board[i][j];
        if (type != 0)
            drawPiece(i, j, type);
    }

使用此代码绘制64个方块:

int color = (x + z) % 2;
glColor3b(color, color, color); // also tried 3f

glPushMatrix(); {
    glTranslatef(x, 0, z);
    glBegin(GL_POLYGON); {
        glVertex3f(0, 0.01, 0);
        glVertex3f(0, 0.01, 1);
        glVertex3f(1, 0.01, 1);
        glVertex3f(1, 0.01, 0);
    } glEnd();
} glPopMatrix();

事实上,屏幕上有一个大方块,大小为8x8。但是,图像显示所有正方形都是相同的颜色,它们不应该是我打印的color,并且它确实交替为0/1。

以下是它的外观:(由于不那么棒的AA,你可以看到每个边缘方块的边界并验证有8个)

enter image description here

我正在使用的照明是:

static float g_lightPos[4] = { 10, 10, 100, 1 };
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, g_lightPos);

1 个答案:

答案 0 :(得分:0)

使用光照的OpenGL需要设置材质,而不依赖于当前颜色。

替换:

glColor3b(color, color, color);

使用:(例如)

GLfloat c[] = { color, color, color, 1 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c);

非常感谢上述帖子的评论者指出了我正确的方向。