从Unity到Three.js(动态创建mesh)

js var let const基础

手动创建模型mesh功能测试,此功能跑通就可以实现很多功能了,如点云转mesh,磨碎效果等等。

import * as THREE from 'three';const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);//只使用顶点数据创建mesh
//创建顶点数据
//猜测是直接在顶点数据中定义好三角形索引顺序。
const vertices = new Float32Array([0.0, 0.0, 1.0,1.0, 0.0, 1.0,1.0, 1.0, 1.0,0.0, 1.0, 1.0,0.0, 0.0, 1.0,1.0, 1.0, 1.0
]);// itemSize = 3 因为每个顶点都是一个三元组。
// geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
// const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
const mesh = createMesh(vertices, 0x0000FF, testCallback);// new THREE.Mesh( geometry, material );
scene.add(mesh);
mesh.position.x -= 10;//使用顶点+索引+法向量创建mesh
const vertices2 = new Float32Array([0.0, 0.0, 1.0,1.0, 0.0, 1.0,1.0, 1.0, 1.0,0.0, 1.0, 1.0,
]);
const verticesIndex = new Uint16Array([0, 1, 2,3, 0, 2,
]);const normals = new Float32Array([0, 0, 1, //顶点1法向量0, 0, 1, //顶点2法向量0, 0, 1, //顶点3法向量0, 0, 1, //顶点4法向量
]);
const mesh2 = createMeshSetIndex(vertices2, 0x00FF00, verticesIndex, normals);
mesh2.position.x
scene.add(mesh2);
mesh2.position.x += 10;function animate() {requestAnimationFrame(animate);renderer.render(scene, camera);
}animate();
camera.position.z = 50;function testCallback(msg) {console.log(msg);console.log("测试方法作为参数使用,对应c#委托事件功能");
}//====================================================创建mesh方法封装==========================================
// 函数定义,参数不需要指定类型,返回值也不需要定义
//传入的顶点数组中定义好顶点索引
function createMesh(verticesArg, colorArg, callback) {let geometryTemp = new THREE.BufferGeometry();geometryTemp.setAttribute('position', new THREE.BufferAttribute(verticesArg, 3));const material = new THREE.MeshBasicMaterial({ color: colorArg });const mesh = new THREE.Mesh(geometryTemp, material);if (callback != null) {callback("mesh创建完毕");}return mesh;
}
//依据顶点、顶点索引、法向量创建mesh
function createMeshSetIndex(verticesArg, colorArg, indexs, normals) {let geometryTemp = new THREE.BufferGeometry();let ba = new THREE.BufferAttribute(verticesArg, 3);//配置顶点geometryTemp.setAttribute('position', ba);//配置法向量geometryTemp.attributes.normal = new THREE.BufferAttribute(normals, 3);//配置顶点索引geometryTemp.index = new THREE.BufferAttribute(indexs, 1);const material = new THREE.MeshBasicMaterial({ color: colorArg });const mesh = new THREE.Mesh(geometryTemp, material);return mesh;
}

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

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

相关文章

Python学习路线图

防止忘记,温故知新 进阶路线

使用手持激光三维扫描仪进行建筑立面测量需要注意些什么?

在进行采集作业前,首先需对作业区域进行实地勘察。对于某些有设计感、结构较为特殊的建筑物,若不提前对作业区域勘探,直接进行采集工作,往往会漏掉建筑物的某些结构特征,造成返工。对于建筑物结构相对简单的场景&#…

LLM(2)之指令提示词(Prompt)基础教学

LLM(2)之指令提示词 Author:Once Day Date:2024年2月15日 全系列专栏请查看:LLM实践成长_Once_day的博客-CSDN博客 参考文章: 中文完整版全9集ChatGPT提示工程师|AI大神吴恩达教你写提示词ChatGPT Shortcut - 简单易用的 Chat…

WordPress主题YIA移动端文章页的面包屑不显示怎么办?

平时我们一般都会在文章页导航菜单下方显示面包屑,类似于“当前位置:boke112百科 WordPress 正文”。平时用浏览器调试站点的时候,在Edge浏览器的“切换设备仿真”中,不管是选择什么设备都会显示面包屑。具体如下图所示&#xf…

数据库数据加密的 4 种常见思路的对比

应用层加解密方案数据库前置处理方案磁盘存取环节:透明数据加密DB 后置处理 最近由于工作需要,我对欧洲的通用数据保护条例做了调研和学习,其中有非常重要的一点,也是常识性的一条,就是需要对用户的个人隐私数据做好加…

【Java程序设计】【C00252】基于Springboot的实习管理系统(有论文)

基于Springboot的实习管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的实习管理系统 本系统分为前台功能模块、管理员功能模块、教师功能模块、学生功能模块以及实习单位功能模块。 前台功能模块&#xf…

MySQL篇之索引创建与失效

