c ++ SDL - 在窗口的特定区域内渲染

时间:2016-06-10 15:50:42

标签: c++ canvas sdl area renderer

我希望将我的游戏组件与HTML游戏对齐。

我的SDL_WindowSDL_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);
    }

1 个答案:

答案 0 :(得分:0)

您可以使用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保持屏幕颠倒: - )