threejs入门使用

  • 场景(Scene)
     

    import * as THREE from "three";const scene = new THREE.Scene();
  • 相机(Camera)

    const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000,
    );// 3、设计相机的位置
    camera.position.set(0, 0, 10);
  • 物体(Mesh)

    • 材质

      const material = new THREE.MeshBasicMaterial({ color: "#ff0000" });
    • 形状
      const geometry = new THREE.BoxGeometry();
    • 加入到物体中
      // 5、创建几何体
      const cube = new THREE.Mesh(geometry, material);// 6、将几何体添加到场景中
      scene.add(cube);

  • 渲染器(Renderer)

    // 7、初始化渲染器
    const renderer = new THREE.WebGLRenderer();
    // 8、设置渲染的尺寸大小
    renderer.setSize(window.innerWidth, window.innerHeight);
  • 控制面板(Gui)

    // A1、初始化gui
    const gui = new dat.GUI();
    // A2、设置控制台的是否显示属性
    gui.add(cube, "visible").name("是否显示");
  • 轨道控制器(Controls)

    // A9、创建轨道控制器,像卫星围绕地球旋转
    const controls = new OrbitControls(camera, renderer.domElement);
    // A10、设置控制器阻尼,让控制器更具有真实效果,必须在动画循环调用.update()
    controls.enableDamping = true;
    
  • 在vue3的显示代码
    <template><div ref="boxRef"></div>
    </template><script setup>
    import { onMounted, ref, watch } from "vue";
    import * as THREE from "three";
    // 导入轨道控制器
    import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
    // 目标:应用图形用户界面更改变量
    import * as dat from "dat.gui";
    // 导入动画库
    import gsap from "gsap";let boxRef = ref(null);// 1、创建场景
    const scene = new THREE.Scene();
    // 2、创建相机
    const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000,
    );// 3、设计相机的位置
    camera.position.set(0, 0, 10);
    // 4、设置形状和材质
    const geometry = new THREE.BoxGeometry();
    const material = new THREE.MeshBasicMaterial({ color: "#ff0000" });
    // 5、创建几何体
    const cube = new THREE.Mesh(geometry, material);// 6、将几何体添加到场景中
    scene.add(cube);
    // 7、初始化渲染器
    const renderer = new THREE.WebGLRenderer();
    // 8、设置渲染的尺寸大小
    renderer.setSize(window.innerWidth, window.innerHeight);// A1、初始化gui
    const gui = new dat.GUI();
    // A2、设置控制台的是否显示属性
    gui.add(cube, "visible").name("是否显示");// A3、设置参数
    const params = {//   A4、设置颜色color: "#ff0000",//   A5、设置立方体的位置移动fn: () => {gsap.to(cube.position, { x: 5, duration: 2, yoyo: true, repeat: -1 });}
    }// A6、增加控制台的目录
    const folder = gui.addFolder("设置立方体");
    // A7、设置材质为线条
    folder.add(cube.material, "wireframe").name("设置外形");
    // A8、目录加入立方体运动的一项
    folder.add(params, "fn").name("开始运动");// A9、创建轨道控制器,像卫星围绕地球旋转
    const controls = new OrbitControls(camera, renderer.domElement);
    // A10、设置控制器阻尼,让控制器更具有真实效果,必须在动画循环调用.update()
    controls.enableDamping = true;
    // A11、添加坐标轴辅助器
    const axesHelper = new THREE.AxesHelper(5);
    // A12、加入到场景中
    scene.add(axesHelper);// 9、加入渲染函数
    function render () {//  10、渲染器渲染场景和相机renderer.render(scene, camera);//  11、渲染下一帧继续使用render函数requestAnimationFrame(render);
    }// 12、挂载阶段
    onMounted(() => {//  13、将目标dom元素加入渲染器boxRef.value.appendChild(renderer.domElement);//  14、调用渲染函数render();
    })</script><style scoped></style>
    

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

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

相关文章

MySql011——检索数据:过滤数据(使用正则表达式)

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、正则表达式介绍 关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》&#xff0c;这里就不再累赘。 二、使用MySQL正则表达式 2.1、基本字符匹配 检索…

阿里云账号注册流程_多种注册方法_图文详解

阿里云账号怎么注册&#xff1f;阿里云账号支持手机号注册、阿里云APP注册、支付宝和钉钉多种注册方式&#xff0c;账号注册后需要通过实名认证才可以购买或使用云产品&#xff0c;阿里云百科来详细说下不同途径注册阿里云账号图文流程&#xff1a; 目录 阿里云账号注册流程 …

一文全览:企业上云的难点、方向、策略、架构和实践步骤

1 概述 2018年8月&#xff0c;工业和信息化部印发《推动企业上云实施指南&#xff08;2018-2020年&#xff09;》&#xff0c;提出到2020年行业企业上云意识和积极性明显提高&#xff0c;上云比例和应用深度显著提升&#xff0c;云计算在企业生产、经营、管理中的应用广泛普及&…

微服务02-docker

1、Docker架构 1.1 镜像和容器 Docker中有几个重要的概念: 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。Docker镜像是用于创建 Docker 容器的模板 。就像面向对象编程中的类。 容器(Container):镜像中的应用程序运…

基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升