一、索引创建的原则 1). 针对于数据量较大,且查询比较频繁的表建立索引。 2). 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。 3). 尽量选择区分度高的列作…

Vue-router中使用pinia,const xxxStore = usexxxStore()报错

“getActivePinia()” was called but there was no active Pinia. Are you trying to use a store before calling “app.use(pinia)”? See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help. This will fail in production. at useStore (pin…

达梦数据库——数据迁移sqlserver-dm报错问题整理

报错情况一:Sql server迁移达梦连接报错’驱动程序无法通过使用安全套接字Q层(SSL)加密与SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferencesITLS127‘ 原因:历史版本的SOL SERVER服务…

D3846——三极管驱动,内置差动电流检测放大器, 共模输入范围宽,大电流输出,工作 频率可高达500KHz

D3846是一块电流模式的PWM控制电路 主要特点: 。自动前馈补偿 。可编程控制的逐个脉冲限流功能 。推挽输出结构^下自动对称校正 。负载响应特性好 。可并联运行,适用于模块系统内置差动电流检测放大器,共模输入范围宽双脉冲抑制功能 。大电流输出&#…

代码随想录算法训练营第44天(动态规划06 ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

动态规划part06 完全背包518. 零钱兑换 II解题思路 377. 组合总和 Ⅳ解题思路 详细布置 力扣上没有纯粹的完全背包的题目,所以大家看本篇了解一下 完全背包的理论 后面的两道题目,都是完全背包的应用,做做感受一下 完全背包 视频讲解&#xf…

bat脚本 创建计划任务 一分钟设置ntp同步周期为60s

要在Windows中使用批处理脚本(.bat)创建一个计划任务来每分钟同步一次NTP时间,你可以使用schtasks命令来创建计划任务。下面是一个示例脚本,展示了如何创建这样一个计划任务: echo off set "taskNameSyncNTP"…

“挖矿”系列:细说Python、conda 和 pip 之间的关系

继续挖矿,挖“金矿”! 1. Python、conda 和 pip(挖“金矿”工具) Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具,它们各自有不同的作用,但相互之间存在密切的关系: Python&…

《白话C++》第10章 STL和boost,Page67~70 std::auto_ptr

std::auto_ptr可以不经意间转移裸指针控制权 std::auto_ptr持有裸指针的控制权&#xff0c;却可以随随便便看似不经意地转移给另一个auto_ptr: #include <iostream> #include <memory>using namespace std;struct S {int a;void SetA(int a){this->a a;}~S()…

SQL Extractor 数据库修复取证大师-数据库修复专家

SQL Extractor 数据库修复取证大师介绍 SQL Extractor 数据库修复取证大师 功能介绍&#xff1a;SQL Extractor数据库修复取证大师最新版本10.94软件特色:针对勒索病毒加密的SQL 数据库有特殊的修复算法,可匹配用友,金蝶数据库结构关系. 支持7.0、SQL2000、SQL2005、SQL2008、…

ES实战--性能提升

触发冲刷的条件: 1.内存缓冲区已满 2.自上次冲刷后超过了一定时间 3.事务日志达到了一定阀值 对名为get-together的Elasticsearch索引执行优化操作&#xff0c;将索引中的数据段&#xff08;segments&#xff09;合并到指定的数量1 GET /get-together/_optimize?max_num_segm…

【微信小程序】小程序的双线程架构,为什么要设计成双线程的

微信小程序是双线程的&#xff0c;有渲染层和逻辑层两个执行环境&#xff0c;渲染层负责页面的渲染和样式&#xff0c;逻辑层负责小程序的逻辑和数据处理。 渲染线程&#xff1a;负责渲染界面&#xff0c;包括解析 wxml&#xff0c;wxss&#xff0c;样式计算&#xff0c;布局排…

可视化低代码表单设计器

JNPF 表单设计器是一款在线可视化表单建模工具&#xff0c;基于VueSpringboot技术开发&#xff0c;具有组件丰富、操作简单、所见即所得等特性&#xff0c;既能够设计普通的数据录入表单&#xff0c;也能够配合流程设计出各类审批流转表单。 应用地址&#xff1a;https://www.j…

Python函数——函数介绍

一、引言 在Python编程中&#xff0c;函数是构建高效代码的关键。通过创建可重用的代码块&#xff0c;我们可以使程序更加清晰、易读且易于维护。在本文中&#xff0c;我们将深入了解Python函数的基本概念及其特性。 二、Python函数的基本概念 函数是一段具有特定功能的代码块…

ForkJoin 的使用以及原理

原理 Fork-Join 是一种并行计算模式&#xff0c;它通常用于解决递归式或者分治式的问题。其原理基于将一个大的任务划分成若干个小任务&#xff0c;然后并行地执行这些小任务&#xff0c;最后将它们的结果合并起来得到最终的结果。 具体来说&#xff0c;Fork-Join 模式包含两个…