three.js 筆記四 shape

一舔痕、基本流程

參考
ThreeJs 圖形繪制基礎
https://github.com/mrdoob/three.js/blob/master/examples/webgl_geometry_shapes.html

在 ThreeJs 中后德,提供了一套 Shape 和 Curve 相關的 API 來幫助我們在 3D 場景中繪制出我們想要的圖形。圖形繪制一般流程為:構造 Shape腮出、構造 BufferGeometry 、構造 Mesh 并添加到場景中。

1.構造shape
var circleRadius = 40;
var circleShape = new THREE.Shape();
circleShape.moveTo( 0, circleRadius );

circleShape.quadraticCurveTo( circleRadius, circleRadius, circleRadius, 0 );
circleShape.quadraticCurveTo( circleRadius, - circleRadius, 0, - circleRadius );
circleShape.quadraticCurveTo( - circleRadius, - circleRadius, - circleRadius, 0 );
circleShape.quadraticCurveTo( - circleRadius, circleRadius, 0, circleRadius );
2.構造 BufferGeometry
var points = shape.getPoints();
var geometryPoints = new THREE.BufferGeometry().setFromPoints( subPoints );
3.構造 Mesh 并添加到場景中
function addLineShape( shape, color, x, y, z, rx, ry, rz, s ) {

    // lines

    shape.autoClose = true;

    var points = shape.getPoints();

    console.log( "addLineShape ", points );
    let length = points.length;

    let val = 0;

    function drawLine(  ) {

        if(val == length) return;

        let subPoints1 = points[val];
        let subPoints2 = points[(val + 1) % length];

        let subPoints = [];
        subPoints.push(subPoints1);
        subPoints.push(subPoints2);

        var geometryPoints = new THREE.BufferGeometry().setFromPoints( subPoints );

        // solid line

        var line = new THREE.Line( geometryPoints, new THREE.LineBasicMaterial( { color: color } ) );
        line.position.set( x, y, z );
        line.rotation.set( rx, ry, rz );
        line.scale.set( s, s, s );
        scene.add( line );

        val++;

        setTimeout(drawLine,16);
    }

    drawLine();
}
二济竹、測試用例
1.自動閉合
shapeRef.moveTo(500,500);
shapeRef.lineTo(1000,500);
shapeRef.lineTo(1000,1000);

shapeRef.moveTo(1500,500);
shapeRef.lineTo(2000,500);
shapeRef.lineTo(2000,1000);
shapeRef.lineTo(1500,1500);
image.png

根據(jù)圖形推斷絮重,moveTo到達一個點P后冤寿,最后畫的那條線會自動向點P補一條線進行閉合。

2.THREE.Shape 類的一些繪圖函數(shù)

參考
three.js 幾何體(二)

函數(shù)名 作用
moveTo(x, y) 將繪圖點移動到指定的 x青伤、y 坐標處
lineTo(x, y) 從當前位置(例如 moveTo 設定的位置)畫一條線到指定的 x督怜、y 坐標處
quadricCurveTo(cpx, cpy, x, y)(二次曲線) 此函數(shù)為二次曲線。你可以使用兩種方法來畫曲線:quadricCurveTo 或者 bezierCurveTo狠角。這兩種曲線的不同之處在于指定曲線曲率的方法不一樣号杠,如下圖所示:對于二次曲線,除了指定結束點(x, y)外丰歌,還需要額外指定一個點(cpx, cpy)來控制曲線的曲率(不用指定起始點姨蟋,因為路徑的當前位置就是起始點);對于三次曲線立帖,除了指定結束點(x, y)外眼溶,還需要額外指定兩個點(cpx1, cpy1, cpx2, cpy2)來控制曲線的曲率。
bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y)(貝塞爾曲線) 此函數(shù)為三次曲線晓勇。相關說明參考上一行的二次曲線堂飞。
splineThru(vector2Array) 此函數(shù)沿著參數(shù)指定的坐標集合繪制一條光滑的樣條曲線。其參數(shù)為一THREE.Vector2 對象數(shù)組绑咱。
arc(x, y, radius, startAngle, endAngle, clockwise) 次函數(shù)繪制一個圓或者一段弧绰筛。x, y 用來指定圓心與當前位置的偏移量。radius 設定圓的大小描融。而 startAngle 及 endAngle 則用來定義圓弧要畫多長别智。布爾屬性 clockwise 決定這段弧是順時針畫還是逆時針畫。
absArc(x, y, radius, startAngle, endAngle, clockwise) 參考 arc 函數(shù)稼稿。只不過其指定的圓心位置是絕對位置薄榛,而不是相對當前位置的偏移量。
ellipse(x, y, radiusX, radiusY, startAngle, endAngle, clockwise) 參考 arc 函數(shù)让歼。只是橢圓可以分別指定 x 軸半徑及 y 軸半徑敞恋。
absEllipse(x, y, radiusX, radiusY, startAngle, endAngle, clockwise) 參考 ellipse 函數(shù)。只不過其指定的圓心位置是絕對位置谋右,而不是相對當前位置的偏移量硬猫。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啸蜜,更是在濱河造成了極大的恐慌坑雅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衬横,死亡現(xiàn)場離奇詭異裹粤,居然都是意外死亡,警方通過查閱死者的電腦和手機蜂林,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門遥诉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人噪叙,你說我怎么就攤上這事矮锈。” “怎么了睁蕾?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵苞笨,是天一觀的道長。 經(jīng)常有香客問我子眶,道長猫缭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任壹店,我火速辦了婚禮猜丹,結果婚禮上,老公的妹妹穿的比我還像新娘硅卢。我一直安慰自己射窒,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布将塑。 她就那樣靜靜地躺著脉顿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪点寥。 梳的紋絲不亂的頭發(fā)上艾疟,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音敢辩,去河邊找鬼蔽莱。 笑死,一個胖子當著我的面吹牛戚长,可吹牛的內(nèi)容都是我干的盗冷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼同廉,長吁一口氣:“原來是場噩夢啊……” “哼仪糖!你這毒婦竟也來了柑司?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锅劝,失蹤者是張志新(化名)和其女友劉穎攒驰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故爵,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡玻粪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稠集。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶段。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡饥瓷,死狀恐怖剥纷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呢铆,我是刑警寧澤晦鞋,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站棺克,受9級特大地震影響悠垛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娜谊,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一确买、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纱皆,春花似錦湾趾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至近迁,卻和暖如春艺普,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鉴竭。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工歧譬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搏存。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓缴罗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祭埂。 傳聞我的和親對象是個殘疾皇子面氓,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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

  • 簡介: Core Graphics 和Quartz 2D的區(qū)別 quartz是一個通用的術語兵钮,用于描述在iOS和M...
    made_China閱讀 1,339評論 0 1
  • 前言 前幾天,根據(jù)需求,需要利用iOS自帶的Quartz 2D來畫圖,完成需求功能,于是就研究了一下iOS中...
    leesum閱讀 1,167評論 0 2
  • 一掘譬、使用UIImage和CGImage處理圖位 可用通過Quartz的圖片對象或原始圖片數(shù)據(jù)來創(chuàng)建UIImage。...
    MD_963閱讀 1,596評論 0 3
  • 一呻拌、簡介 對于 Core Graphics Framework葱轩,可以從兩個方面初步感知,一是它在繪圖系統(tǒng)中的...
    kReader閱讀 1,721評論 0 1
  • Points void CGContextMoveToPoint ( CGContextRef c, CGFloa...
    細雨聽風閱讀 714評論 0 1