threejs入门使用

news/2024/7/24 12:14:48 标签: 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;
    
  •  动画(Mixer)

    // 1、在加载3D模型的方法中,使用AnimationMixer存入到变量mixer中
    loader.load( 'models/gltf/LittlestTokyo.glb', function ( gltf ) {
        mixer = new THREE.AnimationMixer( gltf.scene );
    	mixer.clipAction( gltf.animations[ 0 ] ).play();
    });
    
    // 2、在animate中使用update函数
    function animate() {
        // 间隔几秒更新
        mixer.update(1);
        requestAnimationFrame(animate);
    }
    
  • 在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.niftyadmin.cn/n/4935523.html

相关文章

第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解

第三章&#xff0c;矩阵&#xff0c;07-用初等变换求逆矩阵、矩阵的LU分解 一个基本的方法求 A − 1 B A^{-1}B A−1BLU分解例1&#xff0c;求矩阵A的LU分解&#xff1a;例12&#xff0c;LU分解解线性方程组&#xff1a; 玩转线性代数(19)初等矩阵与初等变换的相关应用的笔记&a…

webpack 创建VUE项目

1、安装 node.js 下载地址&#xff1a;https://nodejs.org/en/ 下载完成以后点击安装&#xff0c;全部下一步即可 安装完成&#xff0c;输入命令验证 node -vnpm -v2.搭建VUE环境 输入命令&#xff0c;全局安装 npm install vue-cli -g安装完成后输入命令 查看 vue --ver…

033_小驰私房菜_Qcom平台8系列-Dump Jpeg Jpeg Exif信息修改

全网最具价值的Android Camera开发系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 平台:高通8系列 jpeg相关代码逻辑在camx/src/swl/jpeg/ 路径下 一、Dump Jpeg 有时我们想把hal这边拍照的jpe…

php通过各种函数判断0和空php实例

php通过各种函数判断0和空php实例 本文给大家介绍php同各种函数判断0和空的方法&#xff0c;在文章给大家补充介绍了php 语法里0不等于null为空的解决办法 补充&#xff1a;下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我…

C++入门之语法

不想写std::怎么办 https://blog.csdn.net/CSDN_fzs/article/details/105678692 1 基础必会 1.3 变量 作用&#xff1a;给一段指定的内存空间起名&#xff0c;方便操作这段内存 语法&#xff1a;数据类型 变量名 初始值; 示例&#xff1a; #include<iostream> usi…

node配置Web 服务器

1、什么是 Web 服务器 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;Web服务器的基本功能就是提供Web信息浏览服务。 它只需支持HTTP协议、HTML文档格式及URL&#xff0c;与客户端的网络浏览器配合。 大多数 web 服务器都支持服…

线性回归例子

我只是代码的搬运工&#xff0c;代码原地址&#xff1a;https://www.cnblogs.com/BlairGrowing/p/15428515.html import numpy as np import torch from torch import nn from torch.utils import data import matplotlib.pyplot as plt #解决内核挂掉 import osos.environ[&qu…

Java 基础知识点

Object 类相关方法 getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象&#xff0c; 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝&#xff0c;对引用类型拷贝引用&#xff1b;深拷贝对基本类型进行值拷贝&#xff0c;对…