refactor(渲染): 将视图投影矩阵设置移至Application层

重构渲染流程,将视图投影矩阵的设置从Scene移动到Application层,通过CameraService统一管理。同时更新示例代码以适配此变更,确保视口配置正确应用。
This commit is contained in:
ChestnutYueyue 2026-02-15 13:37:08 +08:00
parent 6c6cac55f7
commit 3216a190ce
3 changed files with 15 additions and 7 deletions

View File

@ -334,6 +334,8 @@ void Application::render() {
renderer->setViewport(
static_cast<int>(vp.origin.x), static_cast<int>(vp.origin.y),
static_cast<int>(vp.size.width), static_cast<int>(vp.size.height));
renderer->setViewProjection(cameraService->getViewProjectionMatrix());
} else {
renderer->setViewport(0, 0, window_->width(), window_->height());
}

View File

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

View File

@ -144,6 +144,17 @@ int main(int argc, char *argv[]) {
scene->setViewportSize(static_cast<float>(app.window().width()),
static_cast<float>(app.window().height()));
auto cameraService = app.camera();
if (cameraService) {
ViewportConfig vpConfig;
vpConfig.logicWidth = static_cast<float>(app.window().width());
vpConfig.logicHeight = static_cast<float>(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);