请大神解答......下面这段代码运行结果就是Opengl控制台黑屏的结果么glut教程(三)的代码。谢谢啦!!

请大神解答......下面这段代码运行结果就是Opengl控制台黑屏的结果么glut教程(三)的代码。谢谢啦!!,第1张

我看到的错误是在renderScene的开头调用glLoadIdentity接口,这个接口是把当前(投影或模型矩阵设为单位矩阵的,一般是当窗口大小改变时(比如你的changeSize函数)需要重新设置投影和模型矩阵时才调用,重绘时不需要再调用。

1,OpenGL是一个状态机,当前设定某个状态之后,效果将一直持续到下次重新设定。状态可以查询。

2,关于变换(矩阵):

i)变换矩阵分为三类,其一是“模型视图”矩阵,其二是“投影”矩阵,其三是“纹理”矩阵;不同命令形成的矩阵将自动归到不同类别,例如glRotatef生成的矩阵属于模型视图,gluPerspective生产的矩阵自动归到投影矩阵那类。但是当你要glLoadIdentity时,你发现它无法自动归类,再或者说你要使用glMultMatrixf时,它也不知道归到哪一类时,这时你必须用命令glMatrixMode来指明清楚,让他归到哪一类。其实说是说三类,实际上当前矩阵就三个(设为M,P,T),假设现在又新生成一个模型视图矩阵A,那么实际上就是在当前的模型视图矩阵M后面再乘以M,即更新后的模型视图矩阵是MA,都是右边乘上去。

ii)关于变换顺序的理解:如果要在全局坐标系中理解,那么变换得反着看;如果想象成局部坐标系,那么变换就是顺着看(非归一化的缩放除外);

iii)关于矩阵堆栈,有一点必须要明白,那就是当前矩阵总是在栈顶的,也可以说,栈顶就是存放当前矩阵的地方。和i)类似,有三个堆栈(堆栈深度分别为32,2,2),分别用于存取三类矩阵。假设当前三个矩阵为(M,P,T),首先得通过glMatrixMode来指明清楚你即将使用哪个堆栈,如果用的是GL_MODELVIEW参数,然后再glPushMatrix时,就把当前的模型视图矩阵M复制一个(也就是把modelview栈的栈顶复制一个),然后压进了栈顶端(原来的栈顶成了现在的第二了,当然,现在栈顶和第二两个矩阵都是一样的,这样就起到保存当前设置的作用,因为接下来当前矩阵的改变实质是改变栈顶,第二及其以下都是不动的,除非使用pop后),假设你现在手头控制的模型视图矩阵还是M,假设现在又新生成一个模型视图矩阵A,那么当前的模型视图矩阵就是是MA,同时栈顶端的矩阵也是MA(因为栈顶就是当前矩阵),此时如果glPopMatrix的话(栈顶自己丢掉,第二个矩阵成栈顶了,因为栈顶就是当前,所以),那么当前的模型视图矩阵又成了M,因为栈顶是M,取出来之后作为当前的视图模型矩阵。 最后,由于深度有限,尽量少push,以免出错。

以上就是关于请大神解答......下面这段代码运行结果就是Opengl控制台黑屏的结果么glut教程(三)的代码。谢谢啦!!全部的内容,包括:请大神解答......下面这段代码运行结果就是Opengl控制台黑屏的结果么glut教程(三)的代码。谢谢啦!!、初学OpenGL的几个注意点、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9700908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存