three3D地图设置两点之间的连线

点:能够用THREE.Vector3D来表示css

如今来看看怎么定义个点,假设有一个点x=4,y=8,z=9。你能够这样定义它:

var point1 = new THREE.Vecotr3(4,8,9);

另外你也可使用set方法,代码以下:

var point1 = new THREE.Vector3();

point1.set(4,8,9);
一、首先,咱们声明了一个几何体geometry,以下:
var geometry = new THREE.Geometry();html

几何体里面有一个vertices变量,能够用来存放点。canvas

二、定义一种线条的材质,使用THREE.LineBasicMaterial类型来定义,它接受一个集合做为参数,其原型以下:
LineBasicMaterial( parameters )app

Parameters是一个定义材质外观的对象,它包含多个属性来定义材质,这些属性是:框架

Color:线条的颜色,用16进制来表示,默认的颜色是白色。dom

Linewidth:线条的宽度,默认时候1个单位宽度。htm

Linecap:线条两端的外观,默认是圆角端点,当线条较粗的时候才看得出效果,若是线条很细,那么你几乎看不出效果了。对象

Linejoin:两个线条的链接点处的外观,默认是“round”,表示圆角。three

VertexColors:定义线条材质是否使用顶点颜色,这是一个boolean值。意思是,线条各部分的颜色会根据顶点的颜色来进行插值。ip

Fog:定义材质的颜色是否受全局雾效的影响。

咱们这里使用了顶点颜色vertexColors: THREE.VertexColors,就是线条的颜色会根据顶点来计算。

var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );

三、接下来,定义两种颜色,分别表示线条两个端点的颜色,以下所示:
var color1 = new THREE.Color( 0x444444 ),

color2 = new THREE.Color( 0xFF0000 );

四、定义2个顶点的位置,并放到geometry中,代码以下:
var p1 = new THREE.Vector3( -100, 0, 100 );

var p2 = new THREE.Vector3( 100, 0, -100 );

geometry.vertices.push(p1);

geometry.vertices.push(p2);

五、为4中定义的2个顶点,设置不一样的颜色,代码以下所示:
geometry.colors.push( color1, color2 );

geometry中colors表示顶点的颜色,必须材质中vertexColors等于THREE.VertexColors 时,颜色才有效,若是vertexColors等于THREE.NoColors时,颜色就没有效果了。那么就会去取材质中color的值,这个很重要,你们必定记住。

六、定义一条线
定义线条,使用THREE.Line类,代码以下所示:

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

第一个参数是几何体geometry,里面包含了2个顶点和顶点的颜色。第二个参数是线条的材质,或者是线条的属性,表示线条以哪一种方式取色。第三个参数是一组点的链接方式,咱们会在后面详细讲解。

而后,将这条线加入到场景中,代码以下:

scene.add(line);
我的代码以下:

  

<!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>

相关文章
相关标签/搜索