Three.js搭建小米SU7三维汽车实战(5)su7登场

汽车模型加载

我们在sktechfab上下载的汽车是glb的文件格式,所以使用gltfLoader进行加载。这里将小车直接加载进来看看效果;
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
....其余代码省略
const gltfLoader = new GLTFLoader();
gltfLoader.load("/src/assets/models/su7.glb", (gltf) => {const model = gltf.scene;scene.add(model);
});

我们会发现小车是黑的,这是因为我们当前场景中并没有光照信息,我们需要为场景添加光照。

无光照时的模型

const ambientLight = new THREE.AmbientLight(0xf7f8fc, 0.2);
scene.add(ambientLight);const directionalLight = new THREE.DirectionalLight(0xf7f8fc, 1);
directionalLight.position.set(0, 5, 0);
scene.add(directionalLight);

添加光照之后小车有了颜色,但是细微观察还缺少了一些效果,比如汽车漆面上的反射效果。

表面反射

我们可以给当前的场景设置环境属性,来为场景中所有的物体添加环境反射,这需要我们准备一张**全景图**

全景图概念

全景图的原理其实很简单,如下图所示,假设我们所处的空间在一个很大的立方体内部,那么全景图就是用六张图片,赋予立方体六个面的纹理,我们在立方体内部观察,每个方向的图片都不一样,这样就有了身临其境的感觉

全景图下的观察效果

一般全景图是由6张图片组成,也可以使用hdr格式的压缩图片,两者都可以实现全景图
本案例中给大家提供的是hdr的全景图,我们使用RGBELoader来进行加载,并且设置环境属性,注意不要设置背景

const texture = new THREE.CubeTextureLoader().setPath('/src/assets/texture/park/').load(['posx.jpg','negx.jpg','posy.jpg','negy.jpg','posz.jpg','negz.jpg',])
// 创建一个纹理加载器, 加载纹理图片
const texture = new RGBELoader().load('/src/assets/hdr/city.hdr', () => {texture.mapping = THREE.EquirectangularReflectionMappingscene.background = texture
})

可以看到我们的油漆表面有了一层反射效果

细心的同学不难发现,我们的小车一部分在地下,这是建模的问题,我们可以在three中进行调整,将平面往下走0.02个单位即可

mesh.position.set(0, -0.02, 0);

我们还可以观察到,和懂车帝官网对比,我们的su7没有在地面上展示出来阴影,接下来我们设置一下阴影效果。

添加阴影

添加阴影需要几个步骤 1. 设置渲染器支持阴影贴图 2. 设置物体支持投射阴影 3. 设置平面能够接受阴影 4. 设置灯光支持投射阴影 5. 设置平面为standard材质 这五个步骤对应的源码为:
renderer.shadowMap.enabled=true

我们的模型是不能直接设置投射阴影的,模型是一棵树的结构,需要遍历到每一个叶子节点,然后设置投射阴影

gltfLoader.load("/src/assets/models/su7.glb", (gltf) => {const model = gltf.scene;model.traverse((mesh) => {if (mesh.isMesh) {mesh.castShadow = true;}});scene.add(model);
});
const geom = new THREE.CircleGeometry(20, 150);
const material = new THREE.MeshStandardMaterial({color: new THREE.Color(0xffffff),side: THREE.DoubleSide,
});
const mesh = new THREE.Mesh(geom, material);
mesh.rotation.x -= (90 * Math.PI) / 180;
mesh.position.set(0, -0.02, 0);
scene.add(mesh);
mesh.receiveShadow=true
directionalLight.castShadow=true

实现效果,我们发现和懂车帝官网的阴影比较起来,第一是颜色不够深,第二是边缘没有进行柔滑,我们很难和懂车帝做的一模一样,只能尽量去模拟这个效果,因为懂车帝官网的效果是用一张图片做的,我们没有这样的图片资源

懂车帝官网效果

提高阴影的质量

阴影本质上其实是一张贴图,贴图的分辨率是最能提高质量的方法 提高之后可以看到阴影更细致了,但是颜色还没有加深

我们可以通过aoMap加深阴影颜色
aoMap叫做环境遮挡贴图,通过设置aoMap,我们可以加深阴影的颜色,这个aoMap我们需要设置在地板上
可以看到阴影的颜色更深了,这是aoMap的功劳

const floorTexture = new THREE.TextureLoader().load("/src/assets/images/changjing2.jpg"
);
floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping;
floorTexture.repeat.set(1, 1);const geom = new THREE.CircleGeometry(20, 29);
const material = new THREE.MeshStandardMaterial({// 强制three使用双面渲染这个平面side: THREE.DoubleSide,transparent: true,
//   aoMap能让有阴影的地方更明显aoMap: floorTexture,aoMapIntensity:1.5
});
const mesh = new THREE.Mesh(geom, material);
mesh.position.set(0, -0.02, 0);
scene.add(mesh);
mesh.rotation.x -= (90 * Math.PI) / 180;
mesh.receiveShadow = true;

然后我们设置一下柔和阴影,让其边缘变的模糊

directionalLight.shadow.radius = 8; // 柔化阴影边缘

阴影的最终效果到这里差不多了,剩下的参数大家可以自己调整一下

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

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

相关文章

ETL怎么实现多流自定义合并?

