Threejs的学习 2、点,线,面

摘要:
DOCTYPE html˃三个框架div#canvas frame{border:none;光标:指针;宽度:100%;高度:600px;背景颜色:#EEEEEE;}varrenderer;函数initThree(){width=document.getElementById.clientWidth;height=document.get-ElementById.chlientHeight;render=newTHREE.WebGLRenderer;render.setSize;document.getElement ById.appendChild;render.setClearColor;}varcamera;函数initCamera(){camera=newTHREE.PerspectiveCamera;camera.position.x=0;camera.paosition.y=1000;camera.prosition.z=0;camera.up.x=0;camera.up.y=0;camera.up.z=1;camera.lookAt;}varscene;函数initScene(){scene=newTHREE.scene();}varlight;函数initLight(){light=newTHREE.DirectionalLight;light.position.set;scene.add;}varcube;FunctioninitObject(){vargeometry=newTHREE.Geometry();varmaterial=newTHRE.LineBasicMaterial;varcolor1=newTHLE.Color,color2=newTHRE.Color;//线的材质可以由2个点的颜色决定varp1=newTHRE.Vector3;varp2=newTHLE.Vector2;Geometry.vides.push;Geometry.wides.push;Geometry.colors.push,varline=newTHREE.line;scene.add;}functionThreeStart(){initThree();initCamera();nitScene();init Light();initObject();render.clear();renderer.render;}1。首先,我们声明一个几何体,如下所示:vargeometry=newTHREE。几何();几何体中有一个顶点变量,可用于存储点。线帽:默认情况下,线两端的外观为圆角端。只有当线条较粗时才能看到效果。如果线条很细,你很难看到效果。线条连接:两条线连接点处的外观。默认值为“圆形”,即圆角。

在Threejs中定义一个点

在three.js中,点可以在右手坐标系中表示:空间几何中,点可以用一个向量来表示,在Three.js中也是用一个向量来表示的,代码如下所示:

THREE.Vector3 = function ( x, y, z ) {

this.x = x || 0;
this.y = y || 0;
this.z = z || 0;

};

THREE.Vector3被赋值为一个函数。这个函数有3个参数,分别代表x坐标,y坐标和z坐标的分量。函数体内的代码将他们分别赋值给成员变量x,y,z。看看上面的代码,中间使用了一个“||”(或)运算符,就是当x=null或者undefine时,this.x的值应该取0。

点的操作

现在来看看怎么定义个点,假设有一个点x=4,y=8,z=9。你可以这样定义它:

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

//或者

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

画一条彩色线

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

1、首先,我们声明了一个几何体geometry,如下:

var geometry = new THREE.Geometry();

几何体里面有一个vertices变量,可以用来存放点。

2、定义一种线条的材质,使用THREE.LineBasicMaterial类型来定义,它接受一个集合作为参数,其原型如下:

LineBasicMaterial( parameters )

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

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

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

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

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

VertexColors:定义线条材质是否使用顶点颜色,这是一个boolean值。意思是,线条各部分的颜色会根据顶点的颜色来进行插值。(如果关于插值不是很明白,可以QQ问我,QQ在前言中你一定能够找到,嘿嘿,虽然没有明确写出)。

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

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

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

3、定义两种颜色,分别表示线条两个端点的颜色

var color1 = new THREE.Color( 0x444444 ),
color2 = new THREE.Color( 0xFF0000 );

4、定义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);

5、为4中定义的2个顶点,设置不同的颜色

geometry.colors.push( color1, color2 );

6、定义一条线

定义线条,使用THREE.Line类

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

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

然后,将这条线加入到场景中

scene.add(line);

这样,场景中就会出现刚才的那条线段了

免责声明:文章转载自《Threejs的学习 2、点,线,面》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇产品开发阶段 EVT DVT PVT MPJBOSS 数据源配置并使用JNDI调用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF 显示3D密集场景,堆场管理系统

又好久好久没写博客了,这次接着上文https://www.cnblogs.com/CSSZBB/p/12785380.html,上文用WPF 的绘图功能,制作了一个伪3D的2.5D控件ThreeDBox ,那么这玩意我是用来干啥那?没事做做着玩么? 简单来说,这个东西用来显示密集型的操作画面,比如显示一个堆场里集装箱的摆放情况,是不是稍微有点像了那?当然为...

ThreeJS 实例笔记

自己瞎研究的一些Threejs代码和问题笔记. -------------------------------------------------------割-----------------------------------------------------------------------   Q:Threejs获取Object: let ob...

ThreeJS之动画交互逻辑及特效

 工作需要,研究了一下 threejs 简单逻辑动画交互方法。写了一个小示例,分享一下,挺丑的。 第一步 当然就是初始化 threejs 的渲染场景了。 var camera; //相机 var scene;//场景 var renderer;//webGL渲染器 var controls;//轨道控件,用于特定场景,模拟轨道中的卫星,可以用鼠标和键...

首个threejs项目-前端填坑指南

第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来。经过老板20天惨无人道的摧残,终于小有成就。 因为第一次搞这玩意,相对的遇到的问题也是大把的,让我来一一诉说一路上遇到的各种问题。 开发使用: C4D、Blender2.75、[threejs-r72](http:...

ThreeJs 基础入门

本文来自网易云社区 作者:唐钊 Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它在 web 中创建各种三维场景,包括了摄影机、光影、材质等各种对象。使用它可以让我们更加直观的了解 webgl 的世界。 3D 场景前置知识 1.场景(Scene):是物体、光源等元素的容器,可以配合 chrome 插件使用,抛出 window.scene即可...

基于WebGL/Threejs技术的BIM模型轻量化之图元合并

伴随着互联网的发展,从桌面端走向Web端、移动端必然的趋势。互联网技术的兴起极大地改变了我们的娱乐、生活和生产方式。尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化。随着WebGL标准被广泛接受,出现了许多基于HTML5的开源三维引擎,如threejs、scenejs等。尤其threejs使用非常广泛,一方面由于其使用门槛较低,...