问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

threejs3d环形?

发布网友 发布时间:2024-09-17 00:44

我来回答

1个回答

热心网友 时间:2024-11-03 16:02

Threejs基本概念(四)几何体

CircleGeometry

圆形

RingGeometry

环形

PlaneGeometry

矩形的几何体

ShapeGeometry

通过路径构建一个多边形=自定义形状

BoxGeometry

长方体

TetrahedronGeometry

四面体

ConeGeometry

圆锥

CylinderGeometry

圆柱

DodecahedronGeometry

十二面体

IcosahedronGeometry

二十面体

OctahedronGeometry

八面体

SphereGeometry

球体

TorusGeometry

圆环几何

TubeGeometry

管状体

LatheGeometry

轴向对称:例如花瓶

PolyhedronGeometry

多面体=顶点+面

注:将它们投射到球体上,然后将其分割到所需的细节水平

ParametricGeometry

通过函数构建几何体,参量体

TextGeometry

文字体

TorusKnotGeometry

创建圆环结,其特殊形状由一对互质整数p和q定义。如果p和q不是互质的,结果将是环面连接。

ExtrudeGeometry

伸出的几何体,该对象将2D形状挤出到3D几何体。

EdgesGeometry

获取几何体的边线

WireframeGeometry

作帮助对象来将几何对象视为线框

ThreeJS简介

近年来web得到了快速的发展。随着HTML5的普及,网页的表现能力越来越强大。网页上已经可以做出很多复杂的动画,精美的效果。但是,人总是贪的。那么,在此之上还能做什么呢?其中一种就是通过WebGL在网页中绘制高性能的3D图形。

OpenGL它是最常用的跨平台图形库。

WebGL是基于OpenGL设计的面向web的图形标准,提供了一系列JavaScriptAPI,通过这些API进行图形渲染将得以利用图形硬件从而获得较高性能。

而Three.js是通过对WebGL接口的封装与简化而形成的一个易用的图形库。

简单点的说法threejs=three+js,three表示3D的意思,js表示javascript的意思。那么合起来,three.js就是使用javascript来写3D程序的意思。而javascript的计算能力因为google的V8引擎得到了迅猛的增强,做3D程序,做服务器都没有问题。

WebGL门槛相对较高,需要相对较多的数学知识(线性代数、解析几何)。因此,想要短时间上手WebGL还是挺有难度的。Three.js对WebGL提供的接口进行了非常好的封装,简化了很多细节,大大降低了学习成本。并且,几乎没有损失WebGL的灵活性。

因此,从Three.js入手是值得推荐的,这可以让你在较短的学习后就能面对大部分需求场景。

Three.js的入门是相对简单的,但是当我们真的去学的时候,会发现一个很尴尬的问题:相关的学习资料很少。

通常这种流行的库都有很完善的文档,很多时候跟着官方的文档或官方的入门教程学习就是最好的路线。但Three不是的,它的文档对初学者来说太过简明扼要。

不过官方提供了非常丰富的examples,几乎所有你需要的用法都在某个example中有所体现。但这些example不太适合用来入门,倒是适合入门之后的进一步学习。

这里推荐一些相对较好的教程:

当然,实际的学习过程中这些资料肯定是不太够的,遇到问题还是要自己去查资料。不过这里要提醒一下,Three.js的更新是相当频繁的,现在是r80版本,自2010年4月发布r1以来,这已经是第72个版本了(中间有的版本号跳过了)。因此,在网上找到的资料有些可能是不适合当前版本的,需要注意甄别(前面推荐的资料也都或多或少存在这样的问题)。

要在屏幕上展示3D图形,思路大体上都是这样的:

1、构建一个三维空间

Three中称之为场景(Scene)

2、选择一个观察点,并确定观察方向/角度等

Three中称之为相机(Camera)

3、在场景中添加供观察的物体

Three中的物体有很多种,包括Mesh,Line,Points等,它们都继承自Object3D类

4、将观察到的场景渲染到屏幕上的指定区域

Three中使用Renderer完成这一工作

场景是所有物体的容器,也对应着我们创建的三维世界。

Camera是三维世界中的观察者,为了观察这个世界,首先我们要描述空间中的位置。Three中使用采用常见的右手坐标系定位。

Three中的相机有两种,分别是正投影相机THREE.OrthographicCamera和透视投影相机THREE.PerspectiveCamera。

这里补充一个视景体的概念:视景体是一个几何体,只有视景体内的物体才会被我们看到,视景体之外的物体将被裁剪掉。这是为了去除不必要的运算。

正交投影相机的视景体是一个长方体,OrthographicCamera的构造函数是这样的:

Camera本身可以看作是一个点,left则表示左平面在左右方向上与Camera的距离。另外几个参数同理。于是六个参数分别定义了视景体六个面的位置。

可以近似地认为,视景体里的物体平行投影到*面上,然后*面上的图像被渲染到屏幕上。

2)透视投影相机

fov对应着图中的视角,是上下两面的夹角。aspect是*面的宽高比。在加上*面距离near,远平面距离far,就可以唯一确定这个视景体了。

