Three.js教程:顶点索引复用顶点数据

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

顶点索引复用顶点数据

通过几何体BufferGeometry的顶点索引属性BufferGeometry.index可以设置几何体顶点索引数据,如果你有WebGL基础很容易理解顶点索引的概念,如果没有也没有关系,下面会通过一个简单的例子形象说明。

比如绘制一个矩形网格模型,至少需要两个三角形拼接而成,两个三角形,每个三角形有三个顶点,也就是说需要定义6个顶点位置数据。对于矩形网格模型而言,两个三角形有两个顶点位置是重合的。也就是说可以重复的位置可以定义一次,然后通过通过顶点数组的索引值获取这些顶点位置数据。

不使用顶点索引

下面通过几何体六个顶点定义了两个三角形,几何体的顶点位置数据、顶点法向量数据都是6个。

var geometry = new THREE.BufferGeometry(); //声明一个空几何体对象
//类型数组创建顶点位置position数据
var vertices = new Float32Array([
  0, 0, 0, //顶点1坐标
  80, 0, 0, //顶点2坐标
  80, 80, 0, //顶点3坐标

  0, 0, 0, //顶点4坐标   和顶点1位置相同
  80, 80, 0, //顶点5坐标  和顶点3位置相同
  0, 80, 0, //顶点6坐标
]);
// 创建属性缓冲区对象
var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组
// 设置几何体attributes属性的位置position属性
geometry.attributes.position = attribue
var normals = new Float32Array([
  0, 0, 1, //顶点1法向量
  0, 0, 1, //顶点2法向量
  0, 0, 1, //顶点3法向量

  0, 0, 1, //顶点4法向量
  0, 0, 1, //顶点5法向量
  0, 0, 1, //顶点6法向量
]);
// 设置几何体attributes属性的位置normal属性
geometry.attributes.normal = new THREE.BufferAttribute(normals, 3); //3个为一组,表示一个顶点的xyz坐标

顶点索引.index

下面代码通过几何体BufferGeometry的顶点索引BufferGeometry.index定义了一个矩形。通过顶点索引组织网格模型三角形的绘制,因为矩形的两个三角形有两个顶点位置重复,所以顶点位置数据、顶点法向量数据都只需要定义4个就可以。

var geometry = new THREE.BufferGeometry(); //声明一个空几何体对象
//类型数组创建顶点位置position数据
var vertices = new Float32Array([
  0, 0, 0, //顶点1坐标
  80, 0, 0, //顶点2坐标
  80, 80, 0, //顶点3坐标
  0, 80, 0, //顶点4坐标
]);
// 创建属性缓冲区对象
var attribue = new THREE.BufferAttribute(vertices, 3); //3个为一组
// 设置几何体attributes属性的位置position属性
geometry.attributes.position = attribue
var normals = new Float32Array([
  0, 0, 1, //顶点1法向量
  0, 0, 1, //顶点2法向量
  0, 0, 1, //顶点3法向量
  0, 0, 1, //顶点4法向量
]);
// 设置几何体attributes属性的位置normal属性
geometry.attributes.normal = new THREE.BufferAttribute(normals, 3); //3个为一组,表示一个顶点的xyz坐标

通过顶点索引组织顶点数据,顶点索引数组indexes通过索引值指向顶点位置geometry.attributes.position、顶点法向量geometry.attributes.normal中顶面数组。

// Uint16Array类型数组创建顶点索引数据
var indexes = new Uint16Array([
  // 0对应第1个顶点位置数据、第1个顶点法向量数据
  // 1对应第2个顶点位置数据、第2个顶点法向量数据
  // 索引值3个为一组,表示一个三角形的3个顶点
  0, 1, 2,
  0, 2, 3,
])
// 索引数据赋值给几何体的index属性
geometry.index = new THREE.BufferAttribute(indexes, 1); //1个为一组

