OpenGL立即模式必须先指定纹理坐标

说实话,立即模式用了一年多了,还是犯了这个错误。因为很多代码例子里面都是先指定法线,再指定位置,结果添加纹理坐标的时候就变成了指定纹理坐标在最后。
错误的写法:

1
2
3
glNormal3f(n.x(), n.y(), n.z());
glVertex3f(p.x(), p.y(), p.z());
glTexCoord1f(g_p_DisFromFile->norm_dis[g_denoted_point_id][he->vertex()->tag()]);

不要以为这个bug很简单,说实话这种绘制的bug,不知道真的无从调试起来。。。这样写出现什么样子的bug,看下图吧。。。


面片是不是很恶心的块状物???我这里绘制的是三维属性场,肯定是连续的,我无论怎么改插值模式,都没有用。。。
后面才回想起以前遇到过这个bug,所以改过来了。正确的代码应该是:

1
2
3
glTexCoord1f(g_p_DisFromFile->norm_dis[g_denoted_point_id][he->vertex()->tag()]);
glNormal3f(n.x(), n.y(), n.z());
glVertex3f(p.x(), p.y(), p.z());

正确的显示结果是:


如此简单的事情,能造成这样大的差距。