0

我在 OpenGL 中有一个简单的程序,它创建一个地平面、随机放置的树对象,并有一些闪电。闪电存在我无法解决的问题。当相机在某个“x”角时,闪电似乎没有影响到地面,它看起来是黑色的。这瞬间变化,并没有逐渐变暗。大部分地面看起来都很好,但在某些角度它会立即变黑。代码非常混乱,它的很多核心是 Lighthouse 3D 的 OpenGL 教程的一部分,因为我正在学习 OpenGL 课程,这是课程的目标,学习这些教程并用它创造一些独特的东西。有谁知道如何解决这一问题?也许照明实施不正确?下面的代码是绘制地平面的代码。

// Draw ground
glColor3f(0.039f, 0.341f, 0.078f);
glNormal3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
    glVertex3f(-1500.0f, -8.0f, -1500.0f);
    glVertex3f(-1500.0f, -8.0f,  1500.0f);
    glVertex3f( 1500.0f, -8.0f,  1500.0f);
    glVertex3f( 1500.0f, -8.0f, -1500.0f);
glEnd();

此代码用于照明。

glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
glEnable(GL_AMBIENT);
glEnable(GL_DIFFUSE);
glEnable(GL_SPECULAR);
glDisable(GL_EMISSION);
GLfloat lightpos[] = {1.0, 1.0, 7.0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

GLfloat ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8, 1.0f };
GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat position[] = { 1250.0f, 1250.0f, 2.0f, 1.0f };
GLfloat position2[] = { -1250.0, 1250.0f, 2.0f, 1.0f};
GLfloat position3[] = { 2.0f, 1250.0f, 1250.0f, 1.0f};


glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT1, GL_POSITION, position2);
glLightfv(GL_LIGHT1, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT1, GL_SPECULAR, specularLight);
//glLightfv(GL_LIGHT2, GL_POSITION, position3);
//glLightfv(GL_LIGHT2, GL_AMBIENT, ambientLight);
//glLightfv(GL_LIGHT2, GL_DIFFUSE, diffuseLight);
//glLightfv(GL_LIGHT2, GL_SPECULAR, specularLight);
4

0 回答 0