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);