簡體   English   中英

OpenGL法線不出現在三角形中

[英]OpenGL Normals not appearing in triangles

我正在使用普通數組來渲染普通數據集,如下所示:

glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer( GL_FLOAT, 0, nArray );

我的頂點呈現如下:

glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_FLOAT, 0, vArray );
glDrawElements( GL_TRIANGLES, iSize, GL_UNSIGNED_INT, iArray );
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_NORMAL_ARRAY );

為了這個例子,我按如下方式填充我的nArray(當正常計算法線時仍然會出現錯誤):

for(int i = 0; i < nSize * 3; ++i){
    nArray[i] = randomNumber();
}

randomNumber()返回0到1之間的隨機浮點數。

我希望nArray應該填充0到1之間的隨機浮點數,這些應該在我生成的表面上完全隨機顯示。

當我渲染輸出時,“法線”顯示如下。 我不在乎它不計算正確的法線,但看起來兩個並排三角形的法線是相同的。

不是三角形的法線圖片

下面是表面的線框,用於顯示單獨的三角形: 上面圖象的Wireframe圖象

我使用的陰影方法是: glShadeModel(GL_FLAT);

我預計每個三角形都會有完全不同的灰度值,但情況並非如此。 對我出錯的任何幫助表示贊賞。

我使用的陰影方法是: glShadeModel(GL_FLAT);

和你一起到目前為止。

當我渲染輸出時,“法線”顯示如下。 我不在乎它不計算正確的法線,但看起來兩個並排三角形的法線是相同的

是的, 你通過GL_FLAT要求

GL基元可以具有平坦或平滑的陰影。 默認情況下,平滑着色會導致計算的頂點顏色在基元被光柵化時進行插值,通常會為每個結果像素片段分配不同的顏色。 平面着色選擇僅一個頂點的計算顏色,並將其分配給通過柵格化單個基元生成的所有像素片段。

如果要在所有三個頂點的法線之間進行插值,則需要使用GL_SMOOTH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM