首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ThreeJS实现船行效果

鼠标移动或者点击到导入的模型, 如何捕获 解决方法: 官方提供了射线捕获的接口 raycaster.intersectObjects, 但是只能识别自建的Mesh模型, 对于导入的模型无法捕获, 主要是因为导入的模型最外层包了一层..., 没有把自己内部的Mesh暴露出来 所以我们需要在模型导入后, onProgress回调中对其进行递归获取子Mesh, 将所有Mesh存在一个全局数组中....鼠标事件触发时, 将全局数组提供给raycaster.intersectObjects, 即可识别 1....2D平面展示有两种, 一种是这个项目里的鼠标触碰直升机的提示牌, 时刻与摄像头同一角度的2D平面; 另一种是只一个方向上可见的2D平面 ? 多角度可见的2D平面 ?...固定角度可见的2D平面 解决方法 首先是第一种, 多角度的2D平面.

4.7K32

基于 Threejs 的 web 3D 开发入门

相机:Threejs必须要有往场景中添加一个相机,相机用来确定观察位置、方向、角度,相机看到的内容,就是我们最终屏幕上看到的内容。程序运行过程中,可以调整相机的位置、方向、角度。...渲染 Threejs绘制的东西,最终需要在屏幕一块矩形画布上显示出来。为了实现动画效果,我们需要有一个重绘机制。...大部分场景都适合使用透视投影相机,因为跟真实世界的观测效果一样;制图、建模等场景适合使用正交投影相机,方便观察模型之间的大小比例。...外部模型 现实世界丰富多彩,不是Threejs的几种默认几何形状和材质所能表达的,实际运用中,很多时候需要用到外部模型,通过3D建模软件构建物体的三维模型并导出模型文件,Threejs导入模型文件进行使用...目前web 3D应用因为浏览器渲染性能、模型体积过大等原因,并没有大规模使用起来,只限于品牌宣传等部分领域尝试使用。

15.2K43
您找到你想要的搜索结果了吗?
是的
没有找到

2D+1D | vivo官网Web 3D应用开发与实战

常用的一些3D渲染库有:ThreeJs、BabylonJS、SceneJS以及CesiumJs; 几种不同3D渲染库对比: 通过对比我们可以发现,上述几种渲染库各有优点。...但是在做手机模型的3D渲染时,对于光照和阴影以及反射的侧重点比较高,并不需要碰撞检测等特性。所以,基于以上的对比,我们选取ThreeJs作为我们3D渲染的底层库去实现手机模型的3D渲染。...2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大 3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好 4.2 3D...正投影通常用在建筑蓝图绘制和计算机辅助设计等平面图形方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。...实现3D场景中的模型旋转有两种实现方式: (1)3D场景中的相机不动,旋转3D实体即3D模型 (2)旋转相机,即3D模型不动,相机围绕模型进行旋转 现实生活中,将物体移动到视场中并不是正确的方法,

2.1K40

Three.js的入门案例(上)

关注初识Threejs与小编一起学习成长 Three.js的赋能下,WEB网页效果逐渐丰富起来,今天我们就来运用之前学习的Three.js基础知识,实现一个旋转的几何体-球体。 ?...知识点 1、透视投影照相机、基本材质; 2、球体几何模型、全景贴图; 3、渲染器; 01 创建DOM 为div容器定义样式.../libs/threeJs/renderers/CSS2DRenderer.js';//css 2D渲染器 03 核心代码 1、初始化场景: _this.scene=function(){ scene...,实际项目中一般都定义45,因为45最接近人正常睁眼角度 * aspect:照相机视锥体长宽比 * near:照相机视锥体近端面 far:照相机视锥体远端面 * */...0xffffff,//线条的十六进制颜色 map: textureLoader.load(_this.sphereBg),//设置纹理贴图 wireframe: false,//渲染模型为线框

5.9K20

干货 | 2D+1D | vivo官网Web 3D应用开发与实战

