[英]OpenGL C++ Minimap of current setting
我正在尋找一種從當前3D場景的頂部創建第二個視圖的方法。 我想做到這一點盡可能容易。 基本思想是您有一個子窗口,它將顯示該設置的俯視圖。
我已經研究過openGL中的子窗口,但是問題是您必須重新繪制所有內容(基本上以2個場景的角度不同而結束=不好)。 另外,因為這將在稱為“塔箱堆疊”的3D游戲中使用(您必須將箱子彼此疊放並建造一個高塔),所以無法使用子窗口的方式進行操作(因為您將獲得2個場景具有不同的塊/位置/動作/ ...)
因此,如何在當前場景中添加“第二台攝像機”,然后將其放置在頂部。
我已經研究過openGL中的子窗口,但是問題是您必須重新繪制所有內容(基本上以不同角度的2個場景結束=不好)
實際上,這是使用OpenGL的唯一方法。
因此,如何在當前場景中添加“第二台攝像機”,然后將其放置在頂部。
OpenGL沒有相機。 它甚至沒有場景。 OpenGL僅繪制非常簡單的形狀:點,線和三角形。 除此之外,OpenGL還不了解幾何或復雜場景。
場景管理由您決定,繪制場景的多個視圖由您決定。
draw_scene:
for o in objects:
glPushMatrix()
glMultMatrix(o.transform)
o.draw()
glPopMatrix()
render_main_view:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glFrustum(...)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glMultMatrix(main_camera_transform)
render_secondary_view:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glFrustum(...)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glMultMatrix(secondary_camera_transform)
scissor_viewport(x,y,w,h)
glScissor(x,y,w,h)
glViewport(x,y,w,h)
render:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_SCISSOR_TEST)
scissor_viewport(main_viewport.x,main_viewport.y,main_viewport.w,main_viewport.h)
render_main_view()
glClear(GL_DEPTH_BUFFER_BIT)
scissor_viewport(secondary_viewport.x,secondary_viewport.y,secondary_viewport.w,secondary_viewport.h)
render_secondary_view()
使用默認設置繪制場景一次。
然后應用不同的視圖變換(對應於您的第二個“相機”),使用glViewport
選擇屏幕的子矩形並再次繪制場景。 (不要忘了重置glViewport
再覆蓋整個屏幕)
如果您希望小地圖的寬高比(w / h)不同,則在第二遍過程中,您還需要更改透視圖轉換,以便一切正常。
免責聲明:我還沒有嘗試過,但這確實是一個建議。
因此,您說您的游戲是關於堆疊盒子的,並且您需要俯視圖。 為什么不“假裝”俯視圖? 基本上,您創建一個將游戲小地圖表示為正交視圖的紋理。 僅當堆疊新塊時,才需要更新紋理。 要在當前位置查看它,則必須設置“子窗口”或視口的適當紋理坐標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.