查看原文>>>基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升 目录 专题一、生态环评报告编制规范 专题二、土地利用图 专题三、植被类型及植被覆盖度图 专题四、物种适宜生境分布图 专题五、生物多样性测定 专题六…

SQL | 过滤数据

4-过滤数据 4.1-使用WHERE子句 数据根据 WHERE 子句中指定的搜索条件进行过滤。WHERE 子句在表名&#xff08; FROM 子句&#xff09;之后给出。 select prod_name,prod_price from products where prod_price 3.49; 上述语句查询价格为3.49的行&#xff0c;然后输出名字和…

微服务07-分布式缓存

前提: 单机的Redis存在四大问题: 解决办法:基于Redis集群解决单机Redis存在的问题 1、Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化1.1 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所…

力扣 518. 零钱兑换 II

题目来源&#xff1a;https://leetcode.cn/problems/coin-change-ii/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 这是一道典型的背包问题&#xff0c;一看到钱币数量不限&#xff0c;就知道这是一个完全背包。但本题和纯完全背包不一样&#xff0c…

ICMP协议报文

1、CMP协议简介 ICMP&#xff08;Internet Control Message Protocol&#xff09;是一种网络协议&#xff0c;它用于在IP网络中传递控制信息和错误消息。它通常与IP协议一起使用&#xff0c;IP协议负责发送和路由数据包&#xff0c;而ICMP协议负责检查网络是否可达、路由是否正…

【无标题】反应器

private:CUSerDocReactor* m_pDocReactor; // 文档反应器virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt){……………………// TODO: Add your initialization code herem_pDocReactor = new CUTunnelGraphSectionDocReactor;……………………}

【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 游戏角色有攻击力和防御力&#xff0c;在大战Boss前保存自身的状态(攻击力和防御力)&#xff0c;当大战Boss后攻击力和防御力下降&#xff0c;可以从备忘录对象恢复到大战前的状态 传统设计方案 针对每一种角色&#xff0c;设计一个类来存储该角色的状态 【分析】…

Webstorm的一些常用快捷键

下面是Webstorm的一些常用快捷键&#xff1a; ctrl shift n: 打开工程中的文件&#xff0c;目的是打开当前工程下任意目录的文件。ctrl j: 输出模板ctrl b: 跳到变量申明处ctrl alt T: 围绕包裹代码(包括zencoding的Wrap with Abbreviation)ctrl []: 匹配 {}[]ctrl F1…

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节&#xff0c;我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素&#xff0c;那么严格来说&#xff0c;下面的函数就是一个合格的渲染器: // 渲染器&#xff1a; function renderer(domString, container) {container.innerHTM…

Vue toRefs:在Vue中不失去响应式的情况下解构属性

Vue toRefs&#xff1a;在Vue中不失去响应式的情况下解构属性 文章目录 Vue toRefs&#xff1a;在Vue中不失去响应式的情况下解构属性什么是响应式&#xff1f;解构Props的挑战使用toRefs保持响应式结论 在Vue开发中&#xff0c;我们经常会在组件之间传递数据。这时候&#xff…

用js快速生成一个简单的css原子库 例如: .mr-18 .pl-18

第三方css原子库的缺点 比如 tailwindcss&#xff0c;有学习成本最开始写的时候效率可能还没有我们自己手写效率高&#xff0c;需要配置&#xff0c;会有原始样式被覆盖的问题&#xff1b;总之就是一个字重 自己搓的优点 学习成本低灵活不会有副作用 <!DOCTYPE html>…

Linux 终端操作命令(2)内部命令

Linux 终端操作命令 也称Shell命令&#xff0c;是用户与操作系统内核进行交互的命令解释器&#xff0c;它接收用户输入的命令并将其传递给操作系统进行执行&#xff0c;可分为内部命令和外部命令。内部命令是Shell程序的一部分&#xff0c;而外部命令是独立于Shell的可执行程序…

Django笔记之数据库查询优化汇总

1、性能方面 1. connection.queries 前面我们介绍过 connection.queries 的用法&#xff0c;比如我们执行了一条查询之后&#xff0c;可以通过下面的方式查到我们刚刚的语句和耗时 >>> from django.db import connection >>> connection.queries [{sql: S…

蓝桥杯上岸考点清单 (冲刺版)!!!

大家好 我是寸铁&#x1f4aa; 真题千千万万遍&#xff0c;蓝桥省一自然现&#xff01; ✌️ 日更3000里&#xff0c;蓝桥眷顾你 &#x1f31f; 暴力出奇迹&#xff0c;打表过样例 &#x1f44a; 冲刺蓝桥杯省一模板大全来啦 &#x1f525; 蓝桥杯4月8号就要开始了 &#…

Docker安装和维护mantisbt(Ubuntu 18.04)

安装mantisBT 安装docker sudo apt install docker.io -y下载镜像 选择下面的镜像只是因为下载的人多。。。 docker pull xlrl/mantisbt运行镜像 docker run xlrl/mantisbt

Kafka API与SpringBoot调用

文章目录 首先需要命令行创建一个名为cities的主题&#xff0c;并且创建该主题的订阅者。 1、使用Kafka原生API1.1、创建spring工程1.2、创建发布者1.3、对生产者的优化1.4、批量发送消息1.5、创建消费者组1.6 消费者同步手动提交1.7、消费者异步手动提交1.8、消费者同异步手动…