refactor(渲染): 将视图投影矩阵设置移至Application层
重构渲染流程,将视图投影矩阵的设置从Scene移动到Application层,通过CameraService统一管理。同时更新示例代码以适配此变更,确保视口配置正确应用。
This commit is contained in:
parent
6c6cac55f7
commit
3216a190ce
|
|
@ -334,6 +334,8 @@ void Application::render() {
|
||||||
renderer->setViewport(
|
renderer->setViewport(
|
||||||
static_cast<int>(vp.origin.x), static_cast<int>(vp.origin.y),
|
static_cast<int>(vp.origin.x), static_cast<int>(vp.origin.y),
|
||||||
static_cast<int>(vp.size.width), static_cast<int>(vp.size.height));
|
static_cast<int>(vp.size.width), static_cast<int>(vp.size.height));
|
||||||
|
|
||||||
|
renderer->setViewProjection(cameraService->getViewProjectionMatrix());
|
||||||
} else {
|
} else {
|
||||||
renderer->setViewport(0, 0, window_->width(), window_->height());
|
renderer->setViewport(0, 0, window_->width(), window_->height());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,20 +62,15 @@ void Scene::renderScene(RenderBackend &renderer) {
|
||||||
* @brief 渲染场景内容
|
* @brief 渲染场景内容
|
||||||
* @param renderer 渲染后端引用
|
* @param renderer 渲染后端引用
|
||||||
*
|
*
|
||||||
* 批量更新节点变换,设置活动相机的视图投影矩阵,开始精灵批处理并渲染
|
* 批量更新节点变换,开始精灵批处理并渲染
|
||||||
|
* 注意:视图投影矩阵由 Application 通过 CameraService 设置
|
||||||
*/
|
*/
|
||||||
void Scene::renderContent(RenderBackend &renderer) {
|
void Scene::renderContent(RenderBackend &renderer) {
|
||||||
if (!isVisible())
|
if (!isVisible())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 在渲染前批量更新所有节点的世界变换
|
|
||||||
batchTransforms();
|
batchTransforms();
|
||||||
|
|
||||||
Camera *activeCam = getActiveCamera();
|
|
||||||
if (activeCam) {
|
|
||||||
renderer.setViewProjection(activeCam->getViewProjectionMatrix());
|
|
||||||
}
|
|
||||||
|
|
||||||
renderer.beginSpriteBatch();
|
renderer.beginSpriteBatch();
|
||||||
render(renderer);
|
render(renderer);
|
||||||
renderer.endSpriteBatch();
|
renderer.endSpriteBatch();
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,17 @@ int main(int argc, char *argv[]) {
|
||||||
scene->setViewportSize(static_cast<float>(app.window().width()),
|
scene->setViewportSize(static_cast<float>(app.window().width()),
|
||||||
static_cast<float>(app.window().height()));
|
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());
|
createSceneGraph(scene.get());
|
||||||
|
|
||||||
app.enterScene(scene);
|
app.enterScene(scene);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue