Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL自定义四边形有照明缺陷_C++_Opengl - Fatal编程技术网

C++ OpenGL自定义四边形有照明缺陷

C++ OpenGL自定义四边形有照明缺陷,c++,opengl,C++,Opengl,我正试图找出如何编写自己的原语,比如gluSolidCube() 在下面的代码中,我画了两个四边形。一个是通过这个方法(红色的),另一个是我自己通过glBegin()/glEnd()的帮助(蓝色的) 因此,正如您在下面的屏幕截图中所看到的,红色四边形上的灯光与蓝色的灯光不同,是正确的。如何解决这个问题 如果没有,OpenGL固定功能照明将无法正常工作 您需要提供,可能是通过glNormal()对于您提供的最小代码,您需要normals:@Amadeus此链接没有为我提供解决方案。我试图在每

我正试图找出如何编写自己的原语,比如gluSolidCube()

在下面的代码中,我画了两个四边形。一个是通过这个方法(红色的),另一个是我自己通过glBegin()/glEnd()的帮助(蓝色的)

因此,正如您在下面的屏幕截图中所看到的,红色四边形上的灯光与蓝色的灯光不同,是正确的。如何解决这个问题




如果没有,OpenGL固定功能照明将无法正常工作


您需要提供,可能是通过
glNormal()

对于您提供的最小代码,您需要normals:@Amadeus此链接没有为我提供解决方案。我试图在每个glVertex()之前添加一个glNormal(0,0,1),但没有用……好吧,我明白了,我需要做更多的数学。对于每个平面,我需要得到一个法向量?这有什么方程式吗?谷歌搜索。。。
glPushMatrix();
    glRotatef(-angleX, 0, 0, 1);
    glRotatef(angleY, 0, 1, 0);

    glColor3f(1, 0, 0);
    glTranslatef(0.6, 0, 0);
    glutSolidCube(1);

    glColor3f(0, 0, 1);
    glTranslatef(-1.2, 0, 0);
    glPolygonMode(GL_FRONT, GL_FILL);
    glShadeModel(GL_SMOOTH);
    glBegin(GL_QUADS);
        glVertex3f(0.5, 0.5, 0.5);
        glVertex3f(0.5, 0.5, -0.5);
        glVertex3f(-0.5, 0.5, -0.5);
        glVertex3f(-0.5, 0.5, 0.5);

        glVertex3f(0.5, 0.5, 0.5);
        glVertex3f(0.5, 0.5, -0.5);
        glVertex3f(0.5, -0.5, -0.5);
        glVertex3f(0.5, -0.5, 0.5);

        glVertex3f(-0.5, 0.5, -0.5);
        glVertex3f(-0.5, 0.5, 0.5);
        glVertex3f(-0.5, -0.5, 0.5);
        glVertex3f(-0.5, -0.5, -0.5);

        glVertex3f(0.5, 0.5, -0.5);
        glVertex3f(-0.5, 0.5, -0.5);
        glVertex3f(-0.5, -0.5, -0.5);
        glVertex3f(0.5, -0.5, -0.5);

        glVertex3f(0.5, 0.5, 0.5);
        glVertex3f(-0.5, 0.5, 0.5);
        glVertex3f(-0.5, -0.5, 0.5);
        glVertex3f(0.5, -0.5, 0.5);

        glVertex3f(0.5, -0.5, 0.5);
        glVertex3f(0.5, -0.5, -0.5);
        glVertex3f(-0.5, -0.5, -0.5);
        glVertex3f(-0.5, -0.5, 0.5);
    glEnd();
glPopMatrix();