From 3216a190ce27c024ddf25cbd0bb725a1dba92c3e Mon Sep 17 00:00:00 2001 From: ChestnutYueyue <952134128@qq.com> Date: Sun, 15 Feb 2026 13:37:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=B8=B2=E6=9F=93):=20=E5=B0=86?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E6=8A=95=E5=BD=B1=E7=9F=A9=E9=98=B5=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=A7=BB=E8=87=B3Application=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构渲染流程,将视图投影矩阵的设置从Scene移动到Application层,通过CameraService统一管理。同时更新示例代码以适配此变更,确保视口配置正确应用。 --- Extra2D/src/app/application.cpp | 2 ++ Extra2D/src/scene/scene.cpp | 9 ++------- examples/basic/main.cpp | 11 +++++++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Extra2D/src/app/application.cpp b/Extra2D/src/app/application.cpp index 13e6a29..285d591 100644 --- a/Extra2D/src/app/application.cpp +++ b/Extra2D/src/app/application.cpp @@ -334,6 +334,8 @@ void Application::render() { renderer->setViewport( static_cast(vp.origin.x), static_cast(vp.origin.y), static_cast(vp.size.width), static_cast(vp.size.height)); + + renderer->setViewProjection(cameraService->getViewProjectionMatrix()); } else { renderer->setViewport(0, 0, window_->width(), window_->height()); } diff --git a/Extra2D/src/scene/scene.cpp b/Extra2D/src/scene/scene.cpp index c107ea0..05670c4 100644 --- a/Extra2D/src/scene/scene.cpp +++ b/Extra2D/src/scene/scene.cpp @@ -62,20 +62,15 @@ void Scene::renderScene(RenderBackend &renderer) { * @brief 渲染场景内容 * @param renderer 渲染后端引用 * - * 批量更新节点变换,设置活动相机的视图投影矩阵,开始精灵批处理并渲染 + * 批量更新节点变换,开始精灵批处理并渲染 + * 注意:视图投影矩阵由 Application 通过 CameraService 设置 */ void Scene::renderContent(RenderBackend &renderer) { if (!isVisible()) return; - // 在渲染前批量更新所有节点的世界变换 batchTransforms(); - Camera *activeCam = getActiveCamera(); - if (activeCam) { - renderer.setViewProjection(activeCam->getViewProjectionMatrix()); - } - renderer.beginSpriteBatch(); render(renderer); renderer.endSpriteBatch(); diff --git a/examples/basic/main.cpp b/examples/basic/main.cpp index 04b7240..e4f2112 100644 --- a/examples/basic/main.cpp +++ b/examples/basic/main.cpp @@ -144,6 +144,17 @@ int main(int argc, char *argv[]) { scene->setViewportSize(static_cast(app.window().width()), static_cast(app.window().height())); + auto cameraService = app.camera(); + if (cameraService) { + ViewportConfig vpConfig; + vpConfig.logicWidth = static_cast(app.window().width()); + vpConfig.logicHeight = static_cast(app.window().height()); + vpConfig.mode = ViewportMode::AspectRatio; + cameraService->setViewportConfig(vpConfig); + cameraService->updateViewport(app.window().width(), app.window().height()); + cameraService->applyViewportAdapter(); + } + createSceneGraph(scene.get()); app.enterScene(scene);