學(xué)習(xí)ThreeJS 03

如何創(chuàng)建線條

var material = new THREE.LineBasicMaterial({ color: 0x0000ff });
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(-10, 0, 0));
geometry.vertices.push(new THREE.Vector3(0, 10, 0));
geometry.vertices.push(new THREE.Vector3(10, 0, 0));
var line = new THREE.Line(geometry, material);
scene.add(line);

同一根線會包含多個點的連接, 同樣創(chuàng)建線條也需要紋理和結(jié)構(gòu)的配置

如何創(chuàng)建動態(tài)變化的線呢?

什么是動態(tài)變化的線: 線的長短, 線的點位置, 線的顏色

  • 如何改變點的位置
  • 如何改變線的長短(定點數(shù))
  • 如何改變線的顏色

做到這一點, 需要用到BufferGeometry, 用于緩存3d數(shù)據(jù)

  • 創(chuàng)建線條
//設(shè)置線條最長緩存大小, 也就是線包括200個空間的點
var MAX_POINTS = 200;
//緩存線的結(jié)構(gòu)
var geometry = new THREE.BufferGeometry();
//創(chuàng)建線的點數(shù)
var positions = new Float32Array( MAX_POINTS * 3 );
//加載數(shù)組到結(jié)構(gòu)中 (因為一個3d空間的點由三個浮點數(shù)構(gòu)成, 所以需要對數(shù)組進行標(biāo)明
geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
//設(shè)置渲染大小, 因為最基本的線需要兩個空間的點來描述, 所以少于兩個點情況下無法描述這個線條, 注意不能超過
geometry.setDrawRange( 0, 2 );
//設(shè)置材質(zhì)
var material = new THREE.LineBasicMaterial( { color: 0xff0000, linewidth: 2 } );
//創(chuàng)建線條
line = new THREE.Line( geometry,  material );
scene.add( line );

updatePositions();
  • 修改線條點屬性
function updatePositions() {
    //獲取點數(shù)組
    var positions = line.geometry.attributes.position.array;
    //設(shè)置臨變量
    var x = y = z = index = 0;
    for ( var i = 0, l = MAX_POINTS; i < l; i ++ ) {
        //改變
        positions[ index ++ ] = x;
        positions[ index ++ ] = y;
        positions[ index ++ ] = z;
        //貌似是js的功能, 讓變量能跟隨變化
        x += ( Math.random() - 0.5 ) * 30;
        y += ( Math.random() - 0.5 ) * 30;
        z += ( Math.random() - 0.5 ) * 30;
    }
}

讓線條漸漸顯示出來

  • 更新動畫
function animate() {
//持續(xù)更新動畫
    requestAnimationFrame( animate );
//設(shè)置顯示的線段長度變化
    drawCount = ( drawCount + 1 ) % MAX_POINTS;
    line.geometry.setDrawRange( 0, drawCount );
    if ( drawCount === 0 ) {
//更新位置點
        updatePositions();
        line.geometry.attributes.position.needsUpdate = true;
//更新線條顏色
        line.material.color.setHSL( Math.random(), 1, 0.5 );
    }
//別忘了進行渲染 renderer.render( scene, camera );
    render();
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爪飘,隨后出現(xiàn)的幾起案子片仿,更是在濱河造成了極大的恐慌齐帚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟铜,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機屯曹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惊畏,“玉大人恶耽,你說我怎么就攤上這事⊙掌簦” “怎么了偷俭?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缰盏。 經(jīng)常有香客問我涌萤,道長淹遵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任负溪,我火速辦了婚禮透揣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘川抡。我一直安慰自己辐真,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布崖堤。 她就那樣靜靜地躺著拆祈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倘感。 梳的紋絲不亂的頭發(fā)上放坏,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音老玛,去河邊找鬼淤年。 笑死,一個胖子當(dāng)著我的面吹牛蜡豹,可吹牛的內(nèi)容都是我干的麸粮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼镜廉,長吁一口氣:“原來是場噩夢啊……” “哼弄诲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娇唯,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤齐遵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后塔插,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梗摇,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年想许,在試婚紗的時候發(fā)現(xiàn)自己被綠了伶授。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡流纹,死狀恐怖糜烹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漱凝,我是刑警寧澤疮蹦,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站碉哑,受9級特大地震影響挚币,放射性物質(zhì)發(fā)生泄漏亮蒋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一妆毕、第九天 我趴在偏房一處隱蔽的房頂上張望慎玖。 院中可真熱鬧,春花似錦笛粘、人聲如沸趁怔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽润努。三九已至,卻和暖如春示括,著一層夾襖步出監(jiān)牢的瞬間铺浇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工垛膝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳍侣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓吼拥,卻偏偏與公主長得像倚聚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凿可,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容