前言:

最近有点无聊,学学three.js,记录一下学习过程,随便给大家避避坑。
我的目标是完成一个室内设计预览的效果(下图),任重而道远啊,最后能不能坚持下去也不知道,不一定有这么多时间去搞,拭目以待吧。

下面就开始了,我用的是Vue3 + vite + three.js,因为可以顺便温习巩固一下vue3。

1. 创建项目

npm init vue@latest


建议使用系统的终端(可以用箭头左右键选择配置),用git bash不能用箭头左右键配置

2. 安装相关依赖

cd vue-three//进入项目目录
npm install//安装基本依赖
npm install three@0.145.0 --save //安装three版本可以更换

3. 引入Three

import * as THREE from 'three';

4.创建第一个3D模型

<template><div id="threeBox"></div>
</template><script setup lang="ts">
import * as THREE from 'three';
import { onMounted } from 'vue';
/*** 创建场景对象Scene*/
var scene = new THREE.Scene();
/*** 创建网格模型*/
// var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象
var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
var material = new THREE.MeshLambertMaterial({color: 0x0000ff
}); //材质对象Material
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
/*** 光源设置*/
//点光源
var point = new THREE.PointLight(0xffffff);
point.position.set(400, 200, 300); //点光源位置
scene.add(point); //点光源添加到场景中
//环境光
var ambient = new THREE.AmbientLight(0x444444);
scene.add(ambient);
// console.log(scene)
// console.log(scene.children)
/*** 相机设置*/
var width = window.innerWidth; //窗口宽度
var height = window.innerHeight; //窗口高度
var k = width / height; //窗口宽高比
var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大
//创建相机对象
var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
camera.position.set(200, 300, 200); //设置相机位置
camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
/*** 创建渲染器对象*/
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);//设置渲染区域尺寸
renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
onMounted(() => {// 一定要在onMounted里面插入canvas,不然是空白页面,因为要等容器加载后再插入;//下面的问号可加可不加,但是我用了typescript,会报错"对象会可能为null",加了问号就不会报错了document.getElementById('threeBox')?.appendChild(renderer.domElement)//向容器插入canvas对象
})
//执行渲染操作   指定场景、相机作为参数
renderer.render(scene, camera);
</script>
<style>
#threeBox {width: 100%;height: 100%;
}
</style>

这里就可以得到一个3D的正方体了

总结

  1. 到这里就简单的创建了一个three模型,其实如果不想用vue的话,也可以直接创建一个html文件,然后引入three包,也可以正常学习,下面的代码也可以生成跟上面一样的3D模型
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>第一个three.js文件_WebGL三维场景</title><style>body {margin: 0;overflow: hidden;/* 隐藏body窗口区域滚动条 */}</style><!--引入three.js三维引擎--><script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script><!-- <script src="./three.js"></script> --><!-- <script src="http://www.yanhuangxueyuan.com/threejs/build/three.js"></script> -->
</head><body><script>/*** 创建场景对象Scene*/var scene = new THREE.Scene();/*** 创建网格模型*/// var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometryvar material = new THREE.MeshLambertMaterial({color: 0x0000ff}); //材质对象Materialvar mesh = new THREE.Mesh(geometry, material); //网格模型对象Meshscene.add(mesh); //网格模型添加到场景中/*** 光源设置*///点光源var point = new THREE.PointLight(0xffffff);point.position.set(400, 200, 300); //点光源位置scene.add(point); //点光源添加到场景中//环境光var ambient = new THREE.AmbientLight(0x444444);scene.add(ambient);// console.log(scene)// console.log(scene.children)/*** 相机设置*/var width = window.innerWidth; //窗口宽度var height = window.innerHeight; //窗口高度var k = width / height; //窗口宽高比var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大//创建相机对象var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);camera.position.set(200, 300, 200); //设置相机位置camera.lookAt(scene.position); //设置相机方向(指向的场景对象)/*** 创建渲染器对象*/var renderer = new THREE.WebGLRenderer();renderer.setSize(width, height);//设置渲染区域尺寸renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色document.body.appendChild(renderer.domElement); //body元素中插入canvas对象//执行渲染操作   指定场景、相机作为参数renderer.render(scene, camera);</script>
</body>
</html>
  1. vue3使用three,有个关键点就是插入canvas一定要在onMounted生命周期里面插入

  2. three的基本元素是模型,光源,相机,后续会一一详细介绍