常用的一些3D渲染库有:ThreeJs、BabylonJS、SceneJS以及CesiumJs; 几种不同3D渲染库对比: ?...所以,基于以上的对比,我们选取ThreeJs作为我们3D渲染的底层库去实现手机模型的3D渲染。 4.1.2 模型选型 了解了渲染库,我们再来聊一聊常用的3D模型格式:OBJ、FBX、GLTF。...2)FBX 由于不同引擎解析的规范不同,导致不同引擎渲染出的效果差别较大 3)GLTF(GLB) 模型格式扩展性较高,ThreeJs、Babylonjs等WebGL渲染引擎的支持性较好 4.2 3D场景搭建及方案实施...注:图片来自网络(http://m.dingjisc.com) 正投影通常用在建筑蓝图绘制和计算机辅助设计等平面图形方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确...注:图片来自网络(https://webglfundamentals.org) 现实生活中,将物体移动到视场中并不是正确的方法,因为实际生活中通常是移动相机去拍摄建物体。

2.1K40

一个简单的案例,理解threejs中几个基本概念

随着浏览器性能的不断提升,以及对webgl的支持,浏览器上展示3d模型早已不是痴人说梦,不过如果使用原生的webgl的话,开发起来难度还是略大,一个常见的解决方案就是使用threejs,这是一个封装的库...基本概念 threejs中有几个基本的概念: 1.场景 场景就是你看到的花花世界,这就是一个场景,反映到threejs中,场景就是所有物体的容器,例如,我们想显示一个卡车,那就要将这个卡车放加入到场景中...2.相机 相机就相当于人的眼睛,人用眼睛看这花花世界,而在threejs中,使用相机来观察场景,相机的位置、相机的角度都决定了看到的场景会不同,相机有透视相机和正投影相机等。...3.渲染渲染器就是将相机拍摄的画面页面的某个dom节点中显示出来。 4.组件 组件就是要显示的物体,这种物体有平面几何物体,有三维物体。...开始代码编写: 首先在需要将threejs引入到项目中,然后js中分别创建场景、相机、渲染器以及组件: var scene = new THREE.Scene(); var camera = new

1.9K20

Threejs项目实战之二:产品三维爆炸图效果展示

run div 启动项目,打开浏览器,可以看到系统默认的页面,说明项目环境搭建成功 安装ThreeJS库,终端中输入pnpm i three安装threejs插件 安装GSAP库,终端中输入 pnpm...标签中引入threejs import * as THREE from 'three' 这里我们选择的产品模型是gltf格式的文件,因此,我们需要引入threejs为我们提供的GLTFLoader加载器...相关设置 const init = () => {} 为了便于后期代码的维护,我这里将创建threejs场景、相机、灯光、渲染器及控制器等各个部分进行了分别的封装,这样便于后期的代码维护与修改。...,使用Threejs提供的new GLTFLoader()方法加载gltf模型文件,具体代码如下: // 加载GLTF模型 const initModel = () => { loader = new...scene.add(model) }) } 创建初始化渲染器函数,使用Threejs提供的new THREE.WebGLRenderer()方法创建渲染器,并设置相关参数,具体diam如下

71821

3D 可视化入门:渲染管线原理与实践

这些都是的 1x1x1 的立方体,通过模型矩阵变换,让它们在世界空间表现不同 3.1.1.2 视图矩阵 我们不同位置、眼睛看向不同角度时,眼前的物体是不同的,这说明 "我们" 的位置和朝向也很重要。... 3D 渲染中一般使用正交投影和透视投影。 透视投影,正投影,等轴测投影,斜投影 示例:https://threejs.org/examples/?...如果 m > 1,会有大量网格无法绘制,交换 xy 即可解决 但是这一算法涉及浮点数运算,性能比较差。...实践:了解 ThreeJS 贴在球面的全景图 和 贴在立方体面的全景图。它们不同角度下四周是否有畸变?是否还有其他的视觉区别?...因为局部渲染模型中,实时渲染它们的代价很高,因此,它们通常都是贴图!如果预先渲染的环境贴图或者阴影贴图上没有对应的元素,那自然就不能在反射效果或阴影中看到他们。

6.2K21

Threejs入门之二:引用Threejs并创建第一个3D图形

Threejs的引入1.新建一个文件夹,命名为threejs_demo,该文件夹下新建一个lib文件夹,将前面下载的threejs源码中的build文件夹中的three.module.js文件拷贝到lib...文件夹下 2.用vscode打开新建的文件夹,根目录下新建一个index.html文件和一个index.js文件 3.index.html中引入threejs,方式如下: 2.index.html中新建一个div,id设置为webgl,用于展现threejs的容器,清除html默认的样式....将场景和相机放入渲染器renderer.render(scene,camera)12.至此,我们整改场景已经建设完成了,但是别急,此时你运行html文件浏览器上还看不到任何的东西,是因为我们没有指定一个容器用来放置渲染

1.2K41

ThreeJS 炫酷特效旋转多面体Web页 Demo 01《ThreeJS 炫酷特效制作》

/download/A757291228/87871503 这是 inscode 的代码,不过渲染有点问题,不过也可以看到大致效果: 一、ThreeJS 三要素 在编写 ThreeJS 前,需要明白... ThreeJS 中有三个很关键的对象,分别是 摄像头、场景以及渲染器: 其中 场景 是通过 ThreeJS “搭建”呈现特效的一个“舞台”,创建好一个场景后,即可往这个场景中添加对应的多种物体,例如多边形...、粒子、球体等; 创建好场景后我们需要在场景中添加摄像头用于呈现场景中的视觉效果,摄像头 ThreeJS 中担任 “视觉采集” 角色,可以通过控制摄像头采集范围(大小)从而采集场景中视觉呈现; 那么完成以上两步后...接着我们此时可以移动一下摄像机的 z 轴,代码为: camera.position.z = 500; 以下为 three 中的坐标系参考图: 此时 z 轴就是摄像机,或者说人的视窗所距离中心点的位置,若不移动这个距离,创建几何体时将会无法很好的看见几何体...表示双面渲染,即渲染的时候物体双面都会进行渲染,而不是只有一面(性能考虑若想设置只渲染一面设置为 THREE.FrontSide) 3.3 创建 Mesh 用于组装 3D 对象 Mesh ThreeJS

45010

第167期:threejs最简单的例子

封面图 image.png 这部分的目的是简单介绍threejs的开发流程,从创建场景、设置相机、添加几何体到将几何体渲染到节界面上。...按照threejs开发的基本流程,我们先创建场景、相机、渲染器,然后用渲染器将相机和场景渲染到界面中,代码如下: <div id="cube-container" ref="cubeContainer...相机好比人的眼睛 <em>在</em>现实生活中,假设在理想条件下,光线充足、物体摆放的位置<em>正确</em>,我们的视力都正常的情况下,只要物体出现在我们的视野范围内,我们就可以看到这个物体,除非我们是闭着眼睛。...,虽然有各种各样的漂亮的物体,但是如果我们把眼睛闭起来,就算把好东西放到我们眼前,我们仍旧<em>无法</em>看到它到底是个什么东西。...<em>在</em><em>threejs</em> 中也一样,场景中添加的物体默认都在原点的位置,我们可以将相机和立方体的位置信息打印出来: // 相机.position _Vector3 {x: 0, y: 0, z: 0} // 立方体

22320

# threejs 基础知识点汇总

threejs 简介 Three.js是一个流行的JavaScript库,用于浏览器中创建和显示3D图形。...Three.js 网格模型Mesh 实际生活中有各种各样的物体,threejs中可以通过网格模型Mesh (opens new window)表示一个虚拟的物体,比如一个箱子、一座房子。...从纯理论的角度,你能分清0和0.0000...0000001的大小,但是实际上,电脑GPU精度是有限的,电脑分不清谁在前谁在后,不知道应该先渲染谁,就会出现这个情况。...threejs中,咱们用网格模型Mesh模拟生活中物体,所以threejs中模拟光照Light对物体表面的影响,就是模拟光照Light对网格模型Mesh表面的影响。...同理在三维场景中,我们想要获取某个物体,并不需要让鼠标怼到模型上。 threejs中,提供了射线控制器,可以帮我们实现类似的效果。

11810

ThreeJS 不可忽略的事情 - Gamma色彩空间

还在苦恼的调光照吗,有木有想过,其实不一定是光照的原因,来看看这两张用了同一光照的threejs渲染对比图: WX20191125-131818@2x.png 第二个效果和建模工具更加相似,主要区别是第一张图直接导入了模型和贴图...WX20191125-143815@2x.png ThreeJS 色彩空间转换 故ThreeJS中,当我们为材质单独设置贴图和颜色时,需要进行色彩空间转换。...对于贴图: threejs 需要在线性颜色空间(linear colorspace)里渲染模型的材质,而从一般软件中导出的模型中包含颜色信息的贴图一般都是sRGB颜色空间(sRGB colorspace...specularGlossinessTexture)手动指定为Three.sRGBEncoding,threejs渲染时判断贴图为sRGB后,会自动将贴图转换为Linear再进行渲染计算。...若采用 GLTFLoader 导入带贴图的模型,GLTFLoader 将在渲染前自动把贴图设置为 THREE.sRGBEncoding,故不需要手动设置贴图 encoding。

9.9K204

Threejs进阶之一:基于vite+vue3+threejs构建三维场景

搭建项目环境打开vscode的终端管理器,输入如下命令npm create vite@latest vue3-threejs-app --template vue弹出的选择框架提醒中,按上下键盘键,选择...,将要展现在页面上的motor03.gltf文件拷贝到该文件夹新建utils文件夹在src文件夹下下新建utils文件夹,用于存放工具类js代码,该文件夹下新建motor3d.js文件,该文件用于通过...threejs创建三维场景,并挂载到div上进行展示引入Threejs库文件、轨道控制器和GLTF加载器motor3d.js中引入Threejs库文件,并引入轨道控制器和GLTFLoader文件import...('resize',this.onWindowResize.bind(this)) }刷新浏览器,看效果 这里我们遇到了和前面将到的threejs和gltf模型颜色色差的问题,将如下代码添加到渲染器初始化函数中...基于vite+vue3+threejs方式构建Threejs三维场景的方法就说道这里,喜欢的朋友点赞关注收藏哦!

