目录

项目搭建

初始化three.js基础代码

设置环境纹理

加载字体模型


今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目中才能灵活将所学知识运用起来,话不多说直接开始。

项目搭建

本案例还是借助框架书写three项目,借用vite构建工具搭建vue项目,vite这个构建工具如果有不了解的朋友,可以参考我之前对其讲解的文章:vite脚手架的搭建与使用 。搭建完成之后,用编辑器打开该项目,在终端执行 npm i 安装一下依赖,安装完成之后终端在安装 npm i three 即可。

<template><!-- 酷炫字体 --><Coolfonts></Coolfonts>
</template><script setup>
import Coolfonts from './components/Coolfonts.vue';
</script><style lang="less">*{margin: 0;padding: 0;}
</style>

初始化three.js基础代码

three.js开启必须用到的基础代码如下:

导入three库

import * as THREE from 'three'

初始化场景

const scene = new THREE.Scene()

初始化相机

// 设置渲染器
const renderdr = new THREE.WebGLRenderer({ antialias: true })
renderdr.setSize(window.innerWidth,window.innerHeight)
document.body.appendChild(renderdr.domElement)

添加控制器并监听屏幕大小的改变

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';// 添加控制器
const controls = new OrbitControls(camera,renderdr.domElement)
controls.enableDamping = true
// 监听屏幕大小的改变,修改渲染器的宽高和相机的比例
window.addEventListener("resize",()=>{ renderer.setSize(window.innerWidth,window.innerHeight)camera.aspect = window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()
})

设置渲染函数

// 设置渲染函数
const render = () =>{ controls.update()requestAnimationFrame(render)renderdr.render(scene,camera)
}
render()

ok,写完基础代码之后,接下来开始具体的Demo实操。

设置环境纹理

看过我之前文章的人都知道,设置环境已经老生常谈了,就是使用TextureLoader,其是Three.js中加载图片纹理的一种加载器。在 Three.js 中,画面的渲染是基于 WebGL 实现的,而图片纹理则是应用于其中的一种材质类型。使用 TextureLoader 可以方便地加载外部图片文件,例如 JPG、PNG 等格式的图片,以便将其应用到 Three.js 的材质中。

// 设置环境纹理
const texture = new THREE.TextureLoader().load('/images/starts.jpg')
texture.mapping = THREE.EquirectangularReflectionMapping // 全景贴图反射
scene.background = texture
scene.environment = texture

这里为了彰显字体,我把背景设置一下模糊度属性,环境变得模糊起来:

// 设置背景的模糊度
scene.backgroundBlurriness = 0.2

加载字体模型

在 Three.js 中,我们可以使用 FontLoader(用于加载字体文件的工具类) 加载包含字形信息的字体文件(通常为 JSON 格式),并使用字体文件创建 TextGeometry 实例,从而在场景中显示文本。我们设置字体格式的话可以参考:官方提供的示例字体 JSON 文件 。

目前,Three.js 官方并没有提供官方的中文字体,但是可以使用第三方的字体库来实现中文的显示,我们可以通过搜索引擎下载该字体的 TTF 或 OTF 格式文件,并使用 Gulp 或者 Webfont 等工具将其转换为 Three.js 所需的 JSON 格式文件。这里就不再展示了,以官方提供的字体案例演示

const loader = new FontLoader()
loader.load('fonts/Flamingo.json',(font)=>{// 创建几何体const geometry = new TextGeometry( 'hello three.js!', {font: font, // 字体size: 80, // 字体大小height: 15, // 字体厚度curveSegments: 12, // 曲线分段数bevelEnabled: true, // 是否启用斜角bevelThickness: 10, // 斜角厚度bevelSize: 2, // 斜角大小bevelSegments: 5 // 斜角分段数});geometry.center()// 设置几何体的材质const material = new THREE.MeshPhysicalMaterial({color: 0xff0000,roughness: 0,reflectivity: 1,thickness: 80,ior: 1.5,side: THREE.DoubleSide})// 创建字体const mesh = new THREE.Mesh(geometry,material)scene.add(mesh)
})

demo做完,给出本案例的完整代码:(获取素材也可以私信博主)

<script setup>
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
// 导入字体加载器
import { FontLoader } from 'three/examples/jsm/loaders/FontLoader'
// 导入几何缓冲
import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry'// 创建场景
const scene = new THREE.Scene()
// 创建相机
const camera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight,1,2000)
camera.position.set(0,0,800)
// 设置渲染器
const renderdr = new THREE.WebGLRenderer({ antialias: true })
renderdr.setSize(window.innerWidth,window.innerHeight)
document.body.appendChild(renderdr.domElement)
// 添加控制器
const controls = new OrbitControls(camera,renderdr.domElement)
controls.enableDamping = true
// 监听屏幕大小的改变,修改渲染器的宽高和相机的比例
window.addEventListener("resize",()=>{ renderer.setSize(window.innerWidth,window.innerHeight)camera.aspect = window.innerWidth/window.innerHeightcamera.updateProjectionMatrix()
})// 设置渲染函数
const render = () =>{ controls.update()requestAnimationFrame(render)renderdr.render(scene,camera)
}
render()// 设置环境纹理
const texture = new THREE.TextureLoader().load('/images/starts.jpg')
texture.mapping = THREE.EquirectangularReflectionMapping // 全景贴图反射
scene.background = texture
scene.environment = texture
// 设置背景的模糊度
scene.backgroundBlurriness = 0.2// 加载字体
const loader = new FontLoader()
loader.load('fonts/Flamingo.json',(font)=>{// 创建几何体const geometry = new TextGeometry( 'hello three.js!', {font: font, // 字体size: 80, // 字体大小height: 15, // 字体厚度curveSegments: 12, // 曲线分段数bevelEnabled: true, // 是否启用斜角bevelThickness: 10, // 斜角厚度bevelSize: 2, // 斜角大小bevelSegments: 5 // 斜角分段数});geometry.center()// 设置几何体的材质const material = new THREE.MeshPhysicalMaterial({color: 0xff0000,roughness: 0,reflectivity: 1,thickness: 80,ior: 1.5,side: THREE.DoubleSide})// 创建字体const mesh = new THREE.Mesh(geometry,material)scene.add(mesh)
})
</script>

