three.js 3D Banner实战

需求场景

        1、加载glb模型

        2、设置背景

        3、让第一个模型转动,并调整模型的转动速度

        4、设置模型的宽度。

遇到的问题

        1、为什么加载的模型不能转动?

        加载的glb模型需要加入到goup里面才能转动。

代码实施

<script setup>
import * as THREE from 'three'
import Stat from 'three/examples/jsm/libs/stats.module'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// 引入gltf模型加载库GLTFLoader.js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';

import * as dat from 'dat.gui'
import { onMounted, ref } from 'vue';

let w = 500
let h = 500
const stat = new Stat()

//Scene
const scene = new THREE.Scene()

//Camera
const camera = new THREE.PerspectiveCamera(75, w / h, 0.1, 100)
camera.position.set(0, 0.5, 3)
camera.lookAt(0, 0, 0)


//渲染
const renderer = new THREE.WebGLRenderer()
const orbitControls = new OrbitControls(camera, renderer.domElement)
const loader = new GLTFLoader();
const TextureLoader = new THREE.TextureLoader()

const clock = new THREE.Clock()

const containerRef = ref()

//组合
const group = new THREE.Group()

//
const groupEarth = new THREE.Group()

//正方形 地球
const geometry = new THREE.BoxGeometry(0.5, 0.5, 0.5)
//材质
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 })
const earth = new THREE.Mesh(geometry, material)
groupEarth.position.y = 0.5
groupEarth.add(earth)
scene.add(earth)


// group.add(group2)

let glbs

//模型2  模型可以加入group,然后给group动画 可达鸭自转,同时围绕着地球转
loader.load( 'src/assets/file/kedaya.glb', function ( gltf ) {
    console.log('kedaya',gltf)
    gltf.scene.position.y = 0.5
    glbs = gltf.scene
    groupEarth.add(glbs)
    scene.add(groupEarth)
})
const zuqiu = new THREE.Group()


//模型3  模型可以加入group,然后给group动画 可达鸭自转,同时围绕着地球转
loader.load( 'src/assets/file/zuqiu.glb', function ( gltf ) {
    console.log('zuqiu',gltf)
    gltf.scene.position.y = 1
    zuqiu.add(gltf.scene)
    scene.add(zuqiu)
})



// //模型3
const geometry2 = new THREE.BoxGeometry(1, 1, 1)
const material2 = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
const month = new THREE.Mesh(geometry2, material2)
month.position.y = 1
group.add(month)

const geometry3 = new THREE.BoxGeometry(0.2, 0.2, 0.2)
const material3 = new THREE.MeshBasicMaterial({ color: 0x0000ff })
const cube3 = new THREE.Mesh(geometry3, material3)
cube3.position.y = 0.4
groupEarth.add(cube3)

scene.add(group)

//添加背景图
//多个面贴多张图片
const texture1 = TextureLoader.load('src/assets/img/girl/1.jpg')
const texture2 = TextureLoader.load('src/assets/img/girl/2.jpg')
const texture3 = TextureLoader.load('src/assets/img/girl/3.jpg')
const texture4 = TextureLoader.load('src/assets/img/girl/4.jpg')
const texture5 = TextureLoader.load('src/assets/img/girl/5.jpg')
const texture6 = TextureLoader.load('src/assets/img/girl/6.jpg')

//设置背景
scene.background = texture2

onMounted(() => {
    renderer.setSize(w, h)
    renderer.setClearColor(0x95e4e8) //设置背景色
    //解决加载gltf格式模型纹理贴图和原图不一样问题
    renderer.outputEncoding = THREE.sRGBEncoding;

    containerRef.value.appendChild(renderer.domElement)
    // containerRef.value.appendChild(stat.dom)

    tick()
})