5.4K22

谈谈3D Tiles(3):个人总结

另外删除逻辑过分简单,某些浏览方式下应该会有闪烁问题。 刚才提到节点的属性信息是初始化一次性加载,如果数据量很大,比如城市级别,这个tileSet会很大很复杂,这点在设计上有点耿直。...首先,glTF是针对单个模型的情况,强调数据的完整性,独立性。但3D Tiles是一个树关系,每个Tile只是其中的一个Node。打个比方,一棵树上,节点是叶子,但现在节点对应的是一颗小树。...渲染调度上,3D Tiles和glTF都是基于状态,你可以想象,虽然代码逻辑上清晰,但在运行时上,对浏览器来说是一个负担。明明一次性能做好的事情,非要分成好几个任务,还美其名曰敏捷。...作为一个大数据的数据规范,glTF可以提供压缩机制,当然Web端解析性能的损耗需要评估,个人认为压缩的收益太大而无法拒绝。 可用性 缺少免费好用的生成工具,并没有形成一个成熟的解决方案。...开源 有感于最近的一些亲身经历,也看了看threejs,Openlayers,Leaflet,Echart等项目,也思考这些优秀的开源项目之所以优秀,到底有没有一些共性。

4.7K110

如何在页面极速渲染3D模型

为了实现旋转和换肤功能, H5 中我们随机展示了5种类型的 3D 太空鹅模型,如下图所示: ?...但是 H5 中引入 3D 模型往往存在资源太大、性能损耗严重、还原不真实的问题,这也让许多 3D 创意止步于开发阶段。 如何更好地 H5 中还原模型呢?...本文将从模型网格和贴图文件两方面分析,介绍几种通过技术角度优化加载速度和提高渲染性能的途径,保证 3D 模型不减面,贴图不缩小的情况下,将模型精致地还原在 H5 或其他应用程序中。...模型网格压缩 首先是分析模型网格,对于大型 3D 资源,我们一般会通过模型设计时进行“减面”来减少模型几何体的大小,但也会带来模型精致度的缺失。如下图所示: ?...效果测试 为了数据更加明显,我们Mac Chrome 浏览器performance模式下,针对同一个电视机模型利用 ThreeJS 各自加载了 4096 x 4096 大小的颜色贴图、法线贴图、金属与粗糙贴图

