Three.js-实现加载图片并旋转

1.实现效果

2. 实现步骤

2.1创建场景

const scene = new THREE.Scene();

2.2添加相机

说明:

  • fov(视场角):视场角决定了相机的视野范围,即相机可以看到的角度范围。较大的视场角表示更广阔的视野,但可能会导致失真。一般建议设置在 45° 到 90° 之间。
  • aspect(纵横比):纵横比表示了渲染区域的宽度和高度之比。通常设置为渲染区域的宽度除以高度,以保持图像不变形。
  • near(近裁剪面):近裁剪面决定了相机能够看到的最近的物体的距离。通常设置为一个正数,表示相机距离近裁剪面的距离。
  • far(远裁剪面):远裁剪面决定了相机能够看到的最远的物体的距离。通常设置为一个正数,表示相机距离远裁剪面的距离。
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

2.3添加网格

说明:创建几何图形和图形的材质(几何图形必须要材质)。下面创建了矩阵图形。

const textureMaterial = new THREE.MeshBasicMaterial({map: texture});
const geometry = new THREE.PlaneGeometry(1, 1);
mesh = new THREE.Mesh(geometry, textureMaterial);

2.4渲染动画

const renderer = new THREE.WebGLRenderer({antialias: false});
renderer.setSize(width, height);

2.5放入Dom结构

  document.querySelector("#renderBox").appendChild(renderer.domElement);

3.源代码

