- 添加实例化渲染支持,包括InstanceBuffer、InstanceBufferManager和相关着色器 - 重构渲染命令队列以支持实例化绘制 - 优化材质系统,使用vector保持参数顺序并添加快速查找 - 改进顶点布局系统,支持实例属性 - 添加全局UBO管理,优化uniform数据传递 - 实现新的实例化测试场景节点 - 更新着色器以支持实例化渲染和UBO - 改进GL命令列表,支持实例属性绑定 - 添加AssetsModule对实例化资源的支持 - 修复Director在没有主相机时的警告日志 |
||
|---|---|---|
| .. | ||
| README.md | ||
| game_scene.cpp | ||
| game_scene.h | ||
| instanced_test.cpp | ||
| instanced_test.h | ||
| main.cpp | ||
| xmake.lua | ||
README.md
场景图系统示例 (Scene Graph Demo)
这个示例演示了 Extra2D 引擎场景图模块的核心功能。
功能演示
1. Director 场景管理
- 通过
SceneModule获取Director - 使用
runScene()启动场景
2. Scene 场景容器
- 继承
Scene类创建自定义场景 - 实现
onEnter()和onExit()生命周期方法 - 在
update()中处理场景级逻辑
3. Node 节点层级
- 创建自定义节点类(
PlayerNode,RotatingDecoration) - 使用
addChild()构建节点树 - 节点变换自动继承父节点
4. Component 组件系统
TransformComponent: 位置、旋转、缩放、锚点SpriteRenderer: 2D 精灵渲染CameraComponent: 相机投影和视图
5. Transform 变换(含锚点)
- 归一化锚点设置
[0,1] - 锚点影响旋转中心和位置参考点
- 世界变换自动计算
运行效果
- 蓝色方块(玩家)沿圆周运动
- 8个彩色小方块围绕中心旋转
- 每个小方块还有自转动画
构建和运行
# 配置(启用示例)
xmake f -p mingw --examples=true
# 构建
xmake
# 运行
./build/examples/scene_graph_demo/scene_graph_demo.exe
代码结构
scene_graph_demo/
├── main.cpp # 程序入口
├── game_scene.h # 场景和节点类定义
├── game_scene.cpp # 场景和节点实现
└── xmake.lua # 构建配置
关键 API
创建场景
class GameScene : public Scene {
public:
void onEnter() override;
void update(float dt) override;
};
auto scene = makePtr<GameScene>();
director->runScene(scene);
创建节点
auto node = makePtr<Node>();
node->setPosition(100, 200);
node->setAnchor(0.5f, 0.5f); // 中心锚点
node->setSize(64, 64);
scene->addChild(node);
添加组件
auto sprite = makePtr<SpriteRenderer>();
sprite->setColor(Color::Red);
node->addComponent(sprite);
设置相机
auto camera = makePtr<CameraComponent>();
camera->setOrtho(0, 1280, 0, 720, -1, 1);
cameraNode->addComponent(camera);
scene->setMainCamera(camera);