后续会不定期更新,因为不确定什么时候有空,本人很懒,我有空想起来了,就会更新一下

Three.js的学习之路(一丶创建项目/画出第一个3D模型)相关推荐

  1. Docker学习之路04:创建定制Nginx镜像

    Docker学习之路04:创建定制Nginx镜像 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Do ...

  2. 使用js制作一个3d模型

    在学习js和jq时制作的一个小功能,可实现一个3d模型 可以点击开始旋转 切换背景颜色等 需要引入: <script src="JS/three.js-master/three.js- ...

  3. ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码

    我们前边四个部分已经完成了框架需要的基础配置, 现在我们来完成项目 1.Subsonic 配置,首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 < ...

  4. 三十、开始前端Vue.js的学习之路

    @Author:Runsen @Date:2019/08/07 @modified Date:2019/08/07 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼 ...

  5. UE4学习之路【八】通过蓝图接口制作一个简易门

    在第二期我制作了一个可以由玩家控制开关的简易门,传送门:UE4学习之路[二]制作一个简易门(上),是通过在门的蓝图类里使用Get Player Controller和Enable Input来开启玩家 ...

  6. 【itext学习之路】--1.创建一个简单的pdf文档

    来源:https://blog.csdn.net/tomatocc/article/details/80666011 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文 ...

  7. python学习之路(3)turtle画奥运五环

    目录 turtle的相关函数 五环的图片 五环的原理图 turtle实现 turtle的相关函数 import turtle # 导入turtle模块 turtle.showturtle() #显示箭 ...

  8. vue.js 的学习之路

    转自:http://www.cnblogs.com/CyLee/p/5813721.html 技术栈 # vue官网 http://vuejs.org/# Vuex中文手册 http://vuex.v ...

  9. weex学习之路(一)--项目快速创建

    weex是阿里开源的一款类似react-native的使用js开发客户端的框架,不过使用的前端框架是vue而不是react.不过阿里有另外一个rax框架是类似react的的框架 语法和api基本相同, ...

最新文章

  1. oracle十六进制转数字,16进制如何转化为10进制?
  2. Linux Wi-Fi 编程API介绍
  3. 李开复对话李飞飞:AI要理解人类的情感,还早着呢
  4. 吴恩达机器学习Ex3作业
  5. 选择海外数据中心是否等级越高越好
  6. 【Linux 】使用 Shell 批量重命名文件名称
  7. Go gin运行原理
  8. mysql数据库商业版与社区版的区别
  9. Win11系统如何解除网络限制
  10. MATLAB数学建模方法与实践(第3版)程序及数据
  11. 江门android培训,基于selenium模块的江门市干部培训网络学院自动选课脚本
  12. 安卓智能手机完全装机手册,让安卓拥有无限可能!
  13. vue项目打包部署到tomcat服务器
  14. 不出门远程控制公司电脑,这7个工具让你不用来回跑。
  15. CSS实现文本居中和块级元素居中
  16. vga焊接线顺序_vga线序是怎么排列的?
  17. thinkphp5.1接入银联支付
  18. Type safety: The expression of type List needs unchecked conversion to conform to ListXXX解决办法
  19. 虚拟机centos7克隆
  20. 梦次元poi进不去了_free gv video GV

热门文章

  1. android6.0恢复出厂设置
  2. QTextBrowser文本浏览器的一些设置
  3. 能让你笑出八块腹肌的内涵手游|Cocos强势围观
  4. 石家庄机场停车场收费标准2022,石家庄机场停车费怎么收费
  5. Web|Html页面编码原理
  6. 运维工程师第一阶段windows的学习
  7. 关于帕金森的早中晚期症状表现
  8. python 提取文字段落中的日期字符串
  9. 二本出身、逆袭网易、一路孤独、一路狂欢!
  10. 手把手讲解-一个复杂动效的自定义绘制3,膜拜大佬