Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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++_Opengl_Surface_Normals_Shading - Fatal编程技术网

C++ OpenGL法线不显示在三角形中

C++ OpenGL法线不显示在三角形中,c++,opengl,surface,normals,shading,C++,Opengl,Surface,Normals,Shading,我使用法线数组渲染法线数据集,如下所示: 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 ); glD

我使用法线数组渲染法线数据集,如下所示:

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 );
我的顶点渲染如下:

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
其中
randomNumber()
返回一个介于0和1之间的随机浮点数

我希望
nArray
应该填充0到1之间的随机浮点数,并且这些浮点数应该完全随机地显示在我生成的曲面上

渲染输出时,“法线”显示如下。我不在乎它没有计算出正确的法线,但两个并排三角形的法线似乎是相同的

下面是曲面的线框,用于显示单独的三角形:

我使用的着色方法是:
glShadeModel(GL_FLAT)

我期望每个三角形都有完全不同的灰度值,但事实并非如此。对于我在哪里出错的任何帮助,我们都表示感谢

我使用的着色方法是:
glShadeModel(GL_FLAT)

到目前为止,我一直和你在一起

渲染输出时,“法线”显示如下。我不在乎它没有计算出正确的法线,但两个并排三角形的法线似乎是相同的

是的

GL基本体可以具有平坦着色或平滑着色。默认情况下,平滑着色会在栅格化基本体时对顶点的计算颜色进行插值,通常会为每个生成的像素片段指定不同的颜色平面着色仅选择一个顶点的计算颜色,并将其指定给通过栅格化单个基本体生成的所有像素片段。


如果要在所有三个顶点的法线之间进行插值,则需要使用带有平面着色的
GL_SMOOTH

,每个三角形只有一个激发顶点,因此这将取决于如何在元素数组中重复使用顶点。