Я хочу выровнять свои игровые компоненты, как 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);
}
Вы можете сделать это с помощью вызова 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 держит экран вверх дном 🙂
Других решений пока нет …