OpenGL中关于组合变换的理解

最近计算机图形学上的一头雾水,在看红宝书的时候看到一个机器人手臂的例子,感觉对理解局部坐标系很有帮助。记录一下学习过程。

 

首先我们知道在opengl中有各种坐标系。其中比较重要的是世界坐标系和对象坐标系。初始状态,世界坐标系和对象坐标系重合,而我们做出几何变换如缩放移动旋转等,对象坐标系就会发生变化,之后我们绘制的图形也会基于当前的坐标系。

 

void display7() {
	glClear(GL_COLOR_BUFFER_BIT);

	// 保存源坐标系
	glPushMatrix();

	// 这个移动实际上只是把手臂进行了偏移,没有别的作用
	//glTranslatef(-1, 0, 0);

	// 旋转,假设当前有一个长方体在原点,那么此时长方体绕着中心发生了旋转
	glRotatef((GLfloat)shoulder, 0, 0, 1);

	// 因为绕中心旋转是不合理的,我们需要移动坐标系,使得旋转发生在关节处
	glTranslatef(1, 0, 0);

	// 此时的矩阵是发生了旋转和移动到关节
	glPushMatrix();

	// 缩放
	glScalef(2, 0.4, 1);
	
	// 绘制手肘
	glutWireCube(1);

	// 恢复矩阵到旋转后的关节处状态
	glPopMatrix();

	// 再进行一次移动,使得当前局部坐标系原点位于手肘立方体的中心
	glTranslatef(1, 0, 0);

	// 旋转,与手臂相似
	glRotatef((GLfloat)elbow, 0, 0, 1);

	// 移动,使得手肘的旋转是绕关节发生的,与手臂相似
	glTranslatef(1, 0, 0);

	// 保存
	glPushMatrix(); 

	//与上述过程相似
	glScalef(2, 0.4, 1);
	glutWir
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值