状态:✅ 已完成
难度:⭐
代码行数:~165 行
Rectangle 是一个矩形渲染组件,展示了如何使用矩形绘制 API 创建各种视觉效果和动画。
- ✅ 多矩形渲染:展示多个不同大小和颜色的矩形
- ✅ 脉冲动画:中心矩形的缩放和颜色变化
- ✅ 圆周运动:四个角矩形的旋转轨迹
- ✅ 网格背景:使用矩形绘制的参考网格
- ✅ 暂停/重置:动画控制功能
┌─────────────────────────────┐
│ 🟥 (旋转) 🟩 (旋转) │
│ │
│ 🟦 (脉冲) │
│ 中心矩形 │
│ │
│ 🟨 (旋转) 🟪 (旋转) │
└─────────────────────────────┘
网格背景 (50x50)
| 矩形 | 颜色 | 位置 | 动画 |
|---|---|---|---|
| 中心矩形 | 蓝色 | 中心 (200x200) | 脉冲缩放 + 颜色变化 |
| 左上角 | 红色 | 左上 (40x40) | 圆周运动 |
| 右上角 | 绿色 | 右上 (40x40) | 圆周运动 |
| 左下角 | 黄色 | 左下 (40x40) | 圆周运动 |
| 右下角 | 紫色 | 右下 (40x40) | 圆周运动 |
float scale = 1.0f + 0.1f * std::sin(time * 2.0f);- 使用正弦函数实现周期性缩放
- 缩放范围:0.9x ~ 1.1x
- 频率:2 Hz
float colorPulse = 0.5f + 0.5f * std::sin(time * 3.0f);- 红色和绿色通道随时间变化
- 蓝色通道保持不变
- 频率:3 Hz
float offsetX = radius * std::cos(angle);
float offsetY = radius * std::sin(angle);- 4个小矩形围绕各自中心旋转
- 旋转半径:30 像素
- 每个矩形速度不同
- Space - 暂停/继续动画
- R - 重置动画(时间归零)
- ESC - 退出程序
- 暂停时屏幕右上角显示 "PAUSED"(橙色)
- 左上角显示控制说明
renderer->drawRectangle(x, y, width, height, color);x, y- 左上角坐标(视图坐标系)width, height- 矩形尺寸color- RGBA 颜色数组float[4]
正弦波动画:
value = base + amplitude * std::sin(time * frequency);base- 基础值amplitude- 振幅frequency- 频率
圆周运动:
x = centerX + radius * std::cos(angle);
y = centerY + radius * std::sin(angle);if (!isPaused) {
time += deltaTime;
}- 使用累积时间驱动动画
- 支持暂停功能
deltaTime确保帧率独立
// 使用细矩形绘制网格线
for (int i = -4; i <= 4; i++) {
renderer->drawRectangle(x, y, thickness, length, color);
}rectangle/
├── README.md # 本文档
├── rectangle.cpp # 组件实现(165 行)
├── CMakeLists.txt # 构建配置
├── assets/ # 资源文件
│ └── shaders/ # 着色器
│ ├── triangle.vert # 顶点着色器
│ ├── triangle.frag # 片段着色器
│ ├── compile_shaders.bat
│ └── spv/ # 编译产物
│ ├── triangle_vert.spv
│ └── triangle_frag.spv
└── build/ # 构建目录
└── Release/
└── rectangle.dll # 组件动态库
cd examples/cpp/rectangle/assets/shaders
compile_shaders.batcd examples/cpp/rectangle
mkdir build
cd build
cmake ..
cmake --build . --config Releasecopy Release\rectangle.dll ..\..\..\native\build\Release\cd ..\..\..\native
.\build\Release\bitui_native.exe .\build\Release\rectangle.dll-
矩形 API 使用
- 如何调用
drawRectangle - 理解坐标系统(原点在屏幕中心)
- 颜色数组格式(RGBA)
- 如何调用
-
基础动画
- 使用正弦函数创建周期运动
- 时间累积和 deltaTime
- 暂停/继续控制
-
多对象管理
- 使用结构体数组管理多个矩形
- 循环绘制相似对象
- 不同对象的独立动画
-
动画设计
- 组合多种数学函数
- 相位偏移创建变化
- 动画同步和编排
-
性能优化
- 批量绘制相似对象
- 避免重复计算
- 使用局部变量缓存结果
-
视觉设计
- 颜色搭配
- 运动轨迹设计
- 视觉层次
| 特性 | Triangle | Rectangle |
|---|---|---|
| 几何 | 3 个顶点 | 4 个顶点(内部优化) |
| API | drawTriangle |
drawRectangle |
| 用途 | 图形学基础 | UI 元素基础 |
| 复杂度 | 需要手动变换 | API 已处理 |
A: 检查坐标系统,组件坐标原点在屏幕中心,向右为 +X,向下为 +Y。
A: 确保使用 deltaTime 计算增量,而不是固定值。
A: 必须使用 float[4](RGBA),不能用 float[3]。
A: 使用整数倍的网格大小,确保对齐到像素。
实际运行测试:
- 平均帧率:~240 FPS
- 绘制调用:14 次/帧(5矩形 + 9网格线)
- 内存占用:< 1MB
- CPU 使用:< 2%
- Triangle - 三角形组件(几何基础)
- Button - 按钮组件(矩形应用)
- ProgressBar - 进度条组件(矩形应用)
可以基于此组件实现:
- 矩形碰撞检测
- 可拖动矩形
- 矩形变形动画
- 填充图案
- 阴影效果
- 2025-10-12:✅ 组件完成
- 实现多矩形渲染
- 添加脉冲和圆周动画
- 创建网格背景
- 添加动画控制
作者:Bit Project 团队
最后更新:2025-10-12
版本:v1.0.0