選項A可能是技術上最快的,但將帶來的,你將需要手動處理其他問題一大堆。如果你正在更新文本(健康,彈藥等),你將不得不提出一個文本渲染例程,至少可以說這些是不重要的。如果您通過鼠標或鍵盤與UI進行交互,則需要自己處理,並且您可以以足夠強大有效的方式進行操作,從而實現比原生瀏覽器窗口小部件更好的體驗。要指出的是,潛力要快一點,這是很多工作。
選項B是在我看來,要走的路。瀏覽器在合成方面非常出色,即使它會因爲它而出現性能下降,除非你正在做一個非常瘋狂的HUD,但我猜測與你應用的其他部分(比如JS邏輯)相比,這個命中可以忽略不計。此外,這是一條應該隨着時間的推移「神奇地」變得更好的路線,並且瀏覽器在他們所做的事情上變得更有效率。 IMO最大的缺點是,如果你使用一些最新和最好的CSS效果來按照你想要的方式來設計你的HUD,那麼你可能會遇到一些渲染錯誤,但是隨着時間的推移它又會消失。
就我所知,選項C在單個畫布中是不可能的。你可以將一個單獨的2D畫布分層放在你的3D畫布上,然後畫出你的HUD,但是在那時你繼承了A和B的所有問題,而沒有任何好處。我看不出有什麼好的理由來推薦它。
我認爲WebGL與許多本地3D平臺相比具有的一大優勢就是它可以輕鬆訪問地球上最廣泛使用和最靈活的UI框架之一(HTML)。忽視這一優勢將會是一項巨大的努力,而且沒有什麼實實在在的好處。使用你可以使用的工具,並且不要因爲失去了毫秒而擔心太多。我向你保證,在你的遊戲中你會遇到很多更大的問題,你花費的時間和精力比嘗試重新發明這個特定的方法要好得多。
優秀的答案,很有意義,非常感謝你! – JayDee
請注意,如果您使用選項C(在您的3D畫布上重疊2D畫布),則會在iOS 8上獲得相當大的性能。此方法將我的幀率減半! – lazd