opengl绘制一个机器人手臂的一些问题

转载 2015年11月19日 00:38:53
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是管道机制的,变换是按顺序作用于后面的绘制,所以

1
2
glutWireCube (1.0);
glScalef (2.0, 0.4, 1.0);//这个变换不会作用于他之前的坐标点


问题2,就上臂来说,缩放后的立方体X方向是两个单位长,如果你直接做旋转那个是绕着立方体X方向的中间转,所以先右移一个单位,再旋转就是绕着立方体左端旋转了,然后再挪回一个单位。。。由于glPushMatrix()和glPopMatrix(); 的搭配调用,实际上对上臂的变换是作用于前臂的。画前臂同样是先右移以保证绕左端旋转而不是中间,然后再右移一个单位把它接到上臂那个立方体右端。

下面贴出的代码按照glPushMatrix()和glPopMatrix()对缩进,看看是不是容易看清些

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   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();
           glScalef (2.0, 0.4, 1.0);
           glutWireCube (1.0);
       glPopMatrix();
 
       glTranslatef (1.0, 0.0, 0.0);
       glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
       glTranslatef (1.0, 0.0, 0.0);
       glPushMatrix();
           glScalef (2.0, 0.4, 1.0);
           glutWireCube (1.0);
       glPopMatrix();
 
   glPopMatrix();
   glutSwapBuffers();

《高效学习OpenGL》 之 创建机器人手臂源码讲解

#include #include static int shoulder = 0, elbow = 0; void init(void) { glClearColor (0.0, 0...

OpenGL编程指南11:组合运动示例2—创建机器人手臂模型

1.源代码: #include static int shoulder = 0, elbow = 0; void init(void) { glClearColor(0.0,0.0,...

使用OpenGL画机械手

还记得当时上过《机器人技术基础》的课,整个课程老师反复不断地强调着关节,臂,以及相应的矩阵。矩阵,矩阵,……,实在听不下去了,就开小差了。没想到今天确可以画出这样机械臂来(未实现手指的动作)。   ...
  • Binzo
  • Binzo
  • 2014年05月28日 10:54
  • 1712

计算机图形学——OpenGL学习系列会动的机器人

计算机图形学——OpenGl学习系列会动的机器人 应课程要求做了一个简单的机器人,嘻嘻感觉还是萌萌哒,完全新手还有好多地方不足,以后改吧后面设置全屏什么的是借鉴的别人的 至今还没看明白所以没有注释#d...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

用OpenGL绘制旋转的机器人手臂

代码如下: #include #include #include using namespace std; const GLfloat PI=3.14; static int shoulder...

用OpenGL绘制旋转的机器人手臂

代码如下: #include #include #include using namespace std; const GLfloat PI=3.14; static int shoulder...

机器人系统常用仿真软件介绍和效果

机器人常用仿真软件介绍
  • x_r_su
  • x_r_su
  • 2016年10月03日 07:33
  • 4614

这是一个实现在光照下的机器人手臂的动作交互程序

 这段代码关键在于实现机器人手指时,怎么让各个手指独立运动而不相互影响。 通常情况下,当手指1在手指2前先绘制时,这两个手指之间会相互关联,当你旋转手指1时,手指2可能也会跟着旋转, 为了消...

python实现nao机器人手臂动作控制

这些天依然在看nao公司文档的东西,把读过的代码顺手敲了出来。代码依然很简单,但是为什么我要写博客呢?这其中有很大的原因在于,代码是死的,可是读着读着就感觉代码活了,而且,每次读都会有不同的感受。咱就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opengl绘制一个机器人手臂的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)