2016-06-10 69 views
0

我想让我的游戏组件像HTML游戏一样。C++ SDL - 在窗口的特定区域内渲染

我的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

[你有什么试过?](http://mattgemmell.com/what-have-you-tried/)请至少显示最小努力解决这个问题。 – Drop

回答

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保持屏幕颠倒:-)