2016-06-10 37 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保持屏幕顛倒:-)