簡體   English   中英

使用Android和OpenGL ES / Rajawali標記3D模型的各個部分

[英]Labeling parts of 3D model with Android and OpenGL ES/Rajawali

我已將使用Rajawali的模型(例如茶壺)導入場景。 我想使用簡單的Android視圖標記模型的各個部分(例如,蓋子,身體,腳,手柄和壺嘴),但我不知道如何實現。 具體來說,將標簽放置在正確的位置似乎具有挑戰性。 想法是,當我變換模型在場景中的位置時,標簽的尖端仍正確定位

Rajawali教程在https://github.com/Rajawali/Rajawali/wiki/Tutorial-08-Adding-User-Interface-Elements處展示了如何將Android視圖放置在場景頂部。 我也了解如何使用轉換矩陣將模型上的3D坐標轉換為屏幕上的2D坐標,但是我不知道如何確定模型本身的確切3D坐標。 使用Blender將模型導出為OBJ格式,因此,我認為有一些聰明的方法可以在Blender中確定坐標並將其導出到單獨的文件中,或者以某種方式將其包括在OBJ文件中(但不渲染這些點,僅將它們包括為元數據),但我不知道該怎么做。

任何想法都非常感謝! :)

我會使用screenquad,而不是視圖。 這是一般的GL解決方案,也可以在iOS上使用。

您必須確定所需模型頂點的索引。 使用下面的文本渲染算法,您可以擺弄它們直到找到正確的。

  1. 創建與屏幕相同的長寬比的合理ARGB位圖。
  2. 使用此位圖創建screenquad紋理
  3. 使用此位圖創建畫布
  4. 其余的發生在onDrawFrame()中。 使用透明塗料清除畫布。
  5. 使用MVP矩陣將所需的模型頂點轉換為畫布坐標。
  6. 在畫布坐標處繪制所需的文本
  7. 更新紋理。

  • 您的文本將在您指定的頂點處非常精確地呈現。 GL線程將加倍緩沖並循環回到#4。 超級流暢的3D文字動畫!
  • 使用雙浮點數學可避免坐標轉換過程中的精度損失,這會導致文本不穩定。 您甚至可以使用頂點的z值縮放文本。 看中!
  • 性能瓶頸是#7,因為必須將每個位圖的整個位圖都復制到GL紋理內存中。 嘗試保持位圖盡可能小,並保持寬高比。 也許讓用戶切換標簽。

  • 請注意,復制到GL紋理內存是多余的,因為在OpenGL-ES中,GL內存只是常規內存。 出於兼容性原因,保留了常規內存的冗余塊以人為地強制執行副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM