OpenGL机器手绘制

本例是一个讨论一个创建带关节的机器人手臂的程序。这个手臂在肩、肘或其他关节处应该用节点进行连接。


首先必须调用适当的模型变换函数,机器人手臂采用局部坐标系较为方便,把手臂的每一段放在合适的位置,由于局部坐标系统的原点最初在立方体的中心,因此需要把局部坐标系移到立方体的其中一条边上。否则立方体将沿着它的中心旋转而不是沿着边节点旋转。

(1)在下面的代码中,display()中用到了glPushMatrix()和glPopMatrix(),事实上glPushMatrix()可以理解为建立一个局部坐标系,glPopMatrix()恢复全局坐标系,它们可以嵌套使用。这两个函数会很频繁的用到。他们是保存当前矩阵和恢复矩阵

(2)先绘制上臂,当上臂绘制完成后实际上已经把局部坐标系的x轴旋转到了与上臂长边相平行的直线上了,所以可以直接把上臂的末端作为节点绘制前臂。与绘制上臂相似的方法绘制前臂。

(3)对上臂进行缩放时,是先写变换再写绘制,这是因为OpenGL是管道制的,变换是按顺序作用于后面的绘制。

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1,1,1);

	glPushMatrix();//把当前的变换矩阵压入OpenGL内部栈中,用以保存当前矩阵
	//画机器人的上臂
		glTranslatef(-1,0,0);//用平移矩阵乘当前矩阵,格式为:glTranslatef(x,y,z)
		glRotatef((GLfloat)shoulder,0,0,1);//用旋转矩阵乘当前矩阵,格式为glRotatef (角度,x轴,y轴,z轴),这里是绕Z轴旋转
		glTranslatef(1,0,0);//再用平移矩阵乘当前矩阵,注意顺序
		glPushMatrix();//变换矩阵压栈
			glScalef(2,0.4,1);//用缩放矩阵乘以当前矩阵,格式为glScalef(x缩放比例,y缩放比例,z缩放比例)
			glutWireCube(1.0);//glut库函数,画一个三维的Cube,参数为边长
		glPopMatrix();//弹栈,现在矩阵恢复到使用缩放前的样子

	//画机器人的前臂,请注意平移矩阵和旋转矩阵的变化
		glTranslatef(1,0,0);//转移到下一个节点
		glRotatef((GLfloat)elbow,0,0,1);//可以绕这个节点直接旋转
		glTranslatef(1,0,0);//前臂的中心
		glPushMatrix();
			glScalef(2,0.4,1.0);
			glutWireCube(1.0);
		glPopMatrix();
	glPopMatrix();
	glutSwapBuffers();
}

 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值