【three.js學習筆記】線

一條連續的線css

var material = new THREE.LineBasicMaterial({
    color: 0x0000ff
});

var geometry = new THREE.Geometry();
geometry.vertices.push(
    new THREE.Vector3( -10, 0, 0 ),
    new THREE.Vector3( 0, 10, 0 ),
    new THREE.Vector3( 10, 0, 0 )
);

var line = new THREE.Line( geometry, material,THREE.LineSegments);
scene.add( line );

線條Line api

構造器

Line( geometry, material, mode );
  • geometry:表示線段的頂點
  • material:線條材料。默認爲 LineBasicMaterial
  • mode:線條繪製方式(THREE.LineSegments);

屬性

  • geometry:表示線段的頂點
  • material:線條材料

方法

.raycast ( raycaster, intersects )

獲得光線投射和該線條之間的交點。 Raycaster.intersectObject 將調用該方法。html

.clone ()

返回該線條對象及其後代的克隆。canvas

三維向量(Vector3)api

var a = new THREE.Vector3( 1, 0, 0 );
var b = new THREE.Vector3( 0, 1, 0 );

var c = new THREE.Vector3();
c.crossVectors( a, b );

構造器(Constructor)

Vector3( x, y, z )
  • x: Float 向量的x值。
  • y: Float 向量的y值。
  • z: Float 向量的z值。

使用

建立幾何體並將三維向量放入幾何體api

var geometry = new THREE.Geometry();
geometry.vertices.push(
    new THREE.Vector3( -10, 0, 0 ),
    new THREE.Vector3( 0, 10, 0 ),
    new THREE.Vector3( 10, 0, 0 )
);

線材質

簡單的說就是物體看起來是什麼質地。材質能夠當作是材料和質感的結合。在程序中,它是表面各可視屬性的結合,這些可視屬性是指表面的色彩、紋理、光滑度、透明度、反射率、折射率、發光度等。app

THREE.LineBasicMaterial

THREE.LineBasicMaterial = function ( parameters )
  • Color:線條的顏色,用16進制來表示,默認的顏色是白色。
  • Linewidth:線條的寬度,默認時候1個單位寬度。
  • Linecap:線條兩端的外觀,默認是圓角端點,當線條較粗的時候纔看得出效果,若是線條很細,那麼你幾乎看不出效果了。
  • Linejoin:兩個線條的鏈接點處的外觀,默認是「round」,表示圓角。
  • VertexColors:定義線條材質是否使用頂點顏色,這是一個boolean值。意思是,線條各部分的顏色會根據頂點的顏色來進行插值。

線條繪製

圖片描述

THREE.LinePieces(GL_LINES)

var line = new THREE.Line( geometry, material, THREE.LinePieces );

THREE.LineSegments(GL_LINE_STRIP)

var line = new THREE.Line( geometry, material, THREE.LineSegments );

實例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three框架</title>
        <script src="js/Three.js"></script>
        <style type="text/css">
            div#canvas-frame {
                border: none;
                cursor: pointer;
                width: 100%;
                height: 600px;
                background-color: #EEEEEE;
            }

        </style>
        <script>
            var renderer;
            function initThree() {
                width = document.getElementById('canvas-frame').clientWidth;
                height = document.getElementById('canvas-frame').clientHeight;
                renderer = new THREE.WebGLRenderer({
                    antialias : true
                });
                renderer.setSize(width, height);
                document.getElementById('canvas-frame').appendChild(renderer.domElement);
                renderer.setClearColor(0xFFFFFF, 1.0);
            }

            var camera;
            function initCamera() {
                camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                camera.position.x = 0;
                camera.position.y = 1000;
                camera.position.z = 0;
                camera.up.x = 0;
                camera.up.y = 0;
                camera.up.z = 1;
                camera.lookAt({
                    x : 0,
                    y : 0,
                    z : 0
                });
            }

            var scene;
            function initScene() {
                scene = new THREE.Scene();
            }

            var light;
            function initLight() {
                light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);
                light.position.set(100, 100, 200);
                scene.add(light);
            }

            var cube;
            function initObject() {

                var geometry = new THREE.Geometry();
                var material = new THREE.LineBasicMaterial( { vertexColors: true } );
                var color1 = new THREE.Color( 0x444444 ), color2 = new THREE.Color( 0xFF0000 );

                // 線的材質能夠由2點的顏色決定
                var p1 = new THREE.Vector3( -100, 0, 100 );
                var p2 = new THREE.Vector3(  100, 0, -100 );
                geometry.vertices.push(p1);
                geometry.vertices.push(p2);
                geometry.colors.push( color1, color2 );

                var line = new THREE.Line( geometry, material, THREE.LinePieces );
                scene.add(line);
            }

            function threeStart() {
                initThree();
                initCamera();
                initScene();
                initLight();
                initObject();
                renderer.clear();
                renderer.render(scene, camera);
            }

        </script>
    </head>

    <body onload="threeStart();">
        <div id="canvas-frame"></div>
    </body>
</html>
相關文章
相關標籤/搜索