透视投影相机很符合我们通常的看东西的感觉,因此大多数情况下我们都是用透视投影相机展示3D效果。

有了相机,总要看点什么吧?在场景中添加一些物体吧。

Three中供显示的物体有很多,它们都继承自Object3D类,这里我们主要看一下Mesh和Points两种。

1)Mesh

我们都知道,计算机的世界里,一条弧线是由有限个点构成的有限条线段连接得到的。线段很多时,看起来就是一条平滑的弧线了。

计算机中的三维模型也是类似的,普遍的做法是用三角形组成的网格来描述,我们把这种模型称之为Mesh模型。

geometry是它的形状,material是它的材质。

不止是Mesh,创建很多物体都要用到这两个属性。下面我们来看看这两个重要的属性。

2)Geometry

Geometry,形状,相当直观。Geometry通过存储模型用到的点集和点间关系(哪些点构成一个三角形)来达到描述物体形状的目的。

Three提供了立方体(其实是长方体)、平面(其实是长方形)、球体、圆形、圆柱、圆台等许多基本形状;

你也可以通过自己定义每个点的位置来构造形状;

对于比较复杂的形状,我们还可以通过外部的模型文件导入。

3)Material

Material,材质,这就没有形状那么直观了。

材质其实是物体表面除了形状以为所有可视属性的集合,例如色彩、纹理、光滑度、透明度、反射率、折射率、发光度。

这里讲一下材质(Material)、贴图(Map)和纹理(Texture)的关系。

材质上面已经提到了,它包括了贴图以及其它。

贴图其实是‘贴’和‘图’,它包括了图片和图片应当贴到什么位置。

纹理嘛,其实就是‘图’了。

Three提供了多种材质可供选择,能够自由地选择漫反射/镜面反射等材质。

4)Points

讲完了Mesh,我们来看看另一种Object——Points。

Points其实就是一堆点的集合,它在之前很长时间都被称为ParticleSystem(粒子系统),r68版本时更名为PointCloud,r72版本时才更名为Points。更名主要是因为,Mr.doob认为,粒子系统应当是包括粒子和相关的物理特性的处理的一套完整体系,而Three中的Points简单得多。因此最终这个类被命名为Points。

5)Light

神说:要有光!

光影效果是让画面丰富的重要因素。

Three提供了包括环境光AmbientLight、点光源PointLight、聚光灯SpotLight、方向光DirectionalLight、半球光HemisphereLight等多种光源。

只要在场景中添加需要的光源就好了。

6)Renderer

在场景中建立了各种物体,也有了光,还有观察物体的相机,是时候把看到的东西渲染到屏幕上了。这就是Render做的事情了。

Renderer绑定一个canvas对象,并可以设置大小,默认背景颜色等属性。

调用Renderer的render函数,传入scene和camera,就可以把图像渲染到canvas中了。

现在,一个静态的画面已经可以得到了,怎么才能让它动起来?

很简单的想法,改变场景中object的位置啊角度啊各种属性,然后重新调用render函数渲染就好了。

那么重新渲染的时机怎么确定?

HTML5为我们提供了requestAnimFrame,它会自动在每次页面重绘前调用传入的函数。

如果我们一开始这样渲染:

只需要改成这样:

object就可以动起来了!

下面我们用一个简单的例子来梳理一下这个过程。

首先写一个有Canvas元素的页面吧。

下面来做Javascript的部分

首先初始化Renderer

初始化场景:

初始化相机:

要唯一确定一个相机的位置与方向,position、up、lookAt三个属性是缺一不可的。

这里我们创建了一个正交投影相机,这里我将视景体大小与屏幕分辨率保持一致只是为了方便,这样坐标系中的一个单位长度就对应屏幕的一个像素了。

我们将相机放在Z轴上,面向坐标原点,相机的上方向为Y轴方向,注意up的方向和lookAt的方向必然是垂直的(类比自己的头就知道了)。

下面添加一个立方体到场景中:

注意我们使用了法向材质MeshNormalMaterial,这样立方体每个面的颜色与这个面对着的方向是相关的,更便于观察/调试。

在这个简单的demo里我不打算添加光影效果,而法向材质对光也是没有反应的。最后来创建一个动画循环吧

每次重绘都让这个立方体转动一点点。当页面加载好时,调用前面这些函数就好了。

WebGL中文网强烈推荐!!

WebGL中文教程网

vite+vue3+threejs实现一个3D模型的展示案例

1.检查npm-v版本和使用对应的vite安装vue3项目

需要安装依赖:npminstall

运行:npmrundev

目录结构:

2.threejs官网:

3.安装threejs

4.准备3D模型素材(我这里使用glb格式)和HDR图片,素材网上可以找有免费的。

5.在App.vue中绑定id,挂载,实例化使用

6.在项目中的src目录下创建utils目录,在utils目录下创建Base3d.js脚本

效果展示:手机模型已经加载至场景中,背景是hdr图。

功能展示:用户可以滑动滚轮将模型进行放大缩小,场景360度无死角旋转。

一、THREEJS使用入门

