opengl绘制一个机器人手臂的一些问题
2015-11-19 00:38
337 查看
glClear (GL_COLOR_BUFFER_BIT); glPushMatrix(); //将当前的堆栈中所有的堆栈向下压入一级。其实是相当于记住当前的位置。 //记住了全局坐标系中的坐标位置。 glTranslatef (-1.0, 0.0, 0.0); //将局部坐标系的位置向左平移一个单位。 glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix(); //记住了shoulder旋转后的局部坐标进行平移后的操作 glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); //调用glTranslate()函数指定关节的位置,并调用了glRotate()使得长方体绕关节旋转后,应该将局部坐标的原点平移到 //长方体的中心,并对立方体进行缩放,然后绘制该立方体。 问题1: 这是绘制机器人的一段代码,按照绘图的思路,本不是应该先画一个立方体,然后如果你想要达成什么效果,对其进行相应的模型变换么?这段代码前半部分暂且不说,就 glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); 为什么不能写成 glutWireCube (1.0); glScalef (2.0, 0.4, 1.0); 问题2:这段代码中使用的是glTranslate()函数指定关节的位置,那是移动了局部坐标系后的一个位置,如何你能保证最后的缩放后的那个立方体的关节就在之前你设置好的那个位置呢? 问题3:我对其中的glPushMatrix();glPopMatrix();过多的调用表示不甚理解,求指导。
举报| 2013-12-09
18:08
#知道行家专业创造价值,火热招募中!#
提问者采纳
先回答
问题3,这对函数的调用就是保证他们之间的变换不会作用于以外的任何绘制,比如绘制第一个立方体缩放时不调用glPushMatrix()和glPopMatrix();
你看看后面的绘制效果。实际上就是保存当前矩阵和恢复当前矩阵啊。。。要是我没解释清楚接着问吧
问题1,OpenGL是管道机制的,变换是按顺序作用于后面的绘制,所以
的搭配调用,实际上对上臂的变换是作用于前臂的。画前臂同样是先右移以保证绕左端旋转而不是中间,然后再右移一个单位把它接到上臂那个立方体右端。
下面贴出的代码按照glPushMatrix()和glPopMatrix()对缩进,看看是不是容易看清些
相关文章推荐
- Linux用户配置sudo权限(visudo)
- Linux__ssh服务开启_me
- jq大体架构。先记录再慢慢剖析
- shell入门-awk-1
- 在树莓派Ubuntu Mate中安装OpenCV
- Linux下MySQL数据库常用基本操作 一
- 决策树和opencv实现,随机森林,随机蕨
- javascript电商网站抢购倒计时效果实现
- laravel git上传问题 php升级 nginx修改
- centos安装apache的apr
- Tomcat中server.xml各个元素关系与配置
- linux简单磁盘操作
- J2EE开发 MVC 电子商务网站
- Linux 下java jdk安装
- linux shellScripts-1
- linux shellScripts-2
- linux shellScripts-3
- 在线实用工具网站
- 【原】Centos 6 搭建WordPress所需要的软件包
- 【转】搭建Apache时重启报错(小错误集合)