所有的三位物体都是由点构成,两点构成线,三点构成面,ThreeJs又如何绘制出点、线、面呢 ?

在ThreeJs中:

  • 模型由几何体和材质构成
  • 模型以何种形式(点、线、面)展示取决于渲染方式

1. 几何体

首先我们来创建一个自定义的几何体

var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry
THREE.Geometry是所有几何体的基类,它有几个重要的属性:
  • vertices : 数组,保存该几何体下所有顶点(Vector3对象)
  • colors : 数组,保存该几何体下所有顶点的颜色信息(Color对象)
  • faces : 数组,保存该几何体下所有面信息(Face3对象)

此时该几何体为空,我们需要创建一些点,然后绑定到该几何体

var p1 = new THREE.Vector3( 0, 0, 0 );
var p2 = new THREE.Vector3( 50, 0, 50 );
var p3 = new THREE.Vector3( 50, 50, 50 );
var p4 = new THREE.Vector3( 0, 50, 0 );
//绑定顶点到几何体
geometry.vertices.push(p1, p2, p3, p4);
//如果需要每个点展示不同颜色,需要给每个顶点添加颜色,也可以通过材质设置统一颜色
geometry.colors = [
new THREE.Color( 0xFF0000 ),
new THREE.Color( 0x00FF00 ),
new THREE.Color( 0x0000FF ),
new THREE.Color( 0xFFFF00 )
];

这里创建了一个几何体,接下来我们把他以点的形式渲染到页面上

    //如果以点的形式渲染,需要设置点对应材质
var pointMaterial = new THREE.PointsMaterial({
color: 0xFFFFFF, //设置颜色,默认 0xFFFFFF
vertexColors: true, //定义材料是否使用顶点颜色,默认false ---如果该选项设置为true,则color属性失效
size: 5 //定义粒子的大小。默认为1.0
});
//生成点模型
var points = new THREE.Points(geometry, pointMaterial);
//将模型添加到场景
scene.add(points);

接下来我们创建一个线模型

    //如果以线的形式渲染,需要设置线材质
var lineMaterial = new THREE.LineBasicMaterial({
color: 0xFFFFFF, //设置颜色,默认 0xFFFFFF
vertexColors: true, //设置为true线条会以两点颜色渐变 ---如果该选项设置为true,则color属性失效
linewidth: 5, //线宽,window下不生效
}); var line = new THREE.Line(geometry, lineMaterial);
scene.add(line);

再来创建一个网格(面)模型

    //创建一个面,参数为几何体顶点的索引
var face1 = new THREE.Face3( 0, 1, 2 );
//设置这个面的法向量
face1.normal = new THREE.Vector3( 0, 0, -1 );
//设置各个顶点对应颜色
face1.vertexColors = [
new THREE.Color(0xFF0000),
new THREE.Color(0x00FF00),
new THREE.Color(0x0000FF),
];
geometry.faces.push(face1);
//设置网格材质,这里设置为Lambert材质为一种不发光材质
var meshMaterial = new THREE.MeshLambertMaterial({
vertexColors : THREE.VertexColors,
side: THREE.DoubleSide
}); var mesh = new THREE.Mesh(geometry, meshMaterial);
scene.add(mesh);

可以看出以网格形式渲染需要先创建Face3对象,这是因为我们几何体的每个面都有其对应的法向量,即设置以哪个角度反射光线

Face3对象对应的属性

  • a,b,c : 对应三角面的三个点(Vector3对象)
  • color :颜色
  • normal :该三角面的法向量(Vector3对象)
  • vertexColors : 设置三角面三个点对应的法向量(Vector3对象数组),通常一个面都有一个统一的法向量,即设置 normal 即可

以上是我们创建自定义模型的基本操作,ThreeJs为我们提供了很多自带的模型,我们只需要调用API即可创建

等等....

ThreeJs 绘制点、线、面的更多相关文章

  1. 【带着canvas去流浪(5)】绘制K线图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文 ...

  2. CAD交互绘制样条线(网页版)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如 ...

  3. CAD交互绘制样条线(com接口)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如 ...

  4. CAD参数绘制样条线(com接口)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定位置.详细说明如下: 参数 说明 DOUBL ...

  5. CAD参数绘制样条线(网页版)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定位置.详细说明如下: 参数 说明 DOUBL ...

  6. CAD动态绘制样条线(网页版)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如 ...

  7. 带着canvas去流浪系列之五 绘制K线图

    [摘要] 用canvas原生API实现百度Echarts 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制 ...

  8. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  9. 使用Python的pandas模块、mplfinance模块、matplotlib模块绘制K线图

    目录 pandas模块.mplfinance模块和matplotlib模块介绍 pandas模块 mplfinance模块和matplotlib模块 安装mplfinance模块.pandas模块和m ...

  10. mapboxgl绘制3D线

    最近遇到个需求,使用mapboxgl绘制行政区划图层,要求把行政区划拔高做出立体效果,以便突出显示. 拿到这个需求后,感觉很简单呀,只需要用fill-extrusion方式绘制就可以啦,实现出来是这个 ...

随机推荐

  1. 经典问题----拓扑排序(HDU2647)

    题目简介:有个工厂的老板给工人发奖金,每人基础都是888,工人们有自己的想法,如:a 工人想要比 b 工人的奖金高,老板想要使花的钱最少 那么就可以 给b 888,给a 889 ,但是如果在此基础上, ...

  2. 《python for data analysis》第四章,numpy的基本使用

    <利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...

  3. js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  4. day061 cookie和session

    一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...

  5. python查询mysql并生成excel表

    需求说明 开发不愿意单独为某个项目做后台 并且运营那边需要合并多个表的数据 因此找上了我. 要求每周执行一次.月初也执行一次 要查询2个mysql数据库多个表并生成excel表 我的想法 找开发要sq ...

  6. 附录B——MySQL样例表

    vendors表: 储存销售产品的供应商信息,每个供应商在这个表中有一个记录,供应商ID(vend_id)列用来匹配产品和供应商. 列名 vend_id vend_name vend_address ...

  7. Mediawiki PlantUML Graphviz 图片 中文 乱码

    安装Mediawiki 的  PlantUML  Graphviz   插件后,生成图片时,中文成乱码问题. 环境:Ubuntu 16.04 MediaWiki 1.31.1 PHP 7.0.32-0 ...

  8. snmpd 服务安装和配置(转载)

    snmp rpm包安装步骤 https://blog.csdn.net/macrothunder/article/details/50394566 rpm包位置: http://rpm.pbone.n ...

  9. iOS 12 tabbar 从二级页面返回时,出现跳动解决办法

    APP push一个界面,返回的时候,tabBar上的图标和文字出现一个从上往下的神奇动画 经过测试发现,如果使用系统OS12.1 UINavigationController + UITabBarC ...

  10. Google SketchUp Cookbook: (Chapter 1) Making Multiple Copies

    软件环境 SketchUp Pro 2018 参考书籍 Google SketchUp Cookbook http://shop.oreilly.com/product/9780596155100.d ...