<template><div id="renderBox"></div>
</template><script setup>
import * as THREE from 'three';
import {onMounted} from "vue";
// 浏览器可操作的宽度,高度
const width = window.innerWidth, height = window.innerHeight;const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.z = 1;
const scene = new THREE.Scene();
const geometry = new THREE.PlaneGeometry(1, 1);
let mesh;
const textureLoader = new THREE.TextureLoader().load("/data/map/scene-bg2.png",function (texture) {// 纹理加载完成后创建材质,map:texture实际就是贴在上面的const textureMaterial = new THREE.MeshBasicMaterial({map: texture});// 创建一个网格对象mesh = new THREE.Mesh(geometry, textureMaterial);// 将网格对象添加到场景中scene.add(mesh);}
);
const renderer = new THREE.WebGLRenderer({antialias: false});
renderer.setSize(width, height);
renderer.setAnimationLoop(animation);function animation(time) {if (mesh) {// 每一帧增加网格对象的旋转角度,实现 360 度旋转效果mesh.rotateOnAxis(new THREE.Vector3(0, 0, 1), 0.02);}// 渲染图形renderer.render(scene, camera);}const init = () => {document.querySelector("#renderBox").appendChild(renderer.domElement);
}onMounted(() => {init()
})
</script><style></style>

4.素材图片

 

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

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

相关文章

第 10 章 nodelet(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 10.4 nodelet ROS通信是基于Node(节点)的&#xff0c;Node使用方便、易于扩展&#xff0c;可以满足ROS中大多…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM&#xff08;软件物料清单&#xff09;通过以下方式帮助医疗器械制造商提高产品透明度&#xff1a; 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成&#xff0c;包括每个组件的来…

基于springboot实现民族婚纱预定系统项目【项目源码+论文说明】

基于springboot实现民族婚纱预定系统的设计演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本民族婚纱预定系统就是在这样的大环境下诞生&#xff0c;其可…

【Emgu CV教程】10.15、FillPoly()不规则形状填充颜色

文章目录 一、概念二、填充不规则图形1.原始素材2.代码3.运行结果 二、最大轮廓填充颜色1.原始素材2.代码3.运行结果 一、概念 图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域&#xff0c;连通域分析是指在图像中寻找出彼此互相独立的连通域并将其标记出来…

【最新鸿蒙应用开发】——Want信息载体

信息传递载体Want 1、概述 上一章节我们学习了UIAbility组件 【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility-CSDN博客 &#xff0c;其中组件间的交互传递信息的媒介就是Want&#xff0c;本章节我们来更加深入学习Want的相关知识。 Want是一种对象&#xff0c;用于在应用组…

2. JavaScript 语法和数据类型

1. 基础 JavaScript不区分大小写 2. 注释 // 单行注释/* 这是一个更长的&#xff0c;多行注释 *//* 然而&#xff0c;你不能&#xff0c;/* 嵌套注释 */ 语法错误 */3. 声明 var 声明一个变量&#xff0c;可选初始化一个值。 let 声明一个块作用域的局部变量&#xff0c;可…

ORM(对象关系映射)概念详解

一、技术难点 ORM&#xff0c;即对象关系映射&#xff08;Object-Relational Mapping&#xff09;&#xff0c;它的技术难点主要体现在如何将面向对象编程中的类和对象高效地映射到关系型数据库中的表和记录。具体来说&#xff0c;有以下几个方面的技术挑战&#xff1a; 数据类…

计算机毕业设计项目、管理系统、可视化大屏、大数据分析、协同过滤、推荐系统、SSM、SpringBoot、Spring、Mybatis、小程序项目编号1-500

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

桌面型激光雕刻机的发展前景及TMC应用优势

一、行业现状 近两年来&#xff0c;激光雕刻行业正处于快速发展阶段。随着人们生活水平的提高&#xff0c;对个性化、定制化产品的需求日益增加&#xff0c;激光雕刻以其独特的创意和精美的效果&#xff0c;满足了消费者对个性化产品的追求。同时&#xff0c;随着科技的不断进…

OCP 安装 OceanBase集群(企业版3.2.4.1)

创建集群 登录OCP界面 1.点击左侧工具栏中的集群 2.进入集群页面后 点击 右上角的创建集群 集群设置 进入 创建集群 页面&#xff0c;进行 目标集群 配置 集群种类 根据 生产环境 选择 分布式 或者 单机集中式&#xff0c;第一次安装 集群类型 选择 主集群。 注意&#xf…

计算机网络到底是指什么?

计算机网络是信息技术领域中最为核心和复杂的一部分&#xff0c;它涵盖了众多的技术原理和应用。下面&#xff0c;我们将从技术层面深入探讨计算机网络的相关内容。 一、计算机网络的分层模型 计算机网络的分层模型是网络通信的基石&#xff0c;它将网络通信过程划分为不同的层…

怎么解决企业生产计划排程的几大难点?

生产计划排程&#xff0c;作为企业管理中的核心环节&#xff0c;其复杂性和动态性一直困扰着众多企业。然而&#xff0c;通过科学的策略和技术手段&#xff0c;这些难点并非不可攻克。 生产环境的动态变化&#xff0c;如临时订单改变、紧急插单的需求、产品流程变化等&#xff…

Linux中网络配置项目笔记

1.NetworkManager安装 (或者安装network.service&#xff0c;不要一起装防止网络冲突) 有网络的状态下yum install 下载无网络的状态下使用预先下载rpm包 rpm -ivh systemctl start NetworkManager #启动 systemctl stop NetworkManager #停止 systemctl restart NetworkMana…

各大AI模型训练成本大比拼

像OpenAI的ChatGPT、谷歌的Gemini Ultra这样的高级AI模型&#xff0c;训练它们通常需要数百万美元的费用&#xff0c;且该成本还在迅速上升。随着计算需求的增加&#xff0c;训练它们所需的计算能力的费用也在飙升。为此&#xff0c;AI公司正在重新考虑如何训练这些生成式AI系统…

描述Servlet监听器的类型和用途

Servlet监听器是Servlet规范中定义的一种特殊的类&#xff0c;用于监听Web应用程序中特定事件的发生。它们按照监听的对象和事件类型&#xff0c;可以划分为多种类型&#xff0c;每种类型都有其特定的用途。 监听器的类型 按照监听对象划分 应用程序环境对象&#xff08;Serv…

华为OD刷题C卷 - 每日刷题 12(数组连续和,求最多可以派出多少支团队)

1、&#xff08;数组连续和&#xff09;&#xff1a; 这段代码是解决“数组连续和”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;用于计算给定数组中有多少个连续区间的和大于等于给定值x。 main方法首先读取数组的长度n和阈值x&…

【Javascript修炼篇】如何对JSON格式进行转换

这将是我们几乎日常都会用到的一个超实用函数。 根据数据的多样性与结构&#xff0c;API 的响应可能会返回极其复杂的 JSON 对象。有时候&#xff0c;仅仅从整个 JSON 中抓取一个字段可能就不太够用了。我们可能需要提取多个字段来展示在网页上。每次手动遍历这样的复杂 JSON …

两站图片滑动对比效果实现(VUE3)

像这种图片滑动对比的效果&#xff0c;网上还不少见吧&#xff0c;但是网上却不好找到完整现成的实现代码&#xff0c;我找到几个地方有类似的代码&#xff0c;但是都不好直接移植到代码里&#xff0c;因为很多都是使用原生htmlcssjs实现&#xff0c;太复杂了。反而不好应用到v…

Qt for Android 之 OpenCV编译(Windows下编译)

简介 前两天刚好更新了4.10, 这里以4.10作为示例进行编译&#xff0c; Qt版本是Qt6.6.2。 准备OpenCV的Android库 一. 使用官方编译好的库 1. 下载OpenCV android SDK opencv-4.10.0-android-sdk.zip 2. 解压缩 官方提供的包含了多个架构的opencv android库 二. 自行编译…

十三、【源码】ResultMap解析

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/13-resultMap ResultMap解析 分为两部分&#xff1a;解析和使用 1.解析 解析XML的时候单独解析所有的resultMap标签&#xff0c;封装成Re…