从Unity到Three.js(模型文件加载)

模型加载功能探索,用blender导出了个glb格式的cube进行的测试。
初接触js语法,回调注册的地方直接使用匿名函数总感觉脑子跟不上,反应不过来,就把加载后的回调简单封装了下,
官方文档是直接使用的匿名函数。
另外看官方文档对模型加载功能描述,感觉实战中会遇到很多坑,等之后遇到再详细研究,这次只记录基础功能。

import * as THREE from 'three'
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
// 定义相关变量
let scene,camera,renderer
let hesLight,dirLight,sportLight // 初始化场景
scene = new THREE.Scene()
scene.background = new THREE.Color("rgb(0, 50, 150)");//设置背景色
//设置灯光,不设置所有模型都是黑色的,灯光详细设置之后研究
hesLight = new THREE.HemisphereLight(0xffffff,0x444444)
hesLight.intensity = 0.6
scene.add(hesLight)
dirLight = new THREE.DirectionalLight()
dirLight.position.set(5,5,5)
scene.add(dirLight)
sportLight = new THREE.SpotLight(0xffffff)
sportLight.position.set(0,10,10)
scene.add(sportLight)// 加载模型  模型在工程根目录
loadModelGLB('../testmodel.glb',loadModelSucceed,loadModelFail);// 初始化相机 设置相机位置,让模型在相机视野范围内
camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,100)
camera.position.set(0,3,10)//设置相机位置
// 初始化渲染器
renderer = new THREE.WebGLRenderer({antialias:true})
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setSize(window.innerWidth,window.innerHeight) 
document.body.appendChild(renderer.domElement) //个人理解,类似Unity的Update,但不完全相等,不调用此函数会导致模型不显示
//更像是渲染层的Update,不知道和unity shader中的 顶点、片元着色器函数是否一样
update();//设置拖拽窗口改变大小时,画面自适应更改分辨率
window.addEventListener('resize',function() { camera.aspect = window.innerWidth / window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth,window.innerHeight)
})function update() {requestAnimationFrame(update);renderer.render(scene,camera);
}//==============================加载模型================================================
//加载GLB模型,传入路径、加载完成的回调、加载失败的回调
function loadModelGLB(path,succeed,fail)
{const loader =new GLTFLoader();loader.load(path,function(gltf){succeed(gltf);},undefined,function(error){fail(error);});
}
//加载完成的回调
function loadModelSucceed(gltf)
{scene.add(gltf.scene);
}
//加载失败回调
function loadModelFail(msg)
{console.error(msg);
}
//==============================加载模型 END================================================

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

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

相关文章

带你了解软件系统架构的演变详解

在这个数字时代,我们身边无处不在的软件系统扮演着无比重要的角色。你曾想过背后那复杂的系统是如何演变而来的吗?本文将深入浅出,以小白的视角,描绘软件系统架构的绚丽蜕变历程,让我们一同踏上这场感性而技术的冒险之…

Peter算法小课堂—背包问题

我们已经学过好久好久的动态规划了,动态规划_Peter Pan was right的博客-CSDN博客 那么,我用一张图片来概括一下背包问题。 大家有可能比较疑惑,优化决策怎么优化呢?答案是,滚动数组,一个神秘而简单的东西…

刘谦龙年春晚魔术模拟

