元宇宙基础-Three.js | 大帅老猿threejs特训营

这篇博客介绍了WebGL的基础和Three.js在Web3D开发中的作用,详细讲解了Three.js的基本概念,包括模型、贴图、坐标系和相机类型。还探讨了Blender在3D建模中的应用,以及如何将Blender模型导入Three.js进行展示和交互。通过一系列的作业打卡,逐步展示了如何创建和控制3D角色在展厅中自由游览的场景,涵盖了灯光、阴影、人物动作和碰撞的设置。
摘要由CSDN通过智能技术生成

day01作业打卡

WebGL简介

WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScriptOpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化

WebGL使用需要图形学知识,对WebGL编程可以通过js和glsl两种语言。如果想直接使用WebGL,使用者可以采用着色器(Shader)用来实现图像渲染的,但对于新手来说,Shader还是困难的。这时我们可以使用Three.js来简化我们对底层图形学的开发知识,更快的上手3D开发过程。

与2D技术相比,Web3D技术运用,可以通过三维呈现,可以更立体,交互更好的展示企业信息,现在的很多智慧项目,如数字孪生,智慧城市都使用到了3D可视化技术。

Web3D的主要展示方式:

  • 第一种:浏览器直接渲染:电脑浏览器、移动端浏览器(包括微信浏览器) 微信小程序;
  • 第二种:服务端渲染(服务端运行,效果好,运营成本高);将3D画面像素推流到前端浏览器/小程序展示;

3D近几年流行的相关概念:

  • 数字孪生:三维实景模型 + 多系统监控/告警数据,实现远程监管(监控、管理);
  • VR:把人装进虚拟环境
  • AR:把虚拟装进现实

浏览器运行3D的方案

  1. ActiveX插件: IE、Chrome老版本、Firefox老版本,已过时;
  2. Flash: 时代王者,官方已停止维护;
  3. WebGL: 浏览器原生支持(IE11基本支持,其它浏览器基本都支持)
  4. WebGPU: 性能高,目前还未得到操作系统和浏览器的广泛支持;

可实现发布WebGL到浏览器的运行方案(从重到轻):

image.png

Three.js基础

官网以及下载

Three.js的官网
Three.js下载地址:github下载国内码云

什么是3D模型,模型由什么构成?什么是贴图?

3D模型为三维立体展示的模型,模型由网格、材质、贴图等部分组成,贴图的作用是描述物体表面的材质。
image.png

空间坐标系

image.png

相机类型

image.png

基础场景三大件

  • scene 场景 new THREE.Scene();
  • camera 相机 new THREE.PerspectiveCamera(75.windw)
  • renderer 渲染器 new THREE.WebGLRenderer();

灯光

image.png

材质

image.png

Blender美术协作基础

Blender简介

Blender是一款免费开源三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。
Blender拥有方便在不同工作下使用的多种用户界面,内置绿屏抠像、摄像机反向跟踪、遮罩处理、后期结点合成等高级影视解决方案。Blender内置有Cycles渲染器与实时渲染引擎EEVEE 。同时还支持多种第三方渲染器。
Blender为全世界的媒体工作者和艺术家而设计,可以被用来进行三维可视化,同时也可以创作广播和电影级品质的视频,另外内置的实时三维游戏引擎,让制作独立回放的三维互动内容成为可能(游戏引擎在2.8版本被移除)。

Blender功能

完整集成的创作套件,提供了全面的 3D 创作工具,包括:

建模(Modeling)、UV 映射(uv-Mapping)、贴图(Texturing)、绑定(Rigging)、蒙皮(Skinning)、动画(Animation)、粒子(Particle)和其它系统的物理学模拟(Physics)、脚本控制(Scripting)、渲染(Rendering)、运动跟踪(Motion Tracking)、合成(Compositing)、后期处理(Post-production)和游戏制作(已移除 [1] );

跨平台支持:

