国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

香港云服务器
服務器之家 - 編程語言 - JavaScript - js教程 - three.js顯示中文字體與tween應用詳析

three.js顯示中文字體與tween應用詳析

2021-12-24 15:25郭志強 js教程

這篇文章主要給大家介紹了關于three.js顯示中文字體與tween應用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

今天郭先生說一下如何在three中顯示中文字體,然后結合tween實現文字位置的動畫。線案例請點擊chinese-font,

1. 生成中文字體

我們都使用過three.js的FontLoader加載typeface.json實現font的使用,但是很多案例都是英文字體,那么如何來生成中文字體呢?現在我們可以通過Facetype.js實現ttf向typeface.json的轉換。 首先我們在網上下載ttf中文字體(或者在電腦的C:\Windows\Fonts直接復制一份中文的ttf字體),然后我們登陸Facetype.js網站,選中準備好的ttf文件,點擊convert即可。得到的json文件就可以使用FontLoader加載了,其實還是挺簡單的,中文ttf一般都比較大,所以在選擇喜歡字體的同時,也要考慮好文件的大小。

2. tween操作文字動畫

之前也說過tween動畫,不過我覺得挺有意思的,我們就拿百家姓來作文字素材。

three.js顯示中文字體與tween應用詳析

three.js顯示中文字體與tween應用詳析

three.js顯示中文字體與tween應用詳析

效果就是這樣的,我們讓tween實現從圖一到圖二到圖三再到圖一的動畫,每個漢字除了位置的變化還有朝向(lookAt)的變化。這里的lookAt方法就是設置物體的朝向。好了開始上代碼。

1.設置點的位置和朝向

圖一中點的位置可以在平面幾何體中取點

?
1
let vertices1 = new THREE.PlaneGeometry(1400, 900, 13, 6).vertices;

他們的朝向相對于每個字來說都是Vector3(0, 0, 1),所以可以設置為

?
1
d.position.clone().add(Vector3(0, 0, 1)) //這里的d.position就是每個點的位置

圖二中點的位置可以在球體中獲取

?
1
let vertices2 = new THREE.SphereGeometry(500, 12, 9).vertices;

他們的朝向很容易找,就是朝向中心點就可以Vector3(0, 0, 0) 圖三中的點可以通過計算得到,就是一組旋轉上升的點

?
1
2
3
4
5
6
for(let i=0; i<98; i++) {
 let x = Math.sin(Math.PI / 12 * i) * 400;
 let y = (49 - i) * 8;
 let z = Math.cos(Math.PI / 12 * i) * 400;
 positions3.push(new THREE.Vector3(x,y,z));
}

他們的朝向可以設置為

?
1
new THREE.Vector3(0, d.position.y, 0) //d.position.y就是點的y坐標

這樣就設置好了點,接下來就制作動畫

2.tween動畫

首先初始化三個動畫

?
1
2
3
4
5
6
7
8
9
10
11
12
initTween() {
 var pos = { time: 0 };
 tween1 = new TWEEN.Tween(pos).to({ time: 1 }, 1000);
 tween2 = new TWEEN.Tween(pos).to({ time: 2 }, 1000);
 tween3 = new TWEEN.Tween(pos).to({ time: 0 }, 1000);
 tween1.easing(TWEEN.Easing.Linear.None);
 tween2.easing(TWEEN.Easing.Linear.None);
 tween3.easing(TWEEN.Easing.Linear.None);
 tween1.onUpdate(onUpdate);
 tween2.onUpdate(onUpdate);
 tween3.onUpdate(onUpdate);
}

這里的easing是動畫的緩動效果里面有很多種,不妨打印出來看一下

three.js顯示中文字體與tween應用詳析

然后就是onUpdate方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function onUpdate() {
 let time = this._object.time; //動畫時刻值
 if(flag == 0) {//這里有三段動畫flag判斷是那一段動畫
 group.children.forEach((d, i) => {//group里面包含著所有文字網格
  d.position.copy(positions3[i].clone().multiplyScalar(time / 2).add(positions1[i].clone().multiplyScalar(1 - time / 2)));
  d.lookAt((new THREE.Vector3(0, d.position.y, 0).multiplyScalar(time / 2)).add(d.position.clone().add(lookAt1).multiplyScalar(1 - time / 2)));
 })
 } else if(flag == 1) {
 group.children.forEach((d, i) => {
  d.position.copy(positions1[i].clone().multiplyScalar(1 - time).add(positions2[i].clone().multiplyScalar(time)));
  d.lookAt((d.position.clone().add(lookAt1).multiplyScalar(1 - time)).add(lookAt2.multiplyScalar(time)));
 })
 } else if(flag == 2) {
 group.children.forEach((d, i) => {
  d.position.copy(positions2[i].clone().multiplyScalar(2 - time).add(positions3[i].clone().multiplyScalar(time - 1)));
  d.lookAt((lookAt2.multiplyScalar(2 - time)).add(new THREE.Vector3(0, d.position.y, 0).multiplyScalar(time - 1)));
 })
 }
}

