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

news2025/6/17 19:27:04

推荐:将 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); //点对象添加到场景中

线模型Line

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

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

几何体本质

查看下面一段代码,你可以看出来立方体网格模型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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Reactor设计模式

一、Reactor设计模式 1、什么是Reactor设计模式? Reactor模式是高性能I/O设计中,常用的设计模式。其中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上,一旦有I/O事件到来或是准备就绪…

C++ 继承:概念定义、对象的赋值转换、继承作用域及派生类的默认成员函数

目录 一. 继承的概念和定义 1.1 继承的概念 1.2 继承的定义格式 1.3 继承关系和访问限定符 二. 基类和派生类对象的之间的赋值转换 三. 继承体系中的作用域 四. 派生类的默认成员函数 4.1 构造函数 4.2 拷贝构造函数 4.3 赋值运算符重载函数 4.4 析构函数 4.5 取地…

linux服务器禁止ping命令,linux服务器禁ping如何解除

linux服务器禁止ping命令,linux服务器禁ping如何解除 我是艾西,在我们搭建网站或做某些程序时,不少人会问禁ping是什么意思,怎么操作的对于业务有哪些好处等,今天艾西一次给你们说清楚。 禁PING的意思是:不…

相对全面的四足机器人驱动规划MATLAB和Simulink实现方式(足端摆线规划,Hopf-CPG,Kimura-CPG)

许久没更新四足机器人相关的博客文章,由于去年一整年都在干各种各样的~活,终于把硕士毕业论文给写好,才有点时间更新自己的所学和感悟。步态规划和足端规划只是为了在运动学层面获取四足机器人各关节的期望角位移和速度信号,再由底…

力扣---两数相加(c语言版)

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:记录一个力扣写了好久的一个问题 金句分享: ✨在心里种花,人…

uniapp 实现可滑动顶部选项卡(菜单)

利用和实现可滑动顶部选项卡,实现的切换效果类似下图这种(顶部tab下方swiper):(代码具体效果只是实现可滑动顶部选项卡的功能,具体样式可自定义修改) 一、分步骤展示 构建顶部tab选项按钮步骤…

00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从12k涨到了18k,对于工作都还没两年的我来说,还是比较满意的,毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王,感觉自己年轻&#xff…

[论文阅读笔记22]Identity-Quantity Harmonic Multi-Object Tracking

这是一篇优化匹配策略的文章, 通过密度估计的辅助, 估计一个边界框内有多少目标, 从而恢复遮挡的轨迹. 发表在IEEE TIP 2022. 论文地址: https://ieeexplore.ieee.org/abstract/document/9725267/ 0. Abstract 通常的MOT算法在匹配阶段时, 都是通过线性指派问题求解, 即会计算…

最近骗子有点多

就这几天,也就是这几天,我听到身边有两个人的家里人因为某某事情被骗。第一个是我旁边的同事,说是家里的老人被骗了好十几万,说是有一个高收益的旅行团,交钱了就免费旅游,旅游也是真去了,而且每…

一文弄懂访问者模式

关于设计模式,我们得结合生活中的案例来学习;最近我在网上也看了不少文章,今天想跟大家分享一下关于访问者模式的一些知识,先来看一个简单的案例吧。 相信大家都去过医院,看完病,医生都会给我们开一个处方…

数据结构:算法的时间复杂度和空间复杂度

Hello各位老铁们!我们又见面了,大家最近有没有坚持学习和敲代码呢?在这里小编就要督促一下大家了,我们每一天都敲一两道题,这样子久而久之的坚持下去你就会发现你已经在不知不觉的过程中变成了一个大佬。敲代码使我们快…

unity蒙板测试例子——传送门

返回目录 Unity蒙板测试例子——传送门一、例子介绍 大家好,我是阿赵。 蒙板测试(Stencil Test)是渲染管线的合并输出环节里面的一种测试,和透明度测试或者深度测试一样,它实际上也是控制颜色值是否应该显示出来的一种…

natapp + nginx 实现内网穿透

环境是我本地的win10 第一步:下载nginx压缩包并解压(这个自行百度吧) 第二步: 修改nginx的配置文件: 在最下方添加: #testserver {listen 8081;#你要映射的端口server_name localhost; #使用本地IPlocation / {proxy_pass…

面试官:如何搭建Prometheus和Grafana对业务指标进行监控?

Prometheus和Grafana都是非常流行的开源监控工具,可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。 下面对Prometheus和Grafana进行简要介绍: Prometheus Prometheus是一款开源、云原生的系统和服务监控工具,它采用p…

戴尔惠普联想笔记本性价比(戴尔和联想笔记本性价比)

联想。 联想做笔记本时间长,售后、质量都不错,追求稳定,性价比合理,长久使用考虑,不会有太大笔记本毛病。 联想1984就开始进入笔记本电脑行业,由中科院投资,后来收购了IBM之后,笔记…

第13届蓝桥杯省赛真题剖析-2022年4月17日Scratch编程初中级组

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第122讲。 第13届蓝桥杯省赛举办了两次,这是2022年4月17日举行的第一次省赛,比赛仍然采取线上形…

Air32F103CBT6|CCT6|KEIL-uVsion5|本地编译|STClink|(6)、Air32F103编译下载

目录 一、环境搭建 准备工作 安装支持包 二、新建工程 添加外设库支持 测试代码 三、下载烧录 一、环境搭建 准备工作 安装MDK5,具体方法请百度,安装后需要激活才能编译大文件 下载安装AIR32F103的SDK:luatos-soc-air32f103: Air32f…

FL Studio2023中文版本水果编曲工具

编曲、剪辑、录音、混音,23余年的技术积淀和实力研发,FL Studio 已经从电音领域破圈,成功蜕变为全球瞩目的全能DAW,把电脑变成全功能音乐工作室,接下来我们会为您一一展示FL Studio 21也叫做水果音乐编曲软件&#xff…

Chat GPT太强,多种玩法曝光

1、模拟面试、考试,备考等,以面试为例,让它扮演一个角色 先让它扮演互联网行业的商业分析师 2、写各种发言稿、文章、报告,给它你的明确要求和目标,以发言稿为例,输入继续,可以持续优化 3、…

报名截至在即 | “泰迪杯”挑战赛最后一场赛前指导直播!

为推广我国高校数据挖掘实践教学,培养学生数据挖掘的应用和创新能力,增加校企交流合作和信息共享,提升我国高校的教学质量和企业的竞争能力,第十一届“泰迪杯”数据挖掘挑战赛(以下简称挑战赛)已于2023年3月…