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
Opengl 为什么金字塔可以使用GL_平滑来着色,而另一个立方体只是像GL_平面一样着色?_Opengl_Opengl Compat - Fatal编程技术网

Opengl 为什么金字塔可以使用GL_平滑来着色,而另一个立方体只是像GL_平面一样着色?

Opengl 为什么金字塔可以使用GL_平滑来着色,而另一个立方体只是像GL_平面一样着色?,opengl,opengl-compat,Opengl,Opengl Compat,此代码用于绘制一个金字塔和一个立方体。我正在尝试使用GL\u SMOOTHtype byglShadeModel给它们上色。但结果是,只有金字塔是平滑的,而另一个立方体的颜色只像一个平面 看起来法向量有一些问题,但我在这方面做得很差 以下是我的代码: void initGL() { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearDepth(1.0f); // Set background depth

此代码用于绘制一个金字塔和一个立方体。我正在尝试使用
GL\u SMOOTH
type by
glShadeModel
给它们上色。但结果是,只有金字塔是平滑的,而另一个立方体的颜色只像一个平面

看起来法向量有一些问题,但我在这方面做得很差

以下是我的代码:

void initGL() {

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClearDepth(1.0f);                   // Set background depth to farthest
    glEnable(GL_DEPTH_TEST);   // Enable depth testing for z-culling
    glDepthFunc(GL_LEQUAL);    // Set the type of depth-test
    glShadeModel(GL_SMOOTH);   // Enable smooth shading
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(1.5f, 0.0f, -7.0f);

    glBegin(GL_QUADS); 
       glColor3f(0.0f, 1.0f, 0.0f);     // Green
       glVertex3f( 1.0f, 1.0f, -1.0f);
       glVertex3f(-1.0f, 1.0f, -1.0f);
       glVertex3f(-1.0f, 1.0f,  1.0f);
       glVertex3f( 1.0f, 1.0f,  1.0f);

      // Bottom face (y = -1.0f)
       glColor3f(1.0f, 0.5f, 0.0f);     // Orange
       glVertex3f( 1.0f, -1.0f,  1.0f);
       glVertex3f(-1.0f, -1.0f,  1.0f);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       glVertex3f( 1.0f, -1.0f, -1.0f);

      // Front face  (z = 1.0f)
       glColor3f(1.0f, 0.0f, 0.0f);     // Red
       glVertex3f( 1.0f,  1.0f, 1.0f);
       glVertex3f(-1.0f,  1.0f, 1.0f);
       glVertex3f(-1.0f, -1.0f, 1.0f);
       glVertex3f( 1.0f, -1.0f, 1.0f);

      // Back face (z = -1.0f)
       glColor3f(1.0f, 1.0f, 0.0f);     // Yellow
       glVertex3f( 1.0f, -1.0f, -1.0f);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       glVertex3f(-1.0f,  1.0f, -1.0f);
       glVertex3f( 1.0f,  1.0f, -1.0f);

      // Left face (x = -1.0f)
       glColor3f(0.0f, 0.0f, 1.0f);     // Blue
       glVertex3f(-1.0f,  1.0f,  1.0f);
       glVertex3f(-1.0f,  1.0f, -1.0f);
       glVertex3f(-1.0f, -1.0f, -1.0f);
       glVertex3f(-1.0f, -1.0f,  1.0f);

      // Right face (x = 1.0f)
       glColor3f(1.0f, 0.0f, 1.0f);     // Magenta
       glVertex3f(1.0f,  1.0f, -1.0f);
       glVertex3f(1.0f,  1.0f,  1.0f);
       glVertex3f(1.0f, -1.0f,  1.0f);
       glVertex3f(1.0f, -1.0f, -1.0f);
    glEnd();  // End of drawing color-cube

   // Render a pyramid consists of 4 triangles
    glLoadIdentity();                  // Reset the model-view matrix
    glTranslatef(-1.5f, 0.0f, -6.0f);  // Move left and into the screen

    glBegin(GL_TRIANGLES);           // Begin drawing the pyramid with 4 triangles
      // Front
       glColor3f(1.0f, 0.0f, 0.0f);     // Red
       glVertex3f( 0.0f, 1.0f, 0.0f);
       glColor3f(0.0f, 1.0f, 0.0f);     // Green
       glVertex3f(-1.0f, -1.0f, 1.0f);
       glColor3f(0.0f, 0.0f, 1.0f);     // Blue
       glVertex3f(1.0f, -1.0f, 1.0f); 

      // Right
       glColor3f(1.0f, 0.0f, 0.0f);     // Red
       glVertex3f(0.0f, 1.0f, 0.0f);
       glColor3f(0.0f, 0.0f, 1.0f);     // Blue
       glVertex3f(1.0f, -1.0f, 1.0f);
       glColor3f(0.0f, 1.0f, 0.0f);     // Green
       glVertex3f(1.0f, -1.0f, -1.0f);

      // Back
       glColor3f(1.0f, 0.0f, 0.0f);     // Red
       glVertex3f(0.0f, 1.0f, 0.0f);
       glColor3f(0.0f, 1.0f, 0.0f);     // Green
       glVertex3f(1.0f, -1.0f, -1.0f);
       glColor3f(0.0f, 0.0f, 1.0f);     // Blue
       glVertex3f(-1.0f, -1.0f, -1.0f);

      // Left
       glColor3f(1.0f,0.0f,0.0f);       // Red
       glVertex3f( 0.0f, 1.0f, 0.0f);
       glColor3f(0.0f,0.0f,1.0f);       // Blue
       glVertex3f(-1.0f,-1.0f,-1.0f);
       glColor3f(0.0f,1.0f,0.0f);       // Green
       glVertex3f(-1.0f,-1.0f, 1.0f);
    glEnd();   // Done drawing the pyramid

    glutSwapBuffers();  // Swap the front and back frame buffers (double buffering)
}

有人能告诉我这是怎么发生的吗?

当你画金字塔时,你有一种颜色与三角形基本体的每个顶点坐标相关联。e、 g:

glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(1.0f,-1.0f,1.0f);
这会导致顶点(角点)的颜色在三角形上插值

绘制立方体时,您为每个四边形设置了一种颜色。四边形的每个角都与相同的颜色相关联:

glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(1.0f、1.0f、1.0f);

这会导致整个四边形图元颜色一致。如果需要颜色渐变,则必须将不同的颜色与顶点(角点)关联。

绘制棱锥体时,将有一种颜色与三角形基本体的每个顶点坐标关联。e、 g:

glColor3f(1.0f,0.0f,0.0f);//红色
glVertex3f(0.0f,1.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(0.0f,0.0f,1.0f);//蓝色
glVertex3f(1.0f,-1.0f,1.0f);
这会导致顶点(角点)的颜色在三角形上插值

绘制立方体时,您为每个四边形设置了一种颜色。四边形的每个角都与相同的颜色相关联:

glColor3f(0.0f,1.0f,0.0f);//绿色
glVertex3f(1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,-1.0f);
glVertex3f(-1.0f,1.0f,1.0f);
glVertex3f(1.0f、1.0f、1.0f);

这会导致整个四边形图元颜色一致。如果需要颜色渐变,则必须将不同的颜色与顶点(角点)关联起来。

谢谢。我以为我错过了这么大的一个错误,但是每个垂直方向上的颜色插值与法线有关吗?谢谢。我以为我错过了这么大的一个错误,但是每个垂直方向上的颜色插值与法线有关吗?