计算机图形学实验五二维几何变换
时间: 2025-06-19 08:08:46 浏览: 12
### 关于计算机图形学中的二维几何变换
在计算机图形学领域,二维几何变换是一个重要的概念,涉及平移、旋转和缩放等基本操作。这些操作可以通过OpenGL库实现,并广泛应用于图形渲染和交互场景中。
#### 1. **二维几何变换的基础**
二维几何变换主要包括三种基本形式:平移、旋转和缩放。每种变换都可以通过矩阵乘法表示[^1]。
- 平移:将对象沿某一方向移动一定距离。其对应的变换矩阵为:
```plaintext
| 1 0 tx |
| 0 1 ty |
| 0 0 1 |
```
其中 `tx` 和 `ty` 表示在 X 轴和 Y 轴上的位移量。
- 缩放:调整对象的大小。其对应的变换矩阵为:
```plaintext
| sx 0 0 |
| 0 sy 0 |
| 0 0 1 |
```
其中 `sx` 和 `sy` 是分别对应 X 轴和 Y 轴的比例因子。
- 旋转:围绕某一点旋转对象。假设绕原点逆时针旋转角度 θ,则变换矩阵为:
```plaintext
| cosθ -sinθ 0 |
| sinθ cosθ 0 |
| 0 0 1 |
```
#### 2. **OpenGL 中的二维几何变换方法**
在 OpenGL 中,可以利用一系列函数完成二维几何变换的操作。以下是具体说明:
- 设置当前矩阵模式为模型视图矩阵:
```c++
glMatrixMode(GL_MODELVIEW);
```
此命令用于指定后续矩阵操作的目标矩阵为 GL_MODELVIEW[^2]。
- 应用平移变换:
```c++
glTranslatef(tx, ty, tz);
```
参数 `tx`, `ty`, `tz` 定义了在三个坐标轴上的偏移量。
- 应用旋转变换:
```c++
glRotatef(angle, vx, vy, vz);
```
参数 `angle` 表示旋转的角度(单位为度),而 `vx`, `vy`, `vz` 定义了旋转轴的方向向量。
- 应用缩放变换:
```c++
glScalef(sx, sy, sz);
```
参数 `sx`, `sy`, `sz` 分别定义了在三个坐标轴上的比例因子。
#### 3. **示例代码展示**
下面提供一段简单的 C++/OpenGL 程序,演示如何应用二维几何变换绘制一个矩形并对其进行平移、旋转和缩放处理。
```cpp
#include <GL/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 开始绘图前重置模型视图矩阵
glLoadIdentity();
// 平移操作
glTranslatef(0.5f, 0.5f, 0.0f);
// 缩放操作
glScalef(1.5f, 0.8f, 1.0f);
// 旋转操作
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(-0.5f, -0.5f); // 左下角
glColor3f(0.0f, 1.0f, 0.0f); glVertex2f( 0.5f, -0.5f); // 右下角
glColor3f(0.0f, 0.0f, 1.0f); glVertex2f( 0.5f, 0.5f); // 右上角
glColor3f(1.0f, 1.0f, 0.0f); glVertex2f(-0.5f, 0.5f); // 左上角
glEnd();
glutSwapBuffers();
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutCreateWindow("2D Transformations Example");
glEnable(GL_DEPTH_TEST);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
此代码片段展示了如何创建一个窗口并在其中绘制经过多种变换后的矩形形状。
---
###
阅读全文
相关推荐
















