Threejs - 搭建三维场景

简介: Threejs - 搭建三维场景

前言

随着计算机技术的飞升,可视化在web端的应用,3D交互已经渐渐走进大家的眼帘..
前端技术革新,往后的需求也会对前端人员的要求越来越高。以前webgl工程师、gis工程师、前端工程师、ui工程师等可能都有着明确的分工。
但现在,一门技术的get,无疑是在企业中的一个亮点。曾经渴望绘制漂亮的canvas,如今想掌握3d技术...这都是进步与发展。如果你想跳过webgl底层
想熟练的在web端运用3D技术,那无疑当前最火的three.js是你最好的选择
当然,当你学到一定程度,返璞归真。了解webgl的底层原理也是一个升华的必经之路。。。

Threejs ?

1:three是什么?
2:三大基础组件:scene(场景),renderer(渲染器),camera(相机)
3:对象,几何,网状几何
4:灯光材质
5:数学库
6:controls
7:数据模型
8:返璞归真....


基础环境搭建

1. nodejs (官方下载安装即可)

2. Vue 环境搭建(采用vue-cli脚手架)

3. Threejs 文件引入 (本事列采用直接引入的方式,因为threejs 使用npm 的方式引入会存在各种未知的错误,本人也处于入门阶段,避免踩坑)

4. 具备前端基础知识


废话不多说,直接上代码


<template>  <div ref="content"></div></template>
<script>// 引入threejsimport * as THREE from "../../public/build/three";//鼠标控制import { OrbitControls } from "../../public/example/jsm/controls/OrbitControls.js";
export default {  components: {},  data() {    return {      // 创建一个场景      scene: null,      // 创建一个相机      camera: null,      // 创建一个渲染器      renderer: null,      // 模型对象      mesh: null    };  },
  mounted() {    this.init();  },  methods: {    // 初始化    init() {      // 初始化容器      var content = this.$refs.content;
      // 创建一个场景      this.scene = new THREE.Scene();      this.scene.background = new THREE.Color("#000");
      // 创建几何体      var geometry = new THREE.BoxBufferGeometry(10, 10, 10);      // 几何体材质对象      var material = new THREE.MeshPhongMaterial({        color: "#FFF"      });
      // 创建网格模型对象      this.mesh = new THREE.Mesh(geometry, material);      this.scene.add(this.mesh);
      // 创建点光源      var point = new THREE.PointLight("#FFF");      point.position.set(40, 20, 30);      this.scene.add(point);
      const sphereSize = 10;      const pointLightHelper = new THREE.PointLightHelper(point, sphereSize);      this.scene.add(pointLightHelper);
      //创建环境光      var ambient = new THREE.AmbientLight(0x444444);      this.scene.add(ambient);
      // 创建一个相机      this.camera = new THREE.PerspectiveCamera(        70,        window.innerWidth / window.innerHeight,        1,        10000      );      this.camera.position.set(-50, 50, 50);      this.camera.lookAt(0, 0, 0);
      //坐标轴辅助器,X,Y,Z长度30      var axes = new THREE.AxesHelper(300);      this.scene.add(axes);      // 辅助网格      let gridHelper = new THREE.GridHelper(100, 100);      this.scene.add(gridHelper);
      // 创建渲染器      this.renderer = new THREE.WebGLRenderer();      this.renderer.setSize(window.innerWidth, window.innerHeight);      this.renderer.setClearColor(0xb9d3ff, 1);      //插入 dom 元素      content.appendChild(this.renderer.domElement);
      let controls = new OrbitControls(this.camera, this.renderer.domElement);      controls.addEventListener("resize", this.render(), false);    },
    render() {      this.renderer.render(this.scene, this.camera);      // 自动旋转动画      this.mesh.rotateY(0.01);      requestAnimationFrame(this.render);    }  }};</script>
<style lang="scss" scoped></style>

Threejs 采用的是右手坐标系,什么是右手坐标系 ? 直接看下图image.png

相关文章
|
机器学习/深度学习 人工智能 自动驾驶
「AIGC」Agent AI智能体的未来:技术、伦理与经济的交汇点
Agent AI智能体融合机器学习与深度学习,推动社会效率与创新,但也引发伦理、法律及就业挑战。技术上,它们能自我优化、积累知识,如自动驾驶汽车通过学习改善驾驶。伦理上,需建立AI准则,确保透明度和责任归属,如医疗AI遵循道德原则。经济上,AI改变就业市场结构,创造新职业,如AI顾问,同时要求教育体系更新。未来,平衡技术进步与社会影响至关重要。
817 0
|
11月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
182 2
利用java8 的 CompletableFuture 优化 Flink 程序
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
369 2
|
存储 算法 安全
深入理解操作系统的内存管理机制
【5月更文挑战第25天】 本文旨在探索和剖析操作系统中至关重要的一环——内存管理。不同于常规的技术解读,我们将从操作系统的角度出发,深入分析内存管理的基本原理、关键组件以及其对系统性能的影响。通过本文,读者将获得对操作系统内存管理机制深层次的认识,包括物理内存与虚拟内存的映射关系、分页系统的工作原理以及内存分配策略等关键技术点。文章还将讨论现代操作系统如何通过优化内存使用提高系统效率,以及内存安全与保护机制的重要性。
idea快捷键:全局搜索文件,代码,接口,ctrl+shift+f无效?也可以点击Edit 点击Find Replace in path
idea快捷键:全局搜索文件,代码,接口,ctrl+shift+f无效?也可以点击Edit 点击Find Replace in path
|
算法 Java 调度
Java数据结构与算法:拓扑排序
Java数据结构与算法:拓扑排序
|
人工智能 自然语言处理 PyTorch
Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”
Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”
Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”
|
小程序 开发者
小游戏的备案对个人开发者的影响
小游戏的备案对个人开发者的影响
656 0
Linux设备深探:桥接硬件与软件的秘密通道
在Linux的世界里,"设备"这个词汇比你想象的要丰富和多彩得多。让我们一起来探索Linux设备的奥秘,理解它们是如何在Linux操作系统中发挥作用的。🐧✨
Linux设备深探:桥接硬件与软件的秘密通道