最后通過點擊觸發

?
1
2
3
4
5
6
7
8
9
10
11
12
13
click() {
 tween1.stop();
 tween2.stop();
 tween3.stop();
 if(flag == 0) {
 tween1.start();
 } else if(flag == 1) {
 tween2.start();
 } else if(flag == 2) {
 tween3.start();
 }
 flag = (flag + 1) % 3;
},

這里注意,由于點擊切換的時候動畫上一個動畫可能沒有完成,所以先調用stop方法,讓動畫先停下來。別忘了在render函數中調用TWEEN.update(),不然動畫是不會執行的。

總結

到此這篇關于three.js顯示中文字體與tween應用的文章就介紹到這了,更多相關three.js顯示中文字體與tween應用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

版權聲明:本文為郭志強的原創文章,原文鏈接:https://www.mrguo.link

延伸 · 閱讀

精彩推薦
  • js教程js實現鼠標拖曳效果

    js實現鼠標拖曳效果

    這篇文章主要為大家詳細介紹了js實現鼠標拖曳效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    等待的L先生8692021-12-22
  • js教程js閉包的9個使用場景

    js閉包的9個使用場景

    這篇文章主要介紹了js 閉包的9個使用場景,幫助大家更好的理解和學習JavaScript 閉包的使用,感興趣的朋友可以了解下...

    林恒10052021-12-22
  • js教程微信小程序彈窗禁止頁面滾動的實現代碼

    微信小程序彈窗禁止頁面滾動的實現代碼

    這篇文章主要介紹了微信小程序彈窗禁止頁面滾動的實現代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需...

    任我行RQ5402021-12-23
  • js教程微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現)

    微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現)

    這篇文章主要介紹了微信小程序實現可拖動懸浮圖標(包括按鈕角標的實現),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考...

    юноша7112021-12-21
  • js教程微信小程序實現modal彈出框遮罩層組件(可帶文本框)

    微信小程序實現modal彈出框遮罩層組件(可帶文本框)

    這篇文章主要給大家介紹了關于微信小程序實現modal彈出框遮罩層組件(可帶文本框)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者...

    BadmintonCode3482021-12-15
  • js教程JS 的 六種打斷點的方式,你用過幾種?

    JS 的 六種打斷點的方式,你用過幾種?

    Debugger 是前端開發很重要的一個工具,它可以在我們關心的代碼處斷住,通過單步運行來理清邏輯。而 Debugger 用的好壞與斷點打得好壞有直接的關系。...

    神光的編程秘籍7812021-12-16
  • js教程JavaScript中arguments的使用方法詳解

    JavaScript中arguments的使用方法詳解

    這篇文章主要給大家介紹了關于JavaScript中arguments的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    等待的L先生3592021-12-15
  • js教程js事件模型與自定義事件實例解析

    js事件模型與自定義事件實例解析

    JavaScript一個最簡單的事件模型,需要有事件綁定與觸發,還有事件刪除。本文將對其具體實現代碼進行解析,需要的朋友一起來看下吧...

    caihg5602021-12-15
1113
主站蜘蛛池模板: www.欧美 | 精品成人av| 日韩在线中文字幕 | 在线观看国产一区二区 | 中文字幕久久网 | 久久久高清 | 日本一区二区在线观看视频 | 99精品在线 | 精品在线看 | 色橹橹欧美在线观看视频高清 | a网站在线观看 | 国内外成人激情免费视频 | www.99re| 国内精品久久久久久 | 色天天综合久久久久综合片 | 亚洲三区在线观看 | 中文字幕在线观看av | 欧美日韩一区二区三区在线观看 | 国产精品一区二区在线观看 | 精品久久中文字幕 | 亚洲欧美另类久久久精品2019 | 中文字幕在线精品 | 久久久中文 | 亚洲高清一区二区三区 | 亚洲不卡视频 | 久久久久久亚洲精品中文字幕 | 国产精品久久久久久久久软件 | 欧美日本韩国一区二区三区 | 欧美精品在线视频 | 黄色在线观看视频 | 久久1区| 欧美精品亚洲 | 精品无人乱码一区二区三区 | 九九亚洲| 日韩有码一区 | 国产精品伦一区二区三级视频 | 欧美成人a∨高清免费观看 国产99久久 | 美女福利网站 | 一级电影免费在线观看 | 日韩第一区 | 亚洲第一视频 |