2014-09-30 40 views
0

我爲德爾福XE2使用最新的GLScene樹幹 我已經開發了一個GUI-ish類型的項目,它使用3D而不是2D來繪製 draw屏幕上的GUI元素。使用GLScene或OpenGL for Delphi製作質地適合的4點多邊形/平面

它可以工作,但由於顯而易見的原因,圖形位置不是像素完美的。

我已經成功映射了3D視圖,因此TGLSceneViewer上的1個像素或多或少地在屏幕上顯示1個像素。這對我來說足夠了。

但是我放棄了在我的GUI中使用3D的想法,而我將專注於 ,因爲它是GPU加速的,所以專門使用GLScene for2D圖形表示。

然後我記得在以前的項目中使用了投影變換,其中我使用Graphics32 作爲我的GUI。

利用射影變換,我可以簡單地在3D空間中繪製點, 閱讀這些點的三維座標,座標轉換爲二維座標和 適用那些對TBitmap32射影變換參數,中提琴, 我我的軟件具有3D功能。

所以,我的問題是:

是否有可能「拉伸」在GLScene中或OpenGL紋理,使紋理 4點之間的配合,或平面內,所以,每當我移動的角落一架飛機到一個新的位置, 紋理會相應拉伸?

這樣我可以使用GLScene 2D圖形,但做一些簡單的欺騙,使事情看起來像它的3D。

下面的鏈接指向在互聯網上的圖像是一個可視化表示什麼,我在尋找: http://i.stack.imgur.com/hDdqa.png

+0

爲什麼不使用FireMonkey?它是原生的,2D和3D,並且是硬件加速的(包括2D版本)。幾乎所有你想要的東西,沒有從頭開始編寫它的努力。 – 2014-09-30 13:54:17

+0

如果我記得正確,Firemonkey的表現並不好。還是我在這裏錯了? – xaid 2014-09-30 14:39:16

+0

當它無法在早期版本(XE4及以下版本)中使用Direct2D時,出現了回退到GDI +的問題。只要您使用的是Vista或更高版本,您應該沒問題。我每天在XE6上使用它進行二維工作,這很好。就像任何圖書館一樣,你需要知道一些事情,例如,如果你畫出很多文本對象來緩存文本對象,這很方便。對於VCL,你也需要知道類似的東西!總的來說,它運行良好,速度很快,我很高興。 – 2014-09-30 14:42:29

回答

1

假設你不實現一些瘋狂的着色器,或者您正在使用固定功能管道功能這應該是相當平凡的。

OpenGL中的紋理座標總是標準化的,這意味着它們在[0-1]的範圍內;

因此,基本上只要在繪製對象時總是將紋理的座標設置爲最大1和最小0,則應始終使紋理填充四邊形。

你能否提供你用來繪製4點的代碼?如果我能看到它,我可能會提供幫助。

+0

我沒有可用的代碼,因爲我使用GLScene,我基本上添加了一個TGLPlane對象到由4個點組成的場景中。由於GLScene處理所有事情,我不知道如何操縱這4點。所以我甚至不能嘗試你的建議。不過,我現在正在研究GLScene,以瞭解如何操作TGLPlane的4個點。 – xaid 2014-09-30 14:41:17

+0

好吧,只要你的飛機紋理座標使用標準座標,你就不會有任何問題。 – Daniel 2014-09-30 19:01:50

+0

好吧,丹尼爾,感謝您的信息。 – xaid 2014-09-30 21:52:51