2013-04-10 71 views
0

我已經實現了一個網格。可以用線框渲染(三角形),但現在我想應用平面着色渲染,而我得到的是沒有音量的數字,純白色。OpenGL-不帶光源的平面着色C++

這裏是我使用:

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(); 
} 

我計算出的三角形的法線但沒有任何工程。任何想法?

+2

作爲一個方面說明,如果您想學習現代OpenGL編程,我會建議您閱讀http://www.arcsynthesis.org/gltut/。您正在使用的功能已棄用! – 2013-04-10 13:51:59

回答

6

如果您沒有啓用燈光/照明,三角形不會被陰影化。就那麼簡單。

1

也許那樣更好?

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(); 
+0

*發佈固定管道代碼並討論「更快」* – 2013-04-10 14:38:13