2009-06-01 30 views
1

我在瓷磚地圖編輯器中使用了opengl。以GL_LUMINANCE32F格式存儲地圖,然後用opengl命令修改它。opengl中'無限'畫布

現在,我意識到畫布的大小限制是人們繪製瓷磚地圖的負擔。那麼我怎麼能實現一個無限的畫布呢? (這樣可以擴大和縮小,而不需要用戶明確地觸發它擴大或縮小)

需要的畫布的擴大或縮小並不困難,我可以輕鬆地創建另一個畫布,將舊的畫布內容移動並刪除舊的畫布。相反,我不知道的是,我怎樣才能讓畫布檢測到它什麼時候可以縮小,以及它能縮小多少?

所以我應該檢測在畫布邊緣有多少行和零列。

回答

2

從瓦片製作無限的畫布。

+0

好的,我該如何檢測空白的瓷磚呢? – Cheery 2009-06-01 09:16:10

+0

假設您在256x256的瓷磚中有1024x768的圖像。這是一個4x3的瓷磚。他們在y維上將圖像展開100個像素。你現在已經在4x4的瓷磚中獲得了1024x868的圖像。您可以跟蹤部分顯示的圖塊(允許用戶在分配更多圖塊之前再擴展156個像素)。用戶只能看到他們已經擴展到的內容。 – 2009-06-01 09:26:23

0

縮小畫布像你建議的將不會對藝術家有所幫助。他們經常擴大他們正在工作的區域,只是爲了讓這個區域合作。還有一些spritesheets在需要在目標程序中工作的模型周圍有空白區域。

我的建議是根據需要增長,但允許藝術家在他們想要的時候手動調整尺寸。

+0

它也與tileset繪圖有關,但現在集中在tilemaps上。我在想,否則,藝術家們也在去除東西,特別是在他們進行實驗時。考慮讓用戶手動下拉他們不想要的紋理部分,或者只在用戶保存圖層時給予巨大的紋理並將其裁減。 – Cheery 2009-06-01 20:24:34

1

想到的一個想法是通過以下方法分別找出在X和Y方向上要收縮多少:繪製矩形的一半尺寸的「邊距」,然後使用ARB_ occlusion_query查找如果它是空的。如果不爲空,則分成兩半並重復(即,進行二分搜索以找到合適的大小)。這需要log(N)步驟,其中N是畫布的大小(寬度或高度),因此如果偶爾進行,它非常快。