Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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++;_C++_Opengl - Fatal编程技术网

C++ OpenGL-没有灯光的平面明暗处理C++;

C++ OpenGL-没有灯光的平面明暗处理C++;,c++,opengl,C++,Opengl,我已经实现了一个网格。线框渲染(三角形)还可以,但现在我想应用平面着色渲染,得到的是一个没有体积的图形,纯白色 以下是我使用的: for(int i=0; i<mesh->nt; i++) { glShadeModel(GL_FLAT); glBegin(GL_TRIANGLES); int i0 = mesh->triangles[i].vInds[0]; int i1 = mesh->triangles[i].vInds[1];

我已经实现了一个网格。线框渲染(三角形)还可以,但现在我想应用平面着色渲染,得到的是一个没有体积的图形,纯白色

以下是我使用的:

for(int i=0; i<mesh->nt; i++) {
    glShadeModel(GL_FLAT);
    glBegin(GL_TRIANGLES);


    int i0 = mesh->triangles[i].vInds[0];
    int i1 = mesh->triangles[i].vInds[1];
    int i2 = mesh->triangles[i].vInds[2];

    Vector n1 = GetNormal(mesh->vertices[i0], mesh->vertices[i1], mesh-                  >vertices[i2]);

    glNormal3dv((double *)&n1);

    glVertex3dv((double *)&mesh->vertices[i0]);
    glVertex3dv((double *)&mesh->vertices[i1]);
    glVertex3dv((double *)&mesh->vertices[i2]);

    glEnd();
}   
for(int i=0;int;i++){
glShadeModel(GLU平面);
glBegin(GL_三角形);
int i0=网格->三角形[i].vInds[0];
int i1=网格->三角形[i].vInds[1];
int i2=网格->三角形[i].vInds[2];
向量n1=GetNormal(网格->顶点[i0],网格->顶点[i1],网格->顶点[i2]);
glNormal3dv((双*)&n1);
glVertex3dv((双*)&网格->顶点[i0]);
glVertex3dv((双*)&网格->顶点[i1]);
glVertex3dv((双*)&网格->顶点[i2]);
格伦德();
}   

我计算了三角形的法线,但没有任何效果。有什么想法吗?

如果没有启用灯光/照明,三角形将不会着色。就这么简单。

也许这样更好

glEnable(GL_LIGHTING);
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES); // <-- start triangles before the loop, much faster

for(int i=0; i<mesh->nt; i++) 
{
    int i0 = mesh->triangles[i].vInds[0];
    int i1 = mesh->triangles[i].vInds[1];
    int i2 = mesh->triangles[i].vInds[2];

    Vector n1 = GetNormal(mesh->vertices[i0], 
                          mesh->vertices[i1], 
                          mesh->vertices[i2]);

    glNormal3dv((double *)&n1);

    glVertex3dv((double *)&mesh->vertices[i0]);
    glVertex3dv((double *)&mesh->vertices[i1]);
    glVertex3dv((double *)&mesh->vertices[i2]);
}   
glEnd();  
glEnable(GL_照明);
glShadeModel(GLU平面);
glBegin(GL_三角形);//三角形[i].vInds[0];
int i1=网格->三角形[i].vInds[1];
int i2=网格->三角形[i].vInds[2];
向量n1=GetNormal(网格->顶点[i0],
网格->顶点[i1],
网格->顶点[i2];
glNormal3dv((双*)&n1);
glVertex3dv((双*)&网格->顶点[i0]);
glVertex3dv((双*)&网格->顶点[i1]);
glVertex3dv((双*)&网格->顶点[i2]);
}   
格伦德();

作为旁注,我建议您阅读类似“如果您想学习现代OpenGL编程”。您正在使用的函数已弃用!