c++ SDL - 在窗口的特定区域内呈现

c++ SDL - Render inside a window's particular area

本文关键字:区域 SDL 窗口 c++      更新时间:2023-10-16

我想像HTML游戏一样对齐我的游戏组件。

我的SDL_Window将有一个SDL_Renderer来渲染他的所有组件。这些组件是一些按钮、图像和矩形区域,如 html 画布

我希望我的游戏在此画布内渲染,因为我将实现一个"世界"和一个"摄像机",它们

只会影响这个"画布",而"画布"周围的GUI将独立于摄像机进行渲染。

如何让渲染器渲染窗口内的特定区域?

我不能用数学来做到这一点,因为我希望隐藏画布内渲染的每个纹理,但离视角太远。

部分代码:

    SDL_Window* gWindow = SDL_CreateWindow("Title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);
    SDL_Renderer* gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
    while (true) {
        SDL_RenderClear(gRenderer);
        render_gui(); // i can do this part
        render_game_inside_canvas(); // ?
        SDL_RenderPresent(gRenderer);
    }
你可以

像这样用glViewport()调用来做到这一点:

Point2d pos = get_pos();
Vector2d sz = get_size();
glViewport(pos.x, screen_height-pos.y-sz.dy, sz.dx, sz.dy);
obj.render();
glViewport(0,0,screen_width, screen_height);

它有点需要你知道整个屏幕的尺寸是多少......(奇怪的计算是必需的,因为glViewport使屏幕颠倒:-)