function tick() {
    const time = clock.getElapsedTime()

    //地球自转  绕着z轴旋转
    earth.rotation.z = time
    //将模型加入一个组合里面,就可以自己转动了
    groupEarth.rotation.y = time
    //可达鸭围绕着
    groupEarth.rotation.z = time
    //
    month.rotation.z = time
    group.rotation.z = time*5
    requestAnimationFrame(tick)
    renderer.render(scene, camera)
    stat.update()
    orbitControls.update()
}

</script>

<template>
    <main ref="containerRef" class="threeBox">
    </main>
</template>
<style scoped lang="less">
.threeBox{
    width: 500px;
    height: 500px;
    margin: 0 auto;
    margin-top: 200px;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UTC和北京时间

influxdb 的时间为UTC和北京时间相差8小时&#xff0c;需要经常转化&#xff0c;所以有下面的2个常用时间 public static void main(String[] args) {//北京时间当天0点ZonedDateTime dateTime ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));ZonedDateTime beijin…

【zabbix7】新版本尝鲜之connector

zabbix历史版本中&#xff0c;会使用python脚本&#xff0c;把zabbix的告警发送到kafka进行二次处理&#xff0c;或者使用filebeat把zabbix的Export的njson指标数据发送到kafka进行二次处理&#xff0c;然而在zabbix7中新增了新功能connector简化了操作并且可以根据tag进行区分…

微信订阅号绑定Coze(扣子),使用上GPT4

之前试过国外的Coze可以绑定一些通讯工具&#xff0c;从而可以使用相当于chatgpt4的功能&#xff0c;但对于我们来说&#xff0c;使用不太方便。 后来头条又有了国内版的Coze(扣子)&#xff0c;发现可以绑定微信&#xff0c;但那时只有微信服务号可以使用&#xff0c;个人订阅…

【嵌入式】“野指针”和“悬空指针”的奇淫拙劣

【嵌入式】“野指针”和“悬空指针”的奇淫拙劣 1. 前言1.1 授权须知 2. 野指针和悬空指针3.举例说明3.1 示例一&#xff1a;free 之后&#xff0c;没有让指针指向NULL3.1.1 代码解析3.1.2 运行代码的结果3.1.3 程序崩溃在哪&#xff1f; 3.2 悬空指针–释放后使用攻击 1. 前言…

【Linux】LInux下的进程状态

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

自学编程两个月,现在我月入 4 万元

这个外国小哥叫 Nico&#xff0c;他一开始是个编程小白&#xff0c;后来把自己关在房间里花了两个月时间学会了编程&#xff0c;如今正在开发一款名为 Talknotes 的应用&#xff0c;可以将语音备忘录转化为结构化的内容&#xff0c;月收入 5000 美元。 Nico 从高中毕业就开始创…

Linux蓝牙驱动模拟HID设备(把Linux系统模拟成蓝牙鼠标和蓝牙键盘)

by fanxiushu 2024-04-24 转载或引用请注明原始作者。 在经过windows的蓝牙驱动开发模拟成HID设备的大风大浪之后&#xff0c; 现在回到linux下实现相同功能&#xff0c;简直就是如小孩嬉闹一样的轻松。 但无论如何&#xff0c;作为模拟蓝牙HID设备的windows&#xff0c;linux一…

导出瑞芯微(Rockchip)芯片的设备树(Device Tree)

要导出瑞芯微&#xff08;Rockchip&#xff09;芯片的设备树&#xff08;Device Tree&#xff09;&#xff0c;可以使用设备树编译器&#xff08;DTC&#xff0c;Device Tree Compiler&#xff09;。通常&#xff0c;会有一个设备树的源文件&#xff08;.dts&#xff09;&#…

安装Selenium

安装Selenium 【0】引言 ​ 由于sleenium4.1.0需要python3.7以上方可支持&#xff0c;请注意自己的python版本。 【1】使用Pycharm安装 使用 快捷键 Ctrl Alt S 【2】使用 pip 安装 Python3.x安装后就默认就会有pip&#xff08;pip.exe默认在python的Scripts路径下&…

代码随想录算法训练营第四十九天| LeetCode121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

一、LeetCode121. 买卖股票的最佳时机 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html 状态&#xff1a;已解决 1.思路 学了双指针的同学可能会下…

「ETL趋势」FDL数据中心库/表查看和调试功能上线、数据源新增支持MongoDB写入

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.6最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

float类型的存储

float类型的存储 在计算机科学中&#xff0c;float类型通常指的是单精度浮点数。它是一种用于近似表示实数的方法&#xff0c;特别适用于表示很大或很小的数。float类型在大多数编程语言中遵循IEEE 754标准&#xff0c;这是一个国际标准&#xff0c;用于确保在不同计算机和编程…

了解DNS洪水攻击

域名系统 (DNS) 服务器是互联网的“电话簿“&#xff1b;互联网设备通过这些服务器来查找特定 Web 服务器以便访问互联网内容。在互联网中&#xff0c;DNS 洪水是一种网络攻击方式。 DNS 洪水攻击是一种分布式拒绝服务 (DDoS) 攻击&#xff0c;攻击者用大量流量淹没某个域的 D…

【苍穹外卖】Redis缓存菜品数据-业务逻辑分析

目录 Redis缓存菜品数据-业务逻辑分析1. 需求2. 需要考虑的问题3. 缓存逻辑分析4. 缓存流程图 Redis缓存菜品数据-业务逻辑分析 1. 需求 在菜品展示页面&#xff0c;用户点击每一个分类都会访问一次MySQL数据库数据&#xff0c;当大量用户使用发出大量请求时&#xff0c;会对…

【题目2】 大衍数列,斐波拉契数列等,用VBA 和python解决

目录 0 原始题目&#xff1a;大衍数列 0.1 原始题目 0.2 知识点 1 大衍数列 1.1 大衍数列定义 1.1.1 大衍数列定义 1.1.2 大衍数列注意点 1.2 用VBA实现大衍数列 1.3 用python实现大衍数列 2 斐波拉契数列 /兔子数列/ 黄金分割数列 2.1 斐波拉契数列定义 2.1.1 下面…

AI预测福彩3D第9套算法实战化测试第1弹2024年4月24日第2次测试

今天继续进行新算法的测试&#xff0c;今天是第2次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月24日福彩3D预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;1、0、2、3、6、7 十位&#xff1a;2、4、1、6、0、5 个位&#xff1a;3、2、4、…

第二证券|股票做短线要关注什么?

在股市中短线交易因其快速的盈利时机而招引了众多投资者&#xff0c;但做短线想要挣钱也不是那么容易的。对于股票做短线要重视什么&#xff0c;第二证券下面就为我们具体介绍一下。 短线交易需重视&#xff1a; 1、商场短期趋势。短线投资者首先需要重视的是全体商场趋势&am…

jsp实验11 JavaBean

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握javabean的用法。【参考课本 上机实验 5.5.2 】 三、源代码以及执行结果截图&#xff1a; 源代码&#xff1a; Memory.java package sea.water; import java.util.ArrayList; import java.util…

C语言实现简单CRC校验

目录 一、实现题目 二、send模块 三、receive模块 四、运行截图 一、实现题目 二、send模块 #include <stdio.h> #include <string.h>// 执行模2除法&#xff0c;并计算出余数&#xff08;CRC校验码&#xff09; //dividend被除, divisor除数 void divide…

基于STM32的DAC简易信号发生器设计(HAL库)

前言&#xff1a;本文为手把手教学制造 DAC 简易信号发生器的教程&#xff0c;本教程的 MCU 使用 STM32F103ZET6 。以 HAL 库的 DAC 函数作为代码基础进行编程&#xff0c;使得信号发生器可以产生各种类型的信号波&#xff0c;包括&#xff1a;方波、三角波、正弦波和噪声波&am…
最新文章