2017-08-07 162 views
0

我很驚訝地在使用OpenGL ES 2.0顯示文本時掙扎不已。在stackoverflow上有很多帖子,辯論主題,顯示幾行代碼,或者顯示2010年的鏈接,但是使用OpenGL ES 1.x(不兼容)。iOS - 使用OpenGL ES 2.0顯示文本

但他們是相當模糊的,據我所知,還沒有完整的代碼或顯示與版本文本方便的方法2.

你知不知道是否有顯示文本現代的方式?就像添加一個莢並寫這樣的東西?

[font drawText:@"This is a text" size:@12]; 

非常感謝,任何幫助將非常喜歡。

編輯1:我必須使用OpenGL 2.0,並且由於內部原因,我無法使用其他內容。

編輯2:我發現了兩個庫,做到這一點:

這一個是簡單的,但爲ES1編寫,所以我需要將代碼移植到ES2。

編輯3:ES1和ES2是不同的:ES2與着色器一起使用。

回答

0

由於您的目標是ES2並支持着色器,因此可能有點難以創建一個工具來爲您做到這一點。但是如果你找到這樣的工具,它可能會在許多方面與你的流程衝突,比如綁定它自己的着色器和緩衝區,使用混合,深度緩衝區設置...然後如果它會這樣做,你遇到了麻煩,因爲你可能不會可以很好地控制文本的繪製方式和位置(例如在3D旋轉框上)。

但是從你的問題(它的片段)看起來更像是你想要做的就是添加一些文本的二維覆蓋,看起來像使用UILabel完全一樣。如果是這種情況,那麼我建議你實際使用UILabel來繪製這些文本。您可以在顯示openGL內容的視圖中輕鬆添加所有這些視圖。

在另一種情況下,您仍然需要在3D對象上繪製文本並且想要非常容易地操作,我建議您仍然使用UILabel,但創建其截圖並將其推送到新的(或圖集)紋理。然後,您可以將其繪製爲任何其他對象。然後UILabel將處理所有的字體,路線,顏色,多行和文字環繞,字體大小調整......所以,如果你已經有一個系統在場景中繪製紋理,你應該不會創建一個工具來繪製一些東西由於您使用紋理來傳輸數據,因此屏幕上的文本會被顯示。

+0

感謝您的回答。其實我需要顯示它來打開GL ES 2.0,因爲我有一個openGL場景(包含矩形,紋理等),我將這個場景編碼成一個視頻。 – Xys

+0

然後,如果這是2D的,它會更容易。你可以創建另一個與openGL相同大小的視圖。隨意添加標籤,然後創建一個截圖,並在繪圖管道的末端繪製紋理... –

+0

謝謝,但我不認爲這是非常優化的。用戶可以非常快速地改變文本,並且我不想每次改變它時都生成一個大的圖像。我更喜歡紋理地圖集,但我找不到任何代碼與opengl es 2.0 – Xys

0

自從OpenGL ES1以來沒有任何改變。通常,文本以平面投影顯示,並創建使用字體紋理紋理的四邊形。這個主題有很多教程。 One example how to do it. 但是,當你從頭開始時,這是相當多的工作。

可能有更好的辦法,但取決於你打算做什麼可能不合適。您可以將UIKit與OpenGL視圖混合在一起,使用UIKit繪製的文本作爲疊加層。 (UILabel,UIButton ..等)

+0

感謝您的答案! ES1和ES2之間有一些差異,我編輯了這個帖子以更具體。正如你所說,這是相當多的工作,這就是我想避免的:)。 – Xys