我使用普通数组渲染普通数据集,如下所示:
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之间的随机浮点数,这些应该在我生成的表面上完全随机显示。
当我渲染输出时,&#34;法线&#34;显示如下。我不在乎它没有计算出正确的法线,但看起来两个并排三角形的法线是相同的。
我使用的阴影方法是:glShadeModel(GL_FLAT);
我预计每个三角形都会有完全不同的灰度值,但情况并非如此。我对错误的任何帮助表示赞赏。
答案 0 :(得分:3)
我使用的阴影方法是:
glShadeModel(GL_FLAT);
到目前为止。
当我渲染输出时,“法线”显示如下。我不在乎它没有计算正确的法线,但看起来两个并排的三角形的法线是相同的
是的,you requested that via GL_FLAT
:
GL基元可以具有平坦或平滑的阴影。默认情况下,平滑着色会导致计算的顶点颜色在基元被光栅化时进行插值,通常会为每个结果像素片段分配不同的颜色。 平面着色选择仅一个顶点的计算颜色,并将其分配给通过栅格化单个基元生成的所有像素片段。
如果要在所有三个顶点的法线之间进行插值,则需要使用GL_SMOOTH
。