初学OpenGL的几个注意点

 我来答
陈璐燕1122
2018-10-17 · TA获得超过3.9万个赞
知道顶级答主
回答量:3.6万
采纳率:97%
帮助的人:3876万
展开全部
1,OpenGL是一个状态机,当前设定某个状态之后,效果将一直持续到下次重新设定。状态可以查询。
2,关于变换(矩阵):
i)变换矩阵分为三类,其一是“模型视图”矩阵,其二是“投影”矩阵,其三是“纹理”矩阵;不同命令形成的矩阵将自动归到不同类别,例如glRotatef生成的矩阵属于模型视图,gluPerspective生产的矩阵自动归到投影矩阵那类。但是当你要glLoadIdentity时,你发现它无法自动归类,再或者说你要使用glMultMatrixf时,它也不知道归到哪一类时,这时你必须用命令glMatrixMode来指明清楚,让他归到哪一类。其实说是说三类,实际上当前矩阵就三个(设为M,P,T),假设现在又新生成一个模型视图矩阵A,那么实际上就是在当前的模型视图矩阵M后面再乘以M,即更新后的模型视图矩阵是M*A,都是右边乘上去。
ii)关于变换顺序的理解:如果要在全局坐标系中理解,那么变换得反着看;如果想象成局部坐标系,那么变换就是顺着看(非归一化的缩放除外);
iii)关于矩阵堆栈,有一点必须要明白,那就是当前矩阵总是在栈顶的,也可以说,栈顶就是存放当前矩阵的地方。和i)类似,有三个堆栈(堆栈深度分别为32,2,2),分别用于存取三类矩阵。假设当前三个矩阵为(M,P,T),首先得通过glMatrixMode来指明清楚你即将使用哪个堆栈,如果用的是GL_MODELVIEW参数,然后再glPushMatrix时,就把当前的模型视图矩阵M复制一个(也就是把modelview栈的栈顶复制一个),然后压进了栈顶端(原来的栈顶成了现在的第二了,当然,现在栈顶和第二两个矩阵都是一样的,这样就起到保存当前设置的作用,因为接下来当前矩阵的改变实质是改变栈顶,第二及其以下都是不动的,除非使用pop后),假设你现在手头控制的模型视图矩阵还是M,假设现在又新生成一个模型视图矩阵A,那么当前的模型视图矩阵就是是M*A,同时栈顶端的矩阵也是M*A(因为栈顶就是当前矩阵),此时如果glPopMatrix的话(栈顶自己丢掉,第二个矩阵成栈顶了,因为栈顶就是当前,所以),那么当前的模型视图矩阵又成了M,因为栈顶是M,取出来之后作为当前的视图模型矩阵。 最后,由于深度有限,尽量少push,以免出错。
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲、导入文档内容”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表... 点击进入详情页
本回答由AiPPT提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式