threejs繪制中文方案

1. 創(chuàng)建文字幾何體

使用threejs自帶的helvetiker_bold.typeface字體文件來進行渲染,僅支持渲染英文

export class Text {
  static font: Font;

  data: Mesh;

  static async getFont() {
    if(!this.font) {
      const loader = new FontLoader();
      this.font = await loader.loadAsync('fonts/helvetiker_bold.typeface.json');
    }
    return this.font;
  }

  async setText(text: string) {
    const font = await Text.getFont();
    const geometry = new TextGeometry(text, {
      font: font,
      size: 80,
      height: 5,
      curveSegments: 12,
      bevelEnabled: true,
      bevelThickness: 10,
      bevelSize: 8,
      bevelOffset: 0,
      bevelSegments: 5
    });
    const material = new MeshLambertMaterial({ color: 0x0000ff });
    this.data = new Mesh(geometry, material);
  }
}
渲染英文

自帶的 helvetiker_bold 字體并不支持中文乾蓬,需要找個 ttf 中文字體在 http://gero3.github.io/facetype.js/ 上轉(zhuǎn)換為TypeFace格式久妆,這里以阿里普惠體為例誉帅,渲染效果如下

阿里普惠體

但是有兩個缺點:

  1. 需要額外加載字體文件仲闽,中文字體文件大小高達41.3M,實際使用的話需要對字體文件進行裁剪
  2. 無法渲染emoji表情雀彼,都會被渲染為纺阔?

2. 使用CSS2DRenderer直接渲染dom

threejs不僅提供了3d渲染器瘸彤,還提供了把dom元素渲染在3d場景的CSS2DRenderer渲染器

    // CSS2DRenderer
    this.labelRenderer = new CSS2DRenderer();
    this.labelRenderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(this.labelRenderer.domElement);

    // CSS2DObject
    this.scene = new Scene();
    const div = document.createElement("div");
    div.className = "label";
    div.textContent = text;
    this.text= new CSS2DObject(div);
    this.scene.add(this.text);

優(yōu)點:這樣渲染出來的都是真實的dom節(jié)點,可以很方便的編寫交互邏輯州弟,如果只需要平面的文字钧栖,這一方面明顯比創(chuàng)建文字幾何體更好
缺點:縮放相機時,dom節(jié)點沒有縮放效果婆翔,這個時候可以考慮使用CSS3DRenderer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拯杠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啃奴,更是在濱河造成了極大的恐慌潭陪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異依溯,居然都是意外死亡老厌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門黎炉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枝秤,“玉大人,你說我怎么就攤上這事慷嗜〉淼” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵庆械,是天一觀的道長薇溃。 經(jīng)常有香客問我,道長缭乘,這世上最難降的妖魔是什么沐序? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮堕绩,結(jié)果婚禮上策幼,老公的妹妹穿的比我還像新娘。我一直安慰自己奴紧,他們只是感情好垄惧,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绰寞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铣口。 梳的紋絲不亂的頭發(fā)上滤钱,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音脑题,去河邊找鬼件缸。 笑死,一個胖子當著我的面吹牛叔遂,可吹牛的內(nèi)容都是我干的他炊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼已艰,長吁一口氣:“原來是場噩夢啊……” “哼痊末!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哩掺,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤凿叠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盒件,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蹬碧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炒刁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恩沽。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翔始,靈堂內(nèi)的尸體忽然破棺而出罗心,到底是詐尸還是另有隱情,我是刑警寧澤绽昏,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布协屡,位于F島的核電站,受9級特大地震影響全谤,放射性物質(zhì)發(fā)生泄漏肤晓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一认然、第九天 我趴在偏房一處隱蔽的房頂上張望补憾。 院中可真熱鬧,春花似錦卷员、人聲如沸盈匾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽削饵。三九已至,卻和暖如春未巫,著一層夾襖步出監(jiān)牢的瞬間窿撬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工叙凡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劈伴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓握爷,卻偏偏與公主長得像跛璧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子新啼,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349