创建顶点索引数组的时候,可以根据顶点的数量选择类型数组Uint8ArrayUint16ArrayUint32Array。对于顶点索引而言选择整型类型数组,对于非索引的顶点数据,需要使用浮点类型数组Float32Array等。

类型数组位数字节类型描述C语言等价类型
Int8Array81有符号8位整型int8_t
Uint8Array81无符号8位整型uint8_t
Int16Array162有符号16位整型int16_t
Uint16Array162无符号16位整型int16_t
Int32Array324有符号32位整型int32_t
Uint32Array324无符号32位整型uint32_t
Float32Array324单精度(32位)浮点数float
Float64Array648双精度(64位)浮点数double

BufferGeometry总结

3D建模学习工作室

上一篇:Three.js教程:顶点法向量数据光照计算 (mvrlink.com)

下一篇:Three.js教程:设置Geometry顶点位置、顶点颜色数据 (mvrlink.com)

 

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

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

相关文章

如何建立Linux与git的连接?

文章目录 建立连接三板斧: 本文以Xshell为案例进行与git的连接! 建立连接三板斧: add , commit ,push Linux与git远程连接的方法: 1.设置全局的用户名和邮箱 git config – global user.name “你的用户名” git config – glo…

JMeter学习(一)工具简单介绍

一、JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务…

gpt国内怎么用-gpt国内版免费下载使用

gpt免费使用 GPT (Generative Pre-trained Transformer) 是一种非常强大的语言模型,它是由 OpenAI 开发的,用于自然语言处理和生成。GPT 可以生成高质量、流畅、自然的文本,帮助用户实现更加高效的写作和沟通。现在,GPT 免费使用…

Cookie客户端会话技术

1. Cookie基本使用 过程: 当浏览器发出请求1给服务器端A时,A Servlet就会创建一个cookie对象数据,A在做响应时,就会发送给浏览器,浏览器就把cookie保存在内存之中; 当浏览器在同一次会话中,再次…

Spring第三方资源配置管理

Spring第三方资源配置管理 1. 管理DataSource连接池对象1.1 管理Druid连接池【重点】1.2 管理c3p0连接池 2. 加载properties属性文件【重点】2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 说明:以管理DataSource连接池对象为例讲解第三方资源配置…

RocketMQ 5.1 版本 NameServer 路由管理

文章目录 1. 路由管理核心组件介绍2. RouteInfoManager 路由表3. 路由管理3.1 注册 Broker3.2 注销 Broker3.3 拼凑 TopicRouteData 此文章基于 RocketMQ 5.1 版本进行分析,与 4.x 版本相比此文章分析的部分源码有很大的区别 1. 路由管理核心组件介绍 路由管理是指…

又一次503 service unavailable处理

出现了:503 service unavailable 1)查看系统日志 通过事件查看器,查看iis的日志,如下: 在错误信息中提示是 应用程序池提供服务的进程中出现错误。 其他警告也可通过日志目录查看 C:\inetpub\ 出现上述问题的可能是&#xf…

树形结构——JAVA实现