随着信息技术的迅猛发展以及数据生成环境的多样化,互联网、物联网和社交媒体的广泛应用导致各种设备和平台不断产生大量数据,需要整合这些数据,从而进行数据融合。数据集成和管理平台ETLCloud,主要用于支持数据的抽取(…

数据结构- 10种常见树:二叉树、平衡二叉树、完全二叉树

一、树 树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。把它叫做“树”是因为它常看起来像一棵倒挂的树,也就是说它常是根朝上,而叶朝下的。 1.树的定义: 树…

Java常用加密方式

一,加密算法分类 对称加密:指加密和解密的密钥相同,优点就是加解密的效率高且易于实现。 非对称加密:指加密和解密的密钥不相同,也称为公私要加密。 不可逆加密:特征就是加密过程不需要密钥,…

SQLite软件架构与实现源代码浅析

概述 SQLite 是一个用 C 语言编写的库,它成功打造出了一款小型、快速、独立、具备高可靠性且功能完备的 SQL 数据库引擎。本文档将为您简要介绍其架构、关键组件及其协同运作模式。 SQLite 显著特点之一是无服务器架构。不同于常规数据库,它并非以单独进…

让 Deepseek GPS测速

下面是一个简单的微信小程序GPS测速功能的实现代码&#xff0c;包括前端页面和后端逻辑。 1. 页面结构 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是软件的生命周期,以及常见的开发测试模型

目录 一、软件的生命周期 1、什么是生命周期&#xff1f; 2、每个阶段都要做些什么&#xff1f; 二、常见的开发模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三个角色 五个会议 一、软件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱签名测试.【实现越权绕过.】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

数据分析与应用-----使用scikit-learn构建模型

目录 一、使用sklearn转换器处理数据 &#xff08;一&#xff09;、加载datasets模块中的数据集 &#xff08;二&#xff09;、将数据集划分为训练集和测试集 ​编辑 train_test_spli &#xff08;三&#xff09;、使用sklearn转换器进行数据预处理与降维 PCA 二、 构…

【Tomcat】Tomcat端口仅允许本地访问设置方法

要设置Tomcat端口仅允许本地访问&#xff0c;可以通过以下两种主要方式实现&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推荐&#xff09; 修改 server.xml 文件 打开Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 标签&#xff08;…

arcgis字段计算器中计算矢量面的每个点坐标

python脚本 函数 def ExportCoordinates(feat):coors = []partnum = 0partcount = feat.partCountwhile partnum < partcount:part = feat.getPart(partnum)pnt = part.next()while pnt:coors.append("({}, {})".format(pnt.X,pnt.Y))pnt = part.next()if not p…

企业级AI开启落地战,得场景者得天下

文&#xff5c;白 鸽 编&#xff5c;王一粟 这两周&#xff0c;企业级智能体开发平台颇有你方唱罢我方登台的架势。 微软、腾讯、网易等国内外巨头&#xff0c;近期都相继宣布推出了新一代智能体开发平台。相比于两年前&#xff0c;智能体开发的产品逻辑已经有了翻天覆地的变…

探索C++标准模板库(STL):String接口实践+底层的模拟实现(中篇)

前引&#xff1a;上一篇文章小编已经整理出了String的常用接口&#xff0c;梳理了各个接口的功能、参数&#xff0c;如何使用等各种实例。本篇文章将带大家看看String这些接口的实践使用&#xff0c;探索这些接口的实用性&#xff0c;是如何增加代码效率的。在本篇文章的末尾&a…

【模型显著性分析】配对样本 t 检验

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言 t t t 检验配对样本 t t t 检验&#xff08;适用于相关组&#xff09;代码论文描…

商旅平台排名:十大商旅服务平台解析

商旅平台排名&#xff1a;十大商旅服务平台解析 在企业降本增效的关键转型期&#xff0c;商旅管理正成为优化运营成本与提升管理效能的核心场景。如何在保障出行体验的同时实现差旅成本精细化管控、管理流程智能化&#xff0c;成为越来越多企业的战略焦点。随着AI技术在数据洞…

题海拾贝:P1208 [USACO1.3] 混合牛奶 Mixing Milk

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

每天掌握一个Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南 一、工具概述 ab&#xff08;Apache Benchmark&#xff09; 是 Apache 官方提供的开源压力测试工具&#xff0c;用于衡量 Web 服务器的性能。它通过模拟多并发请求&#xff0c;测试服务器在高负载下的响应速度、吞吐量和稳定性&#xff0c;常用于…

AI的“空间盲症“

<------最重要的是订阅“鲁班模锤”------> 当我们看到一张照片时&#xff0c;大脑会自动分析其中的空间关系——哪个物体在前&#xff0c;哪个在后&#xff0c;左边是什么&#xff0c;右边是什么。但对于当今最先进的AI系统来说&#xff0c;这种看似简单的空间理解却是…

数据拟合实验

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的: 进一步熟练掌握最小二乘多项式拟合算法&#xff0c;提高编程能力和解决拟合问题的实践技能。 实验内容&#xff1a; 1 对下列数据&#xff0c;求解最小二乘抛物线f(x)Ax2BxC x -3 -1 1 3 y 15 5 …

系统思考:心智模式与业务创新

在最近的项目交付讨论中&#xff0c;我频繁听到一个词&#xff1a;“缺合适的人”。这让我陷入了深思&#xff1a;我们是否还在传统的生产力概念&#xff1f;纳瓦尔提出的三种杠杆&#xff1a;劳动力、资本、零边际成本产品。在当今这个信息化、全球化的商业世界中&#xff0c;…

python分步合并处理excel数据

文章目录 概要整体架构流程技术名词解释技术细节小结概要 客户需求 1. 背景与目标 用户需要将三个包含农业实验数据的Excel表格(AK、AN、AP)合并为一个结构化数据集,用于后续分析。每个表格包含相同类型的字段(如对照组与PSB处理组的样本数、均值、标准差),但需通过字…