1、THREEJS官方网址:u。/uthreejs通过封装WEBGLAPI实现了在网页端直接进行三维3d模型渲染。应用场景包括:小游戏,在线展厅,DIY互动等现代互联网应用,极具发展前景。

2、官方使用案例,可以直接套用。

以u;/u为例,讲解如何使用Threejs构建自己的应用:

步骤一、新建html页面。

3、如何在vue中引入THREEJS

步骤一、新建threejs组件,ZeusStage.vue

步骤二、调用ZeusStage.vue组件

微信小程序ThreeJs加载3D模型

微信小程序使用ThreeJs需要使用官方库threejs-miniprogram,API和原生ThreeJS基本一样,很好上手。喜欢数字孪生或者游戏的朋友,强烈推荐学习ThreeJs。该库入门简单,官方有很多优秀的demo可供参考,文档(包含中英文)也比较详细。有计划用ThreeJS做一个动物世界,模拟原始森林里各种各样的有趣的可爱的动物,包括它们声音和故事。有兴趣的或想加入这个计划的朋友可以在下面留言。

添加canvash画布,设置宽度100%,高度设置为屏幕高度减去状态栏高度和导航栏高度。

导入threejs,并创建threejs变量传入模型中,方便使用该变量。

Threejs基本概念(六)加载器

Loader

FileLoader

FontLoader

ImageLoader

JSONLoader

Cache

缓存

MaterialLoader

ObjectLoader

TextureLoader

AnimationLoader

用于以JSON格式加载动画的类。

AudioLoader

加载

BufferGeometryLoader

用于加载BufferGeometry的装载器。这在内部使用FileLoader来加载文件。

MaterialLoader

用于以JSON格式加载素材的加载器

ObjectLoader

用于加载JSON资源的加载程序,此加载程序无法加载几何

TextureLoader

基类

CompressedTextureLoader

基于块的纹理加载器(dds,pvr,...)的抽象基类

CubeTextureLoader

立方体加载器

DataTextureLoader

抽象基类加载通用二进制纹理格式(rgbe,hdr,...)

MaterialLoader

用于以JSON格式加载素材的加载器

ObjectLoader

TextureLoader

BabylonLoader

.babylon

ColladaLoader

.dae

GLTF2Loader

.gltf

MTLLoader

.mtl资源的装载器(材质)

OBJLoader

.obj资源的装载器(3d对象)

OBJLoader2

.obj资源的装载器(3d对象)

WWOBJLoader2

用于在webworker中加载.obj资源的装载器。(3d对象)

PCDLoader

用于.pcd文件的加载程序。加载ascii和二进制。不支持压缩的二进制文件(3d对象)

PDBLoader

.pdb是geometryAtoms,geometryBonds和JSON结构。

SVGLoader

TGALoader

加载.tga文件纹理的类。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 第167期:threejs最简单的例子 threejs介绍(threejs介绍) 十一想去黄骅海钓,不乘船出海了!在哪调合适? 今年想去黄骅去海钓,本人没在海边钓过,想先在边上试一下,明白人,给几... 大家给个建议。学校校门口用检测器查手机。有什么方法过 改名字在哪改?花钱吗?要家长陪同或签字吗? 急需《鲁宾逊漂流记》的故事梗概(200~300)字,谢谢了!! gpon和10gpon有什么区别 ...业务板上的模块最多支持多少个ONU,最大分光比是多少 我儿子七岁左下颚长了个囊肿该怎么办 七岁儿童右贤囊肿38x3.4可以治疗吗 我儿子前额七岁时检查出有蛛网膜囊肿。但是复查到现在都没有长大的... 七岁的孩子得了腘窝囊肿,不想做手术、请问有没有好的办法? 左侧额顶部交界处蛛网膜囊肿怎么办 新时代大学生如何弘扬中国优秀传统文化? 如何弘扬和传承中国传统优秀文化 诸葛亮有复原图吗?有的话求一张 我的手机之前更新系统卡住,我强制关机,白苹果了,后来我用itunes恢复_百... 路面h是什么意思? iphone开机卡在白苹果怎么办? 北京到上海,Three.js旅行轨迹的可视化 WebGL衍生的第三方库:ThingJS和threejs两个3D框架比较 血氧饱和度85的危害 红米怎么卡刷降级 红米note11pro怎么降级系统版本 飞行器设计与工程就业情况怎么样,难度大吗,一般上什么单位,工资怎么... 飞行器设计与工程专业有什么条件限制 哪些交友聊天软件可以免费使用? 吊兰怎么养才能更旺盛呢?学会这些方法,让你的吊兰长到停不下来哦!_百... 吊兰应该怎么养才能更旺盛?教你养出美丽优雅又健康的吊兰! 如何让吊兰长得快 吊兰怎么养殖才能更旺盛 不露脸唱歌可以赚钱吗? 山西临汾古县农村社保卡交的250元钱能累计吗? 农村社保卡一年280刚刚交能使用吗? 杜高能猎狍子吗,狍子比野猪多吧。 成都周边适合旅游的城市,资阳到广汉途中的旅游景点 荷兰股市叫什么 招聘顾问招聘顾问的主要职责 研究院院长英语怎么说