c++照明多个对象

标签 c++ opengl lighting

enter image description here

在图片中,您可以看到光源所在的位置有一个白色圆点。右边的物体正确点亮,但左边的物体没有。

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,0.0};
void render()
{
    ::clearScreen(); // clear screen
    ::camera->update(); //changes matrix for camera

    glPushMatrix();
    glRotatef(x,0,1,0);
    glTranslatef(0,0,1);
    glBegin(GL_POINTS); // draw white dot
    glVertex3f(LightPosition[0],LightPosition[1],LightPosition[2]);
    glEnd();

    glLightfv (GL_LIGHT0,GL_POSITION,LightPosition); // position light
    ::glPopMatrix();

    ::m2->draw(); // draw king chess piece

    ::glPushMatrix();
    glTranslatef(4,0,0);
    m1->draw(); // draw sphere
    ::glPopMatrix();

    glFlush();
    glutSwapBuffers();
}

我知道我只是照亮了两个物体,就好像它们在世界的中心一样,然后我将物体平移到左边导致这种效果。我该如何解决这个问题并让我的物体正确发光?

最佳答案

您的光源没有位置,只有方向,因此不受平移的影响。另外,对于定向光,顶点处理器不会计算从源到顶点的方向。

w 坐标设置为 1 t 有一个点光源:

GLfloat LightPosition[] = {0.0f,0.0f,1.0f,1.0};

关于c++照明多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168055/

相关文章:

c++ - 调试断言失败 : _BLOCK_TYPE_IS_VALID

c++ - OpenGL 中的绘制顺序

c++ - Sun 作为光源使用 opengl 和 c++

c++ - 点光照错误 Directx 11

c++ - 将字符串 vector 转换为 int

c++ - Qt:如何在任何 Windows 机器上使用路径创建文件?

c++ - 如何最好地使其他类可以访问网络功能?

opengl - GL_LINES 是创建三角形还是使用它们自己的处理?

c++ - NaCl OpenGL 示例

ios - 为什么应用在提交到 App Store (OpenGL ES 1) 后看起来不一样?