如何用PlayCanvas打造一个令人惊叹的3D模型在线展示

news2025/1/11 15:08:55

Alt

本文由ScriptEcho平台提供技术支持

项目地址:传送门

使用 PlayCanvas 渲染 3D 模型

应用场景介绍

PlayCanvas 是一款用于创建交互式 3D 内容的跨平台引擎。它广泛应用于游戏开发、建筑可视化和虚拟现实体验等领域。

代码基本功能介绍

本代码演示了如何使用 PlayCanvas 渲染一个 3D 模型,并通过鼠标控制模型的旋转。

功能实现步骤及关键代码分析说明

1. 初始化 PlayCanvas

首先,需要创建一个 canvas 元素,然后使用 createGraphicsDevice 函数创建 PlayCanvas 的图形设备。接下来,使用 AppBase 创建一个 PlayCanvas 应用程序,并设置其选项,包括图形设备、组件系统和资源处理程序。

const canvas = document.getElementById('canvas')
const device = await pc.createGraphicsDevice(canvas, gfxOptions)
const app = new pc.AppBase(canvas)
app.init(createOptions)
2. 加载资源

接下来,需要加载 3D 模型和纹理等资源。本代码使用 AssetListLoader 加载了 helipad 环境纹理和 statue 模型。

const assets = {
  helipad: new pc.Asset(
    'helipad-env-atlas',
    'texture',
    { url: 'playcanvas/assets/cubemaps/helipad-env-atlas.png' },
    { type: pc.TEXTURETYPE_RGBP, mipmaps: false },
  ),
  statue: new pc.Asset('statue', 'container', {
    url: 'playcanvas/assets/models/statue.glb',
  }),
}
const assetListLoader = new pc.AssetListLoader(
  Object.values(assets),
  app.assets,
)
3. 设置场景

资源加载完成后,需要设置场景。本代码设置了天空盒、色调映射和曝光度。

app.scene.envAtlas = assets.helipad.resource
app.scene.toneMapping = pc.TONEMAP_ACES
app.scene.exposure = 1.6
app.scene.skyboxMip = 1
4. 创建相机和模型

接下来,需要创建一个带有相机组件的实体,以及一个带有渲染组件的模型实体。

const camera = new pc.Entity()
camera.addComponent('camera', {
  clearColor: new pc.Color(0.4, 0.45, 0.5),
})
const entity = assets.statue.resource.instantiateRenderEntity()
5. 鼠标控制

最后,需要添加鼠标控制代码,以便用户可以通过鼠标拖动旋转模型。

const mouse = new pc.Mouse(document.body)
let x = 0
const y = 0

mouse.on('mousemove', function (event) {
  if (event.buttons[pc.MOUSEBUTTON_LEFT]) {
    x += event.dx

    entity.setLocalEulerAngles(0.2 * y, 0.2 * x, 0)
  }
})

总结与展望

开发这段代码的过程加深了我对 PlayCanvas 的理解,也让我了解了 3D 渲染的基本原理。未来,可以考虑以下拓展和优化:

  • 添加光照和阴影,以增强模型的真实感。

  • 添加动画,使模型能够移动或旋转。

  • 使用 PlayCanvas 的物理引擎,使模型能够与场景中的其他对象进行交互。

    更多组件:

    在这里插入图片描述


    在这里插入图片描述

获取更多Echos

本文由ScriptEcho平台提供技术支持

项目地址:传送门

扫码加入AI生成前端微信讨论群:

扫码加入群聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1820277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文解答 | 代码签名证书怎么选

在当代软件开发中,代码签名证书对于确保软件的完整性、安全性及其可信度至关重要。它通过数字签名验证代码的来源和未被篡改的状态,向最终用户确保软件的可靠性。选择合适的代码签名证书既有利于保护软件开发商的声誉,也有助于建立用户对软件…

鸿蒙轻内核调测-内存调测-内存泄漏检测

1、基础概念 内存泄漏检测机制作为内核的可选功能,用于辅助定位动态内存泄漏问题。开启该功能,动态内存机制会自动记录申请内存时的函数调用关系(下文简称LR)。如果出现泄漏,就可以利用这些记录的信息,找到…

高温车间降温通风方案

高温车间降温,解决厂房高温闷热必须做到以下两点才能实现,否则即使安装中央空调也没用:一、解决厂房内部热量 通过通排风负压风机、环保空调、工业大风扇等常用排热降温设备,降低室内温度;二、屏蔽外部太阳热源 …

日本2024年最受欢迎的转职行业是IT 通信

2024年有关机构针对超1000名人力资源专业人士进行了“推荐转职行业”的调查。结果显示,日本目前最受欢迎的转职行业是 1、“IT/通信行业”(45.9%), 2、其次是“互联网/广告/游戏”(31.9%), 3、“…

【log4】log4cplus:使用详解(一)

1、源码下载 源码下载地址:https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/ 最新稳定版本为2.1.1(2023-11-17) github中有最新的源码:https://github.com/log4cplus/log4cplus 2、源码编译 1)解压后,进入源码目录中,执行配置命令: ./confi…

智能制造前沿:ARMxy工控机在机器人控制中

机器人控制系统正逐步成为现代制造业的核心引擎。在这个过程中,ARMxy工业计算机以其独特的优势,成为了驱动这一变革的关键力量。本文将以自动化装配线机器人为例,探讨ARMxy如何通过其低功耗、高性能特性,以及高度灵活性的设计&…

【代码随想录算法训练营第三十五天】 | 1005.K次取反后最大化的数组和 134.加油站 135.分发糖果