8.5K32

Threejs在你的网页里放一个冰墩墩!

Threejs基础场景 首先当然也是最重要的,你必须得有冰墩墩的3D模型。而这最重要的一环,大帅花了3美刀已经为大家买来了。 接下来我们用Threejs把冰墩墩在网页里显示出来。...大帅之前写过几篇Threejs的文章,想要学习网页3D渲染的小伙伴们记得点点赞,后续我还会多更新一些Threejs的教程。 2天赚了4个W,手把手教你用Threejs搭建一个Web3D汽车展厅!...这里我再给没看过之前文章的小伙伴们分享下GLTF的格式的特点以及如何在Threejs里加载GLTF模型。...我导出GLTF格式之前设置的可不是这样呀。 可能由于兼容性的问题,脸部的卡通材质丢失了,还有冰晶外壳需要的环境反射贴图也没有了。...那是因为原本的身体模型对象上就有贴图,我直接拿去作为卡通渲染材质的贴图,省的再加载一遍了。 现在我们的冰墩墩就很BlingBling了对吧~ Enjoy~

2.3K20

Threejs项目实战之四:实现地图雷达效果

,老规矩,先看下效果图 # 实现原理 通过加载模型文件,实现模型的加载,这里使用的是FBX模型,通过Threejs提供的FBXLoader来加载fbx模型,加载完成后,通过traverse方法遍历模型...,并对该模型的子类进行不同的颜色设置,这里主要是对建筑的颜色定义和对地面的颜色定义;然后,通过使用threejs提供的CircleGeometry创建几何体,并设置其材质;最后,通过使用着色器对雷达效果进行渲染.../style> style.css中的样式代码如下: *{ margin: 0; padding: 0; list-style: none; } DigitalMapView.vue的核心代码 DigitalMapView.vue... script标签中引入threejs、OrbitControls 、FBXLoader 及vue中的onMounted 生命周期函数 import * as THREE from...FBXLoader } from 'three/examples/jsm/loaders/FBXLoader' import { onMounted } from 'vue'; 创建场景、相机、灯光、渲染

53820
领券