[英]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之間的隨機浮點數,這些應該在我生成的表面上完全隨機顯示。
當我渲染輸出時,“法線”顯示如下。 我不在乎它不計算正確的法線,但看起來兩個並排三角形的法線是相同的。
我使用的陰影方法是: glShadeModel(GL_FLAT);
我預計每個三角形都會有完全不同的灰度值,但情況並非如此。 對我出錯的任何幫助表示贊賞。
我使用的陰影方法是:
glShadeModel(GL_FLAT);
和你一起到目前為止。
當我渲染輸出時,“法線”顯示如下。 我不在乎它不計算正確的法線,但看起來兩個並排三角形的法線是相同的
是的, 你通過GL_FLAT
要求 :
GL基元可以具有平坦或平滑的陰影。 默認情況下,平滑着色會導致計算的頂點顏色在基元被光柵化時進行插值,通常會為每個結果像素片段分配不同的顏色。 平面着色選擇僅一個頂點的計算顏色,並將其分配給通過柵格化單個基元生成的所有像素片段。
如果要在所有三個頂點的法線之間進行插值,則需要使用GL_SMOOTH
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.