1、树定义和基本术语 节点 package com.young.tree;/*** <p>* Title:树节点&#xff1a;二叉链表结构* </p>** Author: yangyongbing* Date: 2023-04-18 13:25* version: v1.0*/ public class Node<T> {public Node<T> lChild;private T data;public…

CASP15 蛋白质结构域 Domain 的定义和分类

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130379447 在CASP中&#xff0c;蛋白质结构域(Domain)的类别&#xff0c;包括 FM、FM/TBM、TBM-easy、TBM-hard、not evaluated 等5个类…

25从零开始学Java之数组扩容与数组拷贝的实现过程与原理分析

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了数组的创建、初始化及遍历方式&#xff0c;这些是我们学…

Cookies和Session案例-注册

1. 注册功能改进 1.1 service 将之前的注册案例的代码进行优化&#xff0c;将获取sqlsession工厂对象、获取sqlsession、获取mapper等操作从servlet中分离出来转变为三层架构的形式 在service目录下创建UserService public class UserService {SqlSessionFactory sqlSessionFa…

办公室组网

1.办公网络组网中,汇聚交换机和接入交换机你会做哪些配置? 接入交换机上配置: (1)VLAN配置:由题意得办公网络中有两个部门,使用VLAN技术将每个部门划入一个局域网中,如部门1属于VLAN 10,部门2属于VLAN20.该网络中还需要额外创建一个VLAN用于管理网络,如VLAN30。在接入…

一文了解国外AIGC头部产品

AIGC是指通过人工智能技术生成的内容&#xff0c;包括文字、图片、音频和视频等。AIGC技术可以基于大量的数据和算法&#xff0c;自动地生成各种类型的内容&#xff0c;可以用于新闻报道、广告宣传、文学创作、游戏设计等各个领域。AIGC技术的优点在于可以大大提高内容生产的效…

GD32F303RCT6开发笔记(一)—— macos环境搭建

macOS vscodegccpyocd环境搭建 1、vscode/arm-none-eabi-/pyocd 安装可百度。 2、pyocd 安装完成后&#xff0c;连接st-link 输入命令后显示如下&#xff0c;说明连接成功。 3、输入命令 pyocd pack find GD32F303RC4、如果没有安装GD32F303RC包 使用命令安装 pyocd pack …

【Vue 基础】vue-cli初始化项目及相关说明

目录 1. 创建项目 2. 项目文件介绍 3. 项目的其它配置 3.1 项目运行时&#xff0c;让浏览器自动打开 3.2 关闭eslint校验功能 3.3 src文件夹简写方法 1. 创建项目 vue create 项目名 2. 项目文件介绍 创建好的项目中包含如下文件&#xff1a; &#xff08;1&#xff09…

基于显扬科技自主研发3D机器视觉HY-M5在易拉罐包装检测的应用

行业现状&#xff1a; 易拉罐包装行业发展迅速&#xff0c;是中国食品工业的重要组成部分。近年来&#xff0c;随着经济水平的提高和生活方式变化&#xff0c;各类预包装食品需求剧增&#xff0c;碳酸饮料和啤酒等饮料消费大幅增加&#xff0c;直接带动易拉罐包装行业高速发展…

方案解析丨数字人主播如何成为电商直播新标配

浙江省政府办公厅近日印发《关于进一步扩大消费促进高质量发展若干举措》支持电子商务直播发展。抢抓电子商务直播快速发展机遇&#xff0c;发展数字人虚拟主播、元宇宙新消费场景等新业态新模式。 随着电商直播快速发展&#xff0c;企业怎么高效地实现引流获客&#xff0c;成为…

【计算机组成原理】数据的表示和运算·进位计数制

&#x1f6a9; 本文已收录至专栏&#xff1a;计算机基础 我们可以通过显示屏看到各种形式的数据信息&#xff0c;但数据是如何在计算机中表示呢&#xff1f;运算器又是如何实现数据的算数、逻辑运算&#xff1f; 十进制数是最适合我们日常使用的一种计数方式&#xff0c;除此之…

随手记录:Livox 时间戳修改为ROS时间戳

参考与前言 传感器类型&#xff1a;Livox-Mid70 参考链接&#xff1a;Ubuntu20.04系统安装Livox ROS Driver 官方驱动&#xff1a;https://github.com/Livox-SDK/livox_ros_driver 碎碎念&#xff1a;之所以要改成rostime主要是 提取pcd的时候发现这个timestamp 300.xxx 打…

我那张被问爆了的漫画头像确实有点东西

不得不说&#xff0c;这个照片变漫画有点东西啊&#xff01;不知道姐妹们有没有发现❗️最近漫画人像它又火起来了&#xff0c;基本上在dy等各大社交软件上&#xff0c;特别是朋友圈已经是刷屏了&#xff5e;随便一张照片经过渲染之后秒变动漫风格照&#xff0c;我就马不停蹄就…