它基于 OpenGL 的图形界面在任何平台上都是一样的(而且可以通过 Python 脚本自定义),可以工作在所有主流的 Windows(10、8、7、Vista)、Linux、OS X 等众多其它操作系统上;

Blender下载与安装

Blender官方下载
image.png

将下载好的安装包blender-3.4.0-windows-x64.msi直接运行
image.png

软件默认是英文的,在欢迎页面可以选择中文和英文,也可以在进入软件后,依次点击Edit-Preference,进入设置界面选择各自的语言。
image.png

Blender视图基本操作

image.png

获取模型资源

www.sketchfab.com

Three.js掉落的甜甜圈案例编写代码并运行

import * as THREE from 'three';
import {
    OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import {
    GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import {
    RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';

let mixer;

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.01, 10);
const renderer = new THREE.WebGLRenderer({
    antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

camera.position.set(0.3, 0.3, 0.5);

const controls = new OrbitControls(camera, renderer.domElement);

// scene.background = new THREE.Color(0.6, 0.6, 0.6);

// const ambientLight = new THREE.AmbientLight(0xffffff, 0.2);
// scene.add(ambientLight);

const directionLight = new THREE.DirectionalLight(0xffffff, 0.4);
scene.add(directionLight);

// const boxGeometry = new THREE.BoxGeometry(1,1,1);
// const boxMaterial = new THREE.MeshBasicMaterial({color: 0x00ff00});
// const boxMesh = new THREE.Mesh(boxGeometry, boxMaterial);
// scene.add(boxMesh);

let donuts;
new GLTFLoader().load('../resources/models/donuts.glb', (gltf) => {
   

    console.log(gltf);
    scene.add(gltf.scene);
    donuts = gltf.scene;

    // gltf.scene.traverse((child)=>{
   
    //     console.log(child.name);
    // })

    mixer = new THREE.AnimationMixer(gltf.scene);
    const clips = gltf.animations; // 播放所有动画
    clips.forEach(function (clip) {
   
        const action = mixer.clipAction(clip);
        action.loop = THREE.LoopOnce;
        // 停在最后一帧
        action.clampWhenFinished = true;
        action.play();
    });

})

new RGBELoader()
    .load('../resources/sky.hdr', function (texture) {
   
        scene.background = texture;
        texture.mapping = THREE.EquirectangularReflectionMapping;
        scene.environment = texture;
        renderer.outputEncoding = THREE.sRGBEncoding;
        renderer.render(scene, camera);
});

function animate() {
   
    requestAnimationFrame(animate);

    renderer.render(scene, camera);

    controls.update();

    if (donuts){
   
        donuts.rotation.y += 0.01;
    }

    if (mixer) {
   
        mixer.update(0.02);
    }
}

animate();

代码运行大功告成!
image.png

day02作业打卡

用blender建立自己的展馆模型
blender用到的知识点有:面、边、顶点、添加字体、uv展开,旋转、移动、缩放等操作。
其中uv展开非常重要,是为了使物体更好展示部分贴图的展现,包括块面投影、柱面投影、球面投影。

blender建立展馆模型

image.png

three.js展示展馆模型编写代码并运行

import * as THREE from 'three';
import {
    OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import {
    GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import {
    RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';

let mixer;

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 100);
const renderer = new THREE.WebGLRenderer({
    antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

camera<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AR室内导航是利用增强现实(AR)技术结合Three.js开发的一种应用。AR技术能够将虚拟的三维图像在现实环境中展示出来,而Three.js是一种用于在Web浏览器中创建和展示三维图形的JavaScript库。 AR室内导航基于用户所在的位置和目标位置,通过设备摄像头获取实时图像,并将虚拟导航信息叠加在图像上,为用户提供导航的帮助。利用Three.js的技术,可以实现将建筑、室内设施等三维模型与实际场景相结合,使用户能够直观地了解周围环境和导航路径。 开发AR室内导航需要进行以下步骤:首先,利用AR技术获取实时的摄像头图像。其次,借助Three.js创建和加载三维模型,包括建筑和室内设施的模型。然后,通过算法将虚拟模型与实际场景对齐,确保其在图像中的正确展示。最后,根据用户的位置和目标位置,计算出导航路径并在图像上显示出来。 AR室内导航在现实生活中具有广泛的应用前景。比如,可以应用于商场、机场等大型室内空间,帮助用户快速找到目标位置;也可以用于导览系统,为用户提供关于展览品的信息和导览路径;甚至可以应用于室内导航机器人,帮助机器人自主地完成室内导航任务。 总之,AR室内导航结合了增强现实和Three.js技术,可以有效利用虚拟的三维图像为用户提供室内导航的帮助,具有广泛的应用前景。AR技术和Three.js技术的不断发展将进一步推动AR室内导航的创新和应用。 ### 回答2: AR室内导航是一种利用增强现实技术为用户提供室内导航服务的应用。而Three.js是一款基于WebGL的开源JavaScript 3D库,可以在网页上创建并展示3D图形和动画。 通过结合AR技术和Three.js库,可以实现AR室内导航服务。首先,我们需要收集室内的地图数据,并将其转换为Three.js可以处理的格式。这些地图数据包括建筑物的结构、房间的位置、通道、门窗等信息。 接下来,利用AR技术,我们可以在用户的手机或者其他设备的摄像头画面上叠加虚拟信息,如地图、导航路径等。用户可以通过观看屏幕上的现实场景,同时看到与现实世界相结合的虚拟导航信息,以指导其在室内进行导航。 在AR室内导航中,利用Three.js可以创建虚拟的建筑物模型和导航路径。借助于Three.js的3D渲染功能,我们可以根据地图数据绘制建筑物的3D模型,并在模型上标记房间名称、导航路径等信息。用户可以通过观察屏幕上的AR场景,准确地了解自己当前所处的位置和前进方向。 另外,AR室内导航还可以结合其他功能,如语音导航、路径规划等。通过结合语音识别技术,用户可以通过语音指令告诉设备他们想去的目的地,然后AR导航系统可以为用户提供路径规划并进行语音导航指引。 总体而言,AR室内导航结合了增强现实技术和Three.js库的优势,为用户提供了更直观、沉浸式的室内导航体验。通过利用现有技术的结合,我们可以帮助用户更轻松地找到目的地,并提升室内导航的效率和准确性。 ### 回答3: AR室内导航是一种利用增强现实技术和Three.js库实现的室内导航系统。AR(增强现实)技术是指通过手机相机或其他设备的摄像头捕捉现实世界的图像,并在图像上叠加虚拟对象或信息的技术。Three.js是一个基于WebGL的开源JavaScript库,可以用于创建和显示三维图形和动画。 AR室内导航系统利用摄像头捕捉室内环境的图像,通过图像处理和计算机视觉技术,识别出室内场景中的相关特征,如墙壁、楼梯、门等。然后,通过Three.js库创建虚拟的导航界面,将用户当前位置和目标位置在AR视图中显示出来。 用户只需要将手机摄像头对准室内环境,系统会通过AR技术识别出当前位置,并在屏幕上叠加导航界面。导航界面可以显示当前位置的平面示意图,以及路径指示标记,指引用户前往目标位置。用户可以通过手机屏幕上的虚拟按钮或手势交互,进行导航的操作,如放大和缩小地图、切换楼层、选择目标位置等。 AR室内导航系统的优势在于可以提供更直观、准确的室内导航体验。用户只需要通过手机摄像头观察现实场景,并在屏幕上看到导航界面,就可以轻松地找到目标位置,不再需要依赖图纸或标识牌。同时,Three.js库的强大功能也为导航界面的设计和交互提供了灵活性和自定义性。 总而言之,AR室内导航系统结合了增强现实技术和Three.js库,为用户提供了更直观、准确的室内导航体验,使得在复杂的室内环境中找到目标位置变得更加简单和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值