贪心章节的题目,做不出来看题解的时候,千万别有 “为什么这都没想到” 的感觉,想不出来是正常的,转变心态 “妙啊,又学到了新的思路” ,这样能避免消极的心态对做题效率的影响。 134. 加油站 按卡哥的思路…

【调试笔记-20240613-Linux-在 git 多分支间合并】

调试笔记-系列文章目录 调试笔记-20240613-Linux-在 git 多分支间合并 文章目录 调试笔记-系列文章目录调试笔记-20240613-Linux-在 git 多分支间合并 前言一、调试环境操作系统:Ubuntu 22.04.4 LTS调试环境调试目标 二、调试步骤在远端 git 服务器建立多个分支在本…

车间降温设备怎么选?有哪些注意事项

在选择车间降温设备时,需要考虑多个因素以确保选择的设备能够满足降温需求,同时考虑成本、效率和维护的便捷性。以下是一些关键的注意事项和选择标准: 一、选择标准 厂房大小与结构 厂房的面积、高度和结构将影响空气流通和降温效果。例如&…

揭秘软件测试秘籍:测试用例设计方法大揭秘

文章目录 引言一、等价类划分1.1 定义1.2 步骤1.3 等价类划分优点和缺点 二、边界值分析法2.1 定义2.2 步骤2.3 边界值分析法的优点和缺点 三、判定表法3.1 定义3.2 步骤3.3 判定表组成不分3.4 判定表的优点和缺点 四、正交实验法4.1 定义4.2 步骤4.3 正交实验法的优点和缺点 五…

论文研读|以真实图像为参考依据的AIGC检测

前言:这篇文章介绍几篇AIGC检测的相关工作,其中前几篇文章是以真实图像的特征作为标准进行检测,最后一篇文章就当拓展一下知识边界吧~ 目录 Detecting Generated Images by Real Images Only (202311 arXiv)Let Real Images be as…

WebGL渲染引擎优化方向 -- 内存管理的优化

作者:caven chen 对此系列感兴趣还可以看前文: WebGL渲染引擎优化方向 -- 加载性能优化 WebGL渲染引擎优化方向——渲染帧率的优化 前言 WebGL 是一种强大的图形渲染技术,可以在浏览器中快速渲染复杂的 3D 场景。但是,由于 W…

MySQL与PostgreSQL关键对比三(索引类型)

目录 索引类型 B-tree 索引 Hash 索引 Full-text 索引 GiST 索引 GIN 索引 BRIN 索引 索引创建示例 MySQL PostgreSQL 结论 以下SQL语句的执行如果需要开发工具支持,可以尝试使用SQLynx或Navicat来执行。 MySQL和PostgreSQL在索引方面有许多相似之处&am…

【kubernetes】k8s中包管理工具-----Helm 超详细解读

目录 一、Helm 1.1什么是 Helm 1.2Helm 有三个重要的概念 1.2.1Chart 1.2.2Repository(仓库) 1.2.3Release 1.3Helm3 与 Helm2 的区别 二、Helm 部署 2.1安装 helm 2.2命令补全 2.3使用 helm 安装 Chart 2.3.1添加常用的 chart 仓库 2.3.2…

vue 和 js写屏幕自适应

实现屏幕自适应的方式有很多种,可以通过插件本身提供的方法,可以通过flex布局等,今天我们来写写通过js实现屏幕自适应。 以下是在vue中实现的屏幕自适应 首先在data中定义一下屏幕的默认大小和缩放比例 然后在mounted中获取窗口的内置宽高&a…

使用 Vue 和 Ant Design 实现抽屉效果的模块折叠功能

功能描述: 有两个模块,点击上面模块的收起按钮时,上面的模块可以折叠,下面的模块随之扩展 代码实现: 我们在 Vue 组件中定义两个模块的布局和状态管理: const scrollTableY ref(560); // 表格初始高度…

Excel中如何用公式列出包含特定文本的所有单元格?

如下图,希望用公式得到“以分布式开始”的G列数据。 一、高版本公式 FILTER(E2:E9,LEFT(E2:E9,3)"分布式") 用LEFT函数提取数据的左侧3个字符,是“分布式”的就是以它开始的数据了,用FILTER函数筛选出来即可。 二、低版本公式 如…

【智能算法应用】基于A星算法求解六边形栅格地图路径规划

目录 1.算法原理2.结果展示3.参考文献4.代码获取 1.算法原理 精准导航:用A*算法优化栅格地图的路径规划【附Matlab代码】 六边形栅格地图 分析一下地图: 六边形栅格地图上移动可以看做6领域运动,偶数列与奇数列移动方式有所差异&#xff0…

【FreeRTOS】内存管理

目录 1 为什么要自己实现内存管理2 FreeRTOS的5中内存管理方法2.1 Heap_12.2 Heap_22.3 Heap_32.4 Heap_4 2.5 Heap_53 Heap相关的函数3.1 pvPortMalloc/vPortFree3.2 xPortGetFreeHeapSize 3.3 xPortGetMinimumEverFreeHeapSize3.4 malloc失败的钩子函数 参考《FreeRTOS入门与…

CleanMyMac是否有必要购买?2024年6.18有什么优惠活动?

CleanMyMac X是专业的Mac应用卸载,清理优化,软件管理更新工具,兔八哥爱分享获取cleanmymac激活码更安全,让你的Mac电脑焕然一新 CleanMyMacX是一款强大的Mac清理和优化工具,针对系统垃圾、恶意软件和隐私保护提供解决方案。重度用户因其高效性能和全面功能可能需要…