守岁共此时 代码 直接贴代码了,异常处理有点问题,正常流程能跑通 package com.yuhan.snginx.util.chunwan;import java.util.*;/*** author yuhan* since 2024/02/10*/ public class CWMS {static String[] num {"A", "2", &quo…

更换商品图片日期JSON格式报错 - 序列化与反序列化日期格式设置

报错信息 msg: “服务端异常,请联系管理员JSON parse error: Cannot deserialize value of type java.util.Date from String “2023-11-13 13:13:35”: not a valid representation (error: Failed to parse Date value ‘2023-11-13 13:13:35’: Cannot parse da…

点云标注工具

目录 3d手势识别 c 3d关键点,Bounding Box Labels Rectangle Labels KITTI 3D Ground Truth Annotator c标注工具 3d手势识别 GitHub - 99xtaewoo/Automated-Hand-3D-pose-annotation-Tool: Automated Hand 3D pose annotation Tool c 3d关键点,Bou…

bcdedit /store 填什么,Windows11的BCD文件在哪里?

Windows11为EFI引导,bcd文件在 EFI分区的 \EFI\Microsoft\Boot\BCD 可以选择挂载EFI分区,或者使用如下方式,该路径可充当盘符使用。 例 bcdedit /store Z:\EFI\Microsoft\Boot\BCD /enum /v

【LeetCode每日一题】二维前缀和基本概念与案例

二维前缀和 根据某个块块 的 左上角坐标,和右下角坐标 求出 块块的累加和。 304. 二维区域和检索 - 矩阵不可变 /*** param {number[][]} matrix*/ var NumMatrix function(matrix) {let row matrix.length;let col matrix[0].length;// 初始化一个二维数组&am…

2024/2/11

运算符 1、选择题 1.1、若有以下程序 main() { char a1,b2; printf("%c,",b); printf("%d\n",b-a); } 程序运行后的输出结果是 C A)3,2 B)50,2 C)2,2 D)2,50 1.2、有以下程序 main() { int a,…

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D , 任务 :宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel, 命名为PlayerInfo 新建Image,作为头像 新建Slider,作为血条 对Panel组件添加一个水…

Day40- 动态规划part08

一、单词拆分 题目一:139. 单词拆分 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以…

基于布隆过滤器的跨平台USB存储设备管控方案

1、前言 U盘作为移动存储设备之一,是我们日常生活中接触最多和最常用的存储介质。正因如此,针对U盘内容的管理也因为使用场景的多样和复杂性,变得难以实现。 我们的设计思路是先通过某些手段对U盘进行病毒,并在查杀完成后对U盘进…

PE 特征码定位修改程序清单 uiAccess

requestedExecutionLevel level"asInvoker" uiAccess"false" 可以修改这一行来启用禁用原程序的盾牌图标,似乎作用不大。以前没事写的一个小玩意,记录一下。 等同于这里的设置: 截图 代码如下: #include …

谷粒商城【成神路】-【7】——库存系统

目录 🧈1.仓库维护 🍟🍟1.1配置网关陆游规则 🍟🍟1.2修改模糊查询 🥞2.仓库库存 🍿3.采购需需求 🍟🍟3.1采购的模糊检索 🍟🍟3.2合并…

system V——进程间通信

上一篇博客中我介绍了system V进程间通信中的内存共享,但是其中还有两 种通信方式:消息队列、和信号量,接下来我将简单介绍一下,消息队列和 信号量以及操作系统是如何看待system V进程间通信的。1. 消息队列 a. 大致介绍 消息队…

4核8G服务器配置性能怎么样?12M带宽配置服务器能干什么?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

职业发展 - 一个专注于嵌入式物联网架构设计的攻城狮(转载)

1 关于我 很高兴大家都关注到我,从而看到这篇简要的介绍,下面有更多的关于我。 我是一个嵌入式架构师,早前从事过智能电网相关的电力设备开发,金融POS机开发,以及eSIM相关的软件开发,现在主要在做嵌入式I…

Linux文本三剑客(1)

文章目录 一、通配符二、find文件查找查找条件处理动作 三、正则表达式四、Linux三剑客之grep实例正则表达式(基于grep)基础正则表达式扩展正则 最常用 五、Linux三剑客之sed语法动作说明实例以行为单位的新增/删除以行为单位的替换与显示数据的搜寻并显…

云原生容器化-3 Dockerfile

1.Dockerfile作用 用户可以使用两种方式构建Docker镜像: 手动方式和Dockerfile自动方式。 [1] 手动方式 运行基础镜像为容器后,根据业务需要进行定制化操作,然后手动通过docker commit命令将容器保存为镜像。 [2] Dockerfile 将依赖的基础镜像和定制化操…

CVE-2012-1823 漏洞复现

CVE-2012-1823 PHP SAPI 与运行模式 首先,介绍一下PHP的运行模式。 下载PHP源码,可以看到其中有个目录叫sapi。sapi在PHP中的作用,类似于一个消息的“传递者”,比如在《Fastcgi协议分析 && PHP-FPM未授权访问漏洞 &…

中年低端中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安

文章大纲 旅途规划来回行程的确定南宁 - 北海 - 湛江轮渡成为了最终最大的不确定性!感谢神州租车气温与游玩地点总体花费 游玩过程出发时间:Day1-1月25日星期四,西安飞南宁路途中:Day2-1月26日星期五,南宁-湛江-住雷州…