three.js——宝马汽车产品展示

news2025/1/11 2:17:10

宝马汽车产品展示

  • 前言
  • 效果图
  • 1、创建基本设置(场景和背景等)
  • 2、加载模型和展厅灯光
  • 3、添加点击事件

前言

宝马汽车产品展示和原理讲解
演示网址:http://f-h-y.gitee.io/bmw-car-display-project/#/

效果图

在这里插入图片描述
在这里插入图片描述

1、创建基本设置(场景和背景等)

// 获取节点
    const canvasDom = ref('canvasDom')

    // 创建场景
    const scene = new THREE.Scene()
    // 创建相机
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
    // 调整相机的位置
    camera.position.set(0, 2, 6);
    // 创建渲染器
    const renderer = new THREE.WebGLRenderer({
      // 抗锯齿
      antialias: true
    })
    // 调整渲染器的大小
    renderer.setSize(window.innerWidth, window.innerHeight)

    // 渲染动画
    const render = () => {
      renderer.render(scene, camera)
      requestAnimationFrame(render)
    }

    onMounted(() => {
      // 把渲染器插入到节点上
      canvasDom.value.appendChild(renderer.domElement)
      // 设置场景默认颜色
      scene.background = new THREE.Color('#ccc')
      scene.environment = new THREE.Color('#ccc')
      // 运行渲染动画
      render()

      // 添加网格地面
      const gridHelper = new THREE.GridHelper(10, 10)
      gridHelper.material.opacity = 0.5
      gridHelper.material.transparent = true
      scene.add(gridHelper)

      // 添加控制器
      const controls = new OrbitControls(camera, renderer.domElement);
      controls.update()
    })

2、加载模型和展厅灯光

加载模型

导入加载模型需要的文件

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'

添加模型和需要控制的模型模块

	   //设置材质
	    const bodyMaterial4 = new THREE.MeshPhysicalMaterial({
	      color: 0x80007f,
	      metalness: 1,
	      roughness: 0.5,
	      clearcoat: 1,
	      clearcoatRoughness: 0,
	    })
		// 添加gltf汽车模型
	  let bodyOfCar,hub,frame,Tail,FrontWindshield
      const loader = new GLTFLoader()
      const dracoLoader = new DRACOLoader()
      // 添加解压文件
      dracoLoader.setDecoderPath('./draco/gltf/')
      loader.setDRACOLoader(dracoLoader)
      loader.load('./model/scene.gltf', (gltf) => {
        const bmv = gltf.scene;
        bmv.traverse((child) => {
          if (child.isMesh && child.name.includes('Object_4')) {
            frame = child
            //将材质设置到固定的模块
            frame.material = bodyMaterial2
            data.eleList.push(frame)
          }
          if (child.isMesh && child.name.includes('Object_6')) {
            bodyOfCar = child
            bodyOfCar.material = bodyMaterial3
            data.eleList.push(bodyOfCar)
          }

          if (child.isMesh && child.name.includes('Object_20')) {
            hub = child
            hub.material = bodyMaterial4
            data.eleList.push(hub)
          }
          if (child.isMesh && child.name.includes('Object_21')) {
            Tail = child
            Tail.material = bodyMaterial
            data.eleList.push(Tail)
          }

          if (child.isMesh && child.name.includes('Object_23')) {
            FrontWindshield = child
          }

        })
        bmv.position.set(0, 0, 0)
        scene.add(bmv)
      })

添加灯光

	  // 添加灯光
      const light1 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(0, 0, 10)
      scene.add(light1)
      const light2 = new THREE.DirectionalLight(0xffffff, 1)
      light2.position.set(0, 0, -10)
      scene.add(light2)
      const light3 = new THREE.DirectionalLight(0xffffff, 1)
      light3.position.set(10, 0, 0)
      scene.add(light3)
      const light4 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(-10, 0, 0)
      scene.add(light4)
      const light5 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(0, 10, 0)
      scene.add(light5)
      const light6 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(5, 10, 0)
      scene.add(light6)
      const light7 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(0, 10, 5)
      scene.add(light7)
      const light8 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(0, 10, -5)
      scene.add(light8)
      const light9 = new THREE.DirectionalLight(0xffffff, 1)
      light1.position.set(-5, 10, 0)
      scene.add(light9)

3、添加点击事件

// 点击调整颜色
    let selectColor = (index, item1) => {
      if (data.nameList.includes(item1)) {
        let materIndex = data.nameList.indexOf(item1)
        data.eleList[materIndex].material.color.set(data.colorList[index].color)
      }
    }

    // 点击改变材质的磨砂程度
    let selectMaterial = (index) => {
      bodyMaterial3.clearcoatRoughness = data.materials[index].value
    }

    // 点击设置前挡风玻璃是否透明
    let selectOOpacity = (index) => {
      FrontWindshield.material.opacity=data.OpacityList[index].value
      FrontWindshield.material.transparent=true
    }

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

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

相关文章

ChatGPT详细搭建教程+支持AI绘画

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统?小编这里写一个详细图文教程吧&#x…

The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)

题目 T(T<10)组样例&#xff0c;每次给出一个n(2<n<1e18)&#xff0c; 询问多少对&#xff0c;满足 答案对998244353取模&#xff0c;保证n-1不是998244353倍数 思路来源 OEIS、SSerxhs、官方题解 2023 ICPC 网络赛 第一场简要题解 - 知乎 题解 官方题解还没有…

【Springboot】整合Xxl-job

