首页 > 其他分享 >Three.js教程:顶点位置数据解析渲染

Three.js教程:顶点位置数据解析渲染

时间:2023-04-21 15:49:06浏览次数:48  
标签:教程 网格 几何体 Three new var 顶点 js THREE

推荐:将NSDT场景编辑器加入你3D工具链
其他工具系列:NSDT简石数字孪生

顶点位置数据解析渲染

如果你没有WebGL基础,可以先不用记忆每个的threejs 具体内容,有一个大致印象即可,学习本节课的重点是建立顶点的概念。如果你建立了顶点的概念,那么对于你深入理解学习Three.js很有帮助。

如果你已经有WebGL基础或者说图形学基础,说明你肯定有顶点的概念,本节课重点可以放在学习threejs的API使用细节,threejs引擎是如何封装webgl的。

JavaScript类型化数组

本节课会用到javascript的类型化数组,你如果不了解,可查看MDN关于javascript类型化数组的介绍,也可以查看文章类型化数组。

自定义几何体

你可以直接调用BoxGeometry直接创建一个立方体几何体,调用SphereGeometry创建一个球体几何体。不过为了大家更好的建立顶点概念,通过下面的代码自定义了一个几何体,通过网格模型可以渲染出来两个三角形效果。

三角形模式

下面代码通过Threejs引擎的BufferGeometry和BufferAttribute两个API自定义了一个具有六个顶点数据的几何体。

var geometry = new THREE.BufferGeometry(); //创建一个Buffer类型几何体对象
//类型数组创建顶点数据
var vertices = new Float32Array([
  0, 0, 0, //顶点1坐标
  50, 0, 0, //顶点2坐标
  0, 100, 0, //顶点3坐标
  0, 0, 10, //顶点4坐标
  0, 0, 100, //顶点5坐标
  50, 0, 10, //顶点6坐标
]);
// 创建属性缓冲区对象
var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组,表示一个顶点的xyz坐标
// 设置几何体attributes属性的位置属性
geometry.attributes.position = attribue;

通过自定义的几何体创建一个网格模型。对于网格模型而言,几何体所有顶点每三个顶点为一组可以确定一个三角形,几何体是六个顶点,也就是说可以绘制两个三角形,当然了你可以自己再增加三个顶点位置坐标数据,测试下渲染效果。

// 三角面(网格)渲染模式
var material = new THREE.MeshBasicMaterial({
  color: 0x0000ff, //三角面颜色
  side: THREE.DoubleSide //两面可见
}); //材质对象
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh

点模型Points

为了更好的理解几何体是由顶点构成的,可以把几何体geometry作为点模型Points而不是网格模型Mesh的参数,你会发现上面的六个点坐标会渲染为六个方形的点区域,可以用下面代码代替上面的网格模型部分代码测试效果。

对于网格模型Mesh而言,几何体geometry三个顶点为一组渲染出来一个三角形,对于点模型Points而言,几何体的每个顶点对应位置都会渲染出来一个方形的点区域,该区域可以设置大小。

// 点渲染模式
var material = new THREE.PointsMaterial({
  color: 0xff0000,
  size: 10.0 //点对象像素尺寸
}); //材质对象
var points = new THREE.Points(geometry, material); //点模型对象
scene.add(points); //点对象添加到场景中
point

线模型Line

上面两个案例适用点模型和网格模型去渲染几何体的顶点数据,下面代码是把几何体作为线模型Line参数,你会发现渲染效果是从第一个点开始到最后一个点,依次连成线。

// 线条渲染模式
var material=new THREE.LineBasicMaterial({
    color:0xff0000 //线条颜色
});//材质对象
var line=new THREE.Line(geometry,material);//线条模型对象
scene.add(line);//线条对象添加到场景中
point

几何体本质

查看下面一段代码,你可以看出来立方体网格模型Mesh是由立方体几何体geometry和材质material两部分构成,立方体几何体BoxGeometry本质上就是一系列的顶点构成,只是Threejs的APIBoxGeometry把顶点的生成细节封装了,用户可以直接使用。比如一个立方体网格模型,有6个面,每个面至少两个三角形拼成一个矩形平面,每个三角形三个顶点构成,对于球体网格模型而言,同样是通过三角形拼出来一个球面,三角形数量越多,网格模型表面越接近于球形。

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
var material = new THREE.MeshLambertMaterial({
  color: 0x0000ff
}); //材质对象Material
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
3D建模学习工作室  