Three.js--》实现3d字体模型展示相关推荐

  1. 使用three.js创建3D机房模型-分享一

    使用three.js创建3D机房模型-分享一 序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,派本人研究一下w ...

  2. 3D全景模型展示可视化技术演示

    在疫情的影响下,全国多地实行管控,人员和货物流通受阻,对企业的产品销售带来很大的影响,这就凸显了线上三维(3D)展示的重要性,线上三维展示可以给企业产品宣传给来不少便利,很多企业利用线上三维交互展示把 ...

  3. Unity 3D入门——模型展示

    unity版本 unity2018或unity2019 Unity相关网站 1.Unity官方文档,Unity中国官网,有中文文档 https://unity.cn/ 2.Unity的资源商店,有很多 ...

  4. 介绍一个3d bim模型展示开源项目

    3d-bim-models-threejs 3d-bim bim是building information model 意思是建筑信息模型,本开源项目是使用nodejs,html5,threejs 制 ...

  5. 产品发动机VR全景3D可视化模型系统展示方案

    利用VR全景技术可进行3D可视化模型展示,商迪3D可以让你720度无死角进行观看产品,并且可以与之产生互动.发动机展示运用3D可视化技术,可以让用户在PC端上或者移动端上进行预览,可谓是相当方便.快捷 ...

  6. js jquery 3D模型展示

    本人主要用于商城商品的3D模型展示: 效果如下:    可旋转可放大的3D模型展示 用法介绍 (1)如果你想直接使用简单的展示功能那么已经有封装好的js在此 下载引用即可 https://downlo ...

  7. three.js实现3D模型展示

    开头说明下  文章是转载我同事一个 哥们的.怕自己 以后会用 拿过来  方便以后使用 three.js实现3D模型展示 由于项目需要展示3d模型,所以对three做了点研究,分享出来 希望能帮到大家 ...

  8. 3d环形图片展示 js_网易公开课Three.js实践 勋章系统

    前言 WebGL是一种3D绘图协议,这种绘图协议允许javascript和openGL结合起来,WebGL可以为canvas提供3d硬件加速(使用GPU在浏览器渲染3d模型和场景).WebGL是ope ...

  9. Unity 3D模型展示之webGL平台展现

    在之前的项目基础上我们已经打包后在PC端进行展示了.这篇文章主要介绍在切换到webGL上时效果展示不出来需要进行调整,特此记录一下. 1.平台切换 选择WebGL平台切换,没有的可以进行安装,安装之后 ...

  10. 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课...

    前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...

最新文章

  1. 时间复杂度的计算方法
  2. 编程之美3.3 计算两个字符串的相似度
  3. html得到画布的颜色的值,从画布上获取像素颜色
  4. python在中小学教学中的应用-小学信息技术教学中进行Python 编程语言教学的策略...
  5. Maxon Cinema 4D Studio S22.114中文版
  6. python—sql语句参数化
  7. ionic 安装 inappbrowser 插件后编译失败的解决办法
  8. VTK读取序列化图像
  9. 使用 TypeScript 自定义装饰器给类的属性增添监听器 Listener
  10. 面试系列-JVM性能优化相关内容
  11. JavaScript回调函数的高手指南
  12. C++之实现优先队列
  13. DIY一套10倍\20倍\30倍光学变焦高清航拍方案(变焦云台相机方案)
  14. 使用Pandas对销售数据进行分析
  15. 8类网线利弊_网线标准(从一类线到八类线)
  16. Chrome繁简体转换插件
  17. SWAN之ikev2协议inactivity-timeout配置测试
  18. 指纹识别综述(5): 分类与检索
  19. 可替换STM23G031的32位单片机
  20. 月历(从星期一开始)

热门文章

  1. 算法技能树/职业路线评测
  2. 删除android系统桌面
  3. leetcode - 517. Super Washing Machines
  4. 中国大学MOOC税务管理试题含答案
  5. PyCharm连接远程服务器配置过程
  6. 项目制作第一篇(需求理解篇)
  7. win7本机的浏览器https所有访问提示弱密钥问题处理
  8. Mendix Excel导入组件的分析和应用
  9. 花猫c语言,三花猫的秘密
  10. 高考,一扇改变命运的门