Skip to content

Latest commit

 

History

History
316 lines (226 loc) · 6.59 KB

File metadata and controls

316 lines (226 loc) · 6.59 KB

📐 Rectangle Component - 矩形组件

状态:✅ 已完成
难度:⭐
代码行数:~165 行


📋 组件概述

Rectangle 是一个矩形渲染组件,展示了如何使用矩形绘制 API 创建各种视觉效果和动画。

核心功能

  • 多矩形渲染:展示多个不同大小和颜色的矩形
  • 脉冲动画:中心矩形的缩放和颜色变化
  • 圆周运动:四个角矩形的旋转轨迹
  • 网格背景:使用矩形绘制的参考网格
  • 暂停/重置:动画控制功能

🎨 视觉效果

布局说明

┌─────────────────────────────┐
│  🟥 (旋转)        🟩 (旋转)  │
│                             │
│         🟦 (脉冲)           │
│         中心矩形             │
│                             │
│  🟨 (旋转)        🟪 (旋转)  │
└─────────────────────────────┘
     网格背景 (50x50)

矩形列表

矩形 颜色 位置 动画
中心矩形 蓝色 中心 (200x200) 脉冲缩放 + 颜色变化
左上角 红色 左上 (40x40) 圆周运动
右上角 绿色 右上 (40x40) 圆周运动
左下角 黄色 左下 (40x40) 圆周运动
右下角 紫色 右下 (40x40) 圆周运动

🎬 动画效果

1. 脉冲动画(中心矩形)

float scale = 1.0f + 0.1f * std::sin(time * 2.0f);
  • 使用正弦函数实现周期性缩放
  • 缩放范围:0.9x ~ 1.1x
  • 频率:2 Hz

2. 颜色变化

float colorPulse = 0.5f + 0.5f * std::sin(time * 3.0f);
  • 红色和绿色通道随时间变化
  • 蓝色通道保持不变
  • 频率:3 Hz

3. 圆周运动(角矩形)

float offsetX = radius * std::cos(angle);
float offsetY = radius * std::sin(angle);
  • 4个小矩形围绕各自中心旋转
  • 旋转半径:30 像素
  • 每个矩形速度不同

🖱️ 交互控制

键盘控制

  • Space - 暂停/继续动画
  • R - 重置动画(时间归零)
  • ESC - 退出程序

状态显示

  • 暂停时屏幕右上角显示 "PAUSED"(橙色)
  • 左上角显示控制说明

🎓 技术要点

1. 矩形绘制 API

renderer->drawRectangle(x, y, width, height, color);
  • x, y - 左上角坐标(视图坐标系)
  • width, height - 矩形尺寸
  • color - RGBA 颜色数组 float[4]

2. 动画数学

正弦波动画

value = base + amplitude * std::sin(time * frequency);
  • base - 基础值
  • amplitude - 振幅
  • frequency - 频率

圆周运动

x = centerX + radius * std::cos(angle);
y = centerY + radius * std::sin(angle);

3. 时间管理

if (!isPaused) {
    time += deltaTime;
}
  • 使用累积时间驱动动画
  • 支持暂停功能
  • deltaTime 确保帧率独立

4. 网格绘制

// 使用细矩形绘制网格线
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     # 组件动态库

🚀 构建与运行

1. 编译着色器

cd examples/cpp/rectangle/assets/shaders
compile_shaders.bat

2. 构建组件

cd examples/cpp/rectangle
mkdir build
cd build
cmake ..
cmake --build . --config Release

3. 复制 DLL

copy Release\rectangle.dll ..\..\..\native\build\Release\

4. 运行组件

cd ..\..\..\native
.\build\Release\bitui_native.exe .\build\Release\rectangle.dll

💡 学习要点

初学者

  1. 矩形 API 使用

    • 如何调用 drawRectangle
    • 理解坐标系统(原点在屏幕中心)
    • 颜色数组格式(RGBA)
  2. 基础动画

    • 使用正弦函数创建周期运动
    • 时间累积和 deltaTime
    • 暂停/继续控制
  3. 多对象管理

    • 使用结构体数组管理多个矩形
    • 循环绘制相似对象
    • 不同对象的独立动画

进阶开发者

  1. 动画设计

    • 组合多种数学函数
    • 相位偏移创建变化
    • 动画同步和编排
  2. 性能优化

    • 批量绘制相似对象
    • 避免重复计算
    • 使用局部变量缓存结果
  3. 视觉设计

    • 颜色搭配
    • 运动轨迹设计
    • 视觉层次

🔍 与 Triangle 的区别

特性 Triangle Rectangle
几何 3 个顶点 4 个顶点(内部优化)
API drawTriangle drawRectangle
用途 图形学基础 UI 元素基础
复杂度 需要手动变换 API 已处理

🐛 常见问题

Q1: 矩形位置不正确?

A: 检查坐标系统,组件坐标原点在屏幕中心,向右为 +X,向下为 +Y。

Q2: 动画速度不一致?

A: 确保使用 deltaTime 计算增量,而不是固定值。

Q3: 颜色数组错误?

A: 必须使用 float[4](RGBA),不能用 float[3]

Q4: 网格对齐问题?

A: 使用整数倍的网格大小,确保对齐到像素。


📊 性能数据

实际运行测试:

  • 平均帧率:~240 FPS
  • 绘制调用:14 次/帧(5矩形 + 9网格线)
  • 内存占用:< 1MB
  • CPU 使用:< 2%

🔗 相关组件

  • Triangle - 三角形组件(几何基础)
  • Button - 按钮组件(矩形应用)
  • ProgressBar - 进度条组件(矩形应用)

📝 扩展建议

可以基于此组件实现:

  1. 矩形碰撞检测
  2. 可拖动矩形
  3. 矩形变形动画
  4. 填充图案
  5. 阴影效果

📝 更新日志

  • 2025-10-12:✅ 组件完成
    • 实现多矩形渲染
    • 添加脉冲和圆周动画
    • 创建网格背景
    • 添加动画控制

作者:Bit Project 团队
最后更新:2025-10-12
版本:v1.0.0