平移变换计算机图形学c语言代码,计算机图形学第一次作业——平移,缩放和旋转...

本文详细介绍了在MFC框架下使用OpenGL进行图形操作,包括平移、旋转和缩放的具体实现。通过转换矩阵,对三维坐标进行变换,涉及glTranslate、glScale和glRotate函数的使用。程序结构中,MFC生成界面,OpenGL绘制图形,并通过对话框接收用户输入的参数进行相应变换。同时,文章提到了OpenGL在MFC中的初始化、像素格式设置以及处理窗口大小变化的代码片段。
摘要由CSDN通过智能技术生成

一、

MFC

框架下使用

OpenGL

绘图演示平移、旋转、缩放等操作的具体实现

二、

实现算法

绘制的图形以各种顶点及顶点之间的线、面构成

要想对这些图形进行操作,只需要对各种顶点在坐标系中的坐标进行转换即可

顶点在

OpenGL

中的坐标以四维形式表示:(

X,Y,Z,W

)

其中

X,Y,Z

对应三维系统中

X

Y

Z

三个柚;

W

默认为

1

,一般为了方便各种操作时坐标换算而将三维坐标系提升为四次,即齐次坐标系。

平移操作——对应

glTranslate

函数:

初始点:(

X,Y,Z,W

)

使用转换矩阵

TMatrix

1, 0, 0, Tx

0, 1, 0, Ty

0, 0, 1, Tz

0, 0, 0, 1

(X’, Y’, Z’) =

TMatrix * (X, Y, Z),

其中

Tx

Ty

Tz

对应

glTranslate

函数中的三个参数,分别表示三个方向的的平移量;原始坐标右乘平移矩阵后即得到新的坐标

缩放操作——对应

glScale

函数:

使用转换矩阵为

SMatrix

Sx, 0, 0, 0

0, Sy, 0, 0

0, 0, Sz, 0

0, 0, 0, 1

(X’, Y’, Z’) =

SMatrix * (X, Y, Z)

此次自己实现的缩放函数与

OpenGL

有所不同,我实现的是与图形的中心点为基准进行缩放,所以进行矩阵变换前需要计算各个坐标的位置并求几何中心。

旋转操作——对应

glRotate

函数(逆时针方向):

在三维坐标系统中,旋转操作与二维情况有所不同,因为三维中的一个点可以绕不同的方向进行旋转,所以除了要指定旋转角度外,还要指定旋转轴

当所取旋转轴为

X

Y

Z

三个坐标轴时,与二维情况相似

即所选取的轴那一方向上的坐标不变,在其它两个轴所成的平面上进行二维旋转变换

根据这个规律可以把三维中绕任意轴旋转的操作分为几个操作来完成

步骤:

先将待旋转的坐标与旋转轴平移,使旋转轴经过原点

进行若干次旋转操作,例旋转轴与

Z

轴正向重合

依据对坐标轴旋转的方法将待旋转坐标进行旋转操作

应用逆旋转使旋转轴回到原方向

应用逆平移使旋转轴回到原位置

二维情况下旋转矩阵为:

cosQ, -sinQ, 0

sinQ, cosQ, 0

0, 0, 1

此次采用先绕

X

转做旋转

Rx

,再绕

Y

转旋转

Ry

使旋转轴与

Z

转正向重合,再绕

Z

轴做

Rz

旋转

Q

度,再进行逆操作还原位置

: (X’, Y’, Z’) = Rx*Ry*Rz(Q)*(Ry

-1

)*(Rx-1)

其中

Q

是需要旋转的角度,

逆矩阵</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值