目录 一&#xff0c;下载1.1 官方文档地址1.2 源码仓库地址 二&#xff0c; 配置部署 "调度中心"2.1 初始化 "调度数据库"2.2 修改配置文件2.3 启动调度中心 三&#xff0c;springboot项目整合3.1 添加依赖3.2 修改配置文件3.3 执行器组件配置4.4 编写测试…

雷达编程实战之静态杂波滤除与到达角估计

雷达中经过混频的中频信号常常混有直流分量等一系列硬件设计引入的固定频率杂波&#xff0c;我们称之位静态杂波&#xff0c;雷达信号处理需要把这些静态杂波滤除从而有效的提高信噪比&#xff0c;实现准确的目标检测功能。 目标的到达角估计作为常规车载雷达信号处理的末端&am…

【数据结构】什么是数据结构?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 数据结构的定义 数据结构(Data Structure)是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合. 这么讲可能有些抽象,放一张图大家可能好理解一点…

Python 打印素数

"""打印素数介绍&#xff1a;素数是指只有两个正因数&#xff08;1和它本身&#xff09;的自然数&#xff0c;而且必须大于1。例如&#xff1a;2、3、5、7、11、13、17、19、23、29等等都是素数。小于2的数不是素数&#xff0c;因为它没有两个正因数。例如&…

编译原理龙书-词法分析

词法分析 词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符&#xff0c;将它们组成词素&#xff0c;生成并输出一个词法单元序列&#xff0c;每个词法单元对应于一个词素 有时&#xff0c;词法分析器可以分成两个级联的处理阶段&#xff1a; 扫描阶段主要负责完…

Base64编码与打印标签(label)实例

文章目录 前言一、Base64 的简单认识二、Base64的使用场景三、 Base64的解码注意问题举个最近与后端配合的例子 四、 base64 转换为arrayBuffer&#xff0c;blod总结 前言 文件格式转换&#xff0c;在日常编程尤为常见&#xff0c;例如pdf文件大小的压缩存储&#xff0c;前端用…

Arduino驱动MMA7260三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 Arduino驱动MMA7260三轴加速度传感器芯片,可以应用到摩托车和汽车放倒报警、遥控航模、游戏手柄、人形机器人跌倒检测、硬盘冲击保护、倾斜度测量等场合。 1

Java初级到中级:技术提升的策略与方法

文章目录 1 问题背景2 前言3 方法 1 问题背景 截至2023年7月&#xff0c;笔者已经毕业2年了&#xff0c;每天都在搬砖打螺丝&#xff0c;自我感觉需要沉淀、思考、总结一下。思考和总结一下如何从Java初级提升到Java中级&#xff0c;需要掌握一些什么方法论&#xff0c;有效地去…

使用命令行快速创建Vite项目

一、构建项目 在终端中使用如下命令行&#xff1a; npm create vite 二、定义项目名称 三、选择项目类型 Vanilla是我们常用的JavaScript&#xff0c;Vue和React是常用前端框架&#xff0c;可以根据自己的需要进行选择 通过上下键进行选择&#xff0c;按下回车进行确认 创建…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

VS2019创建GIt仓库时剔除文件或目录

假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”&#xff0c;选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore&#xff0c;直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…

git --- 回滚 restore, reset, revert

git --- 回滚 restore, reset, revert git revertgit restoregit resetgit reset --softgit reset --mixedgit reset -- hard git revert git revert 是用于“反做”某一个版本&#xff0c;以达到撤销该版本的修改的目的也就是git revert会生成一个新的commit, 而这个commit需要…

Spring Cloud Alibaba快速整合OpenFeign

文章目录 spring cloud alibaba 整合OpenFeign整合流程1.导入依赖2. 编写调用接口2.1 service&#xff08;这里写的是clients&#xff09;2.2 controller 3.设置其最大链接时间3.1 配置文件3.2 client3.3 接口3.4 被访问的controller spring cloud alibaba 整合OpenFeign Fore…

C++之lseek64应用总结(二百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

基于STM32的宠物托运智能控制系统的设计(第十七届研电赛)

一、功能介绍 使用STM32作为主控设备&#xff0c;通过DHT11温湿度传感器、多合一空气质量检测传感器以及压力传感器对宠物的托运环境中的温湿度、二氧化碳浓度和食物与水的重量进行采集&#xff0c;将采集到的信息在本地LCD显示屏上显示&#xff0c;同时&#xff0c;使用4G模块…

IO模型学习

一、IO读写的基本原理 一个原则&#xff1a;操作系统将内存划分为两部分&#xff1a;一个是内核空间&#xff0c;一个是用户空间。在linux操作系统中&#xff0c;内核模块运行在内核空间&#xff0c;相应的进程处在内核态&#xff1b;用户程序运行在用户态&#xff0c;对应的进…

Vis.js教程(一):基础教程

1、Vis.js是什么 一个动态的、基于浏览器的可视化库。 该库的设计易于使用&#xff0c;能够处理大量动态数据&#xff0c;并能够对数据进行操作和交互。 该库由 DataSet、Timeline、Network、Graph2d 和 Graph3d 组件组成。 Vis.js官网&#xff1a;https://visjs.org/ github…

MS COCO数据集介绍以及pycocotools使用

MS COCO数据集介绍以及pycocotools使用 1、MS COCO数据集简介2、MS COCO数据集目录结构3、 MS COCO标注文件格式3.1 使用Python的json库查看3.2 使用官方cocoAPI查看 4、目标检测验证任务mAP 1、MS COCO数据集简介 2、MS COCO数据集目录结构 ├── coco2017: 数据集根目录├─…