上一篇:Three.js教程:材质效果 (mvrlink.com)

下一篇:Three.js教程:顶点颜色数据插值计算 (mvrlink.com)

标签:教程,网格,几何体,Three,new,var,顶点,js,THREE
From: https://www.cnblogs.com/mvrlink/p/17340576.html

相关文章

  • Node.js
     nodejs到底是什么?nodejs是一个开源的,跨平台的JavaScript运行环境;是JavaScript运行的平台,类似于浏览器。不是框架,不是库,也不是语言。通俗来说,就是一款应用程序,它可以运行JavaScript。运行平台:一般就是指一个代码的运行环境;作用是:开发者可以使用指定的编程语言,基于某个环境......
  • JS的对象比较,JS的数组比较
    1数组对比一、toString()当两个数组元素类型相同,顺序相同时,直接判断是否相等,结果不相等;转化为字符串后,结果相等[1,2,3].toString()===[1,2,3].toString();//true[1,2,3].toString()===['1',2,3].toString();//true二、join()[1,2,3,'4'].join()===[1,2,3,......
  • WCF教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Windows通讯开发平台(WindowsCommunicationFoundation,简称WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows通讯开发平台。整合了原有的windows通讯的.netRemoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布......
  • JMeter入门教程(6) --脚本添加
    文章目录1.添加线程组2.添加HTTPCookie管理器3.添加HTTP请求默认值4.添加HTTP请求5.添加查看结果树1.添加线程组1.创建JMeter测试计划的第一步就是添加线程组测试元件。线程组会告诉JMeter需要模拟的并发用户数,以及并发用户发送请求的频率和数目。要添加线程组,首先选中测试计划,......
  • JMeter入门教程(11) --关联
    文章目录1.任务背景2.任务目标3.任务实操1.任务背景当JMeter执行脚本时,伪装成浏览器,然后根据脚本,把当初真的浏览器所发过的内容,再对网站服务器重新发送一遍,JMeter企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给JMeter。2.任务目标掌握掌握JMeter性能测试脚本......
  • JMeter入门教程(2) --Jmeter的下载
    文章目录1.JMeter下载地址3.JMeter常见术语1.JMeter下载地址1.下载地址:https://jmeter.apache.org/download_jmeter.cgi2.点击箭头所指下载完成解压即可3.因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。4.找到我们解压后的JMeter的文件夹如图所示:5.点击bin目......
  • Java入门教程(1)——Java概述
    文章目录1.编程环境1.1开发环境2.2编程工具2.语言特点3.java的发展历程1.编程环境1.1开发环境JDK称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境,一些Java工具和Java的核心类库。2.2编程工具1.Ec......
  • JMeter入门教程(12) --集合点
    文章目录1.任务背景2.任务目标3.任务实操1.任务背景JMeter中集合点是通过定时器SynchronizingTimer来实现的,本篇针对集合点展开详细介绍2.任务目标掌握基于JMeter性能测试脚本开发——集合点3.任务实操添加SynchronizingTimer,右击请求,选择添加>定时器>SynchronizingTimer......
  • JMeter入门教程(8) --检查点
    1.任务背景在JMeter脚本中,检查点是通过断言组件来实现的。断言组件通过获取服务器响应数据,然后根据断言规则去匹配这些响应数据。匹配到看不到任何提醒,没有匹配到则会有提示信息2.任务目标掌握基于JMeter性能测试脚本开发——检查点3.任务实操3.1添加响应断言右击取样器。选择添加......
  • JMeter入门教程(16)——非GUI运行
    文章目录1.任务背景2.任务目标3.任务实操1.任务背景JMeter的场景运行方式分为两种,一种是GUI(视窗运行,即我们可以看到的运行界面)方式,另一种是非GUI(命令窗口)方式运行,在Windows中我们可以在命令窗口运行。本篇我们来介绍以下非GUI运行方式:2.任务目标掌握JMeter性能测试工具——非GUI......