【问题标题】:c++ SDL - Render inside a window's particular areac++ SDL - 在窗口的特定区域内渲染
【发布时间】:2016-10-11 15:59:31
【问题描述】:

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

我的SDL_Window将有一个SDL_Rendererrendering他的所有组件。这些组件是一些按钮、图像和一个矩形区域类似于 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);
    }

【问题讨论】:

标签: c++ canvas sdl area renderer


【解决方案1】:

您可以像这样使用 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 使屏幕上下颠倒 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多