canvas — c ++ SDL — Рендеринг внутри определенной области окна

Я хочу выровнять свои игровые компоненты, как HTML-игру.

мой SDL_Windowбудет иметь SDL_Rendererрендеринг всех его компонентов. Этими компонентами являются некоторые кнопки, изображения и прямоугольник как холст HTML.

Я хочу, чтобы моя игра отображалась внутри этого холста, потому что я буду реализовывать «мир» и «камеру», которые будут влиять только на этот «холст», в то время как графический интерфейс вокруг «холста» будет отображаться независимо от камеры.

Как сделать рендер рендерингом определенной области внутри окна?

Я не могу сделать это с математикой, потому что я хочу, чтобы каждая текстура визуализировалась внутри холста, но слишком далеко от точки зрения, чтобы быть скрытой.

Часть кода:

    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);
}

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 держит экран вверх дном 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector