学习threejs,导入AWD格式的模型

news/2025/1/8 18:10:55/

👨‍⚕️ 主页: gis分享者
👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕️ 收录于专栏:threejs gis工程师


文章目录

  • 一、🍀前言
    • 1.1 ☘️THREE.AWDLoader AWD模型加载器
  • 二、🍀导入AWD格式的模型
    • 1. ☘️实现思路
    • 2. ☘️代码样例


一、🍀前言

本文详细介绍如何基于threejs在三维场景中导入AWD格式的模型,亲测可用。希望能帮助到您。一起学习,加油!加油!

AWDLoader_AWDfont_10">1.1 ☘️THREE.AWDLoader AWD模型加载器

THREE.AWDLoader用于加载和处理AWD格式3D模型文件的扩展。

AWD三维文件:
AWD是一种用于三维场景的二进制格式,通常与AWD引擎一起使用。这个加载程序不支持压缩的AWD文件。

AWD三维模型特点

  • 二进制格式:AWD是一种二进制格式,这意味着它以二进制代码的形式存储三维模型数据,与文本格式(如OBJ、STL等)相比,二进制格式通常具有更高的加载效率和更小的文件大小。
  • 与Away3D引擎兼容:AWD格式是专门为Away3D引擎设计的,因此与Away3D引擎具有良好的兼容性。使用Away3D引擎可以轻松地加载、渲染和交互AWD格式的三维模型。
  • 高效性:由于采用了二进制格式和针对Away3D引擎的优化,AWD三维模型在加载、渲染和交互方面表现出较高的效率。这使得AWD格式适用于需要实时渲染和交互的三维应用场景,如游戏、虚拟现实等。

应用场景

  • 游戏开发:在游戏开发中,AWD三维模型可以用于创建游戏中的角色、道具、场景等元素。由于AWD格式具有高效性和易于编辑的特点,因此非常适合用于游戏开发中的三维建模和渲染任务。
  • 虚拟现实:在虚拟现实应用中,AWD三维模型可以用于构建虚拟场景和物体。通过加载AWD格式的三维模型,可以为用户提供更加真实、沉浸式的虚拟现实体验。
  • 建筑可视化:在建筑可视化领域,AWD三维模型可以用于展示建筑设计方案、室内装修效果等。通过调整模型的方向、大小和纹理等参数,可以呈现出逼真的建筑场景和细节。
  • 工业设计:在工业设计中,AWD三维模型可以用于创建产品原型、模拟装配过程等。使用AWD格式可以方便地导出和导入三维模型数据,以便在不同软件之间进行协作和数据交换。

AWDfont_28">二、🍀导入AWD格式的模型

1. ☘️实现思路

  • 1、初始化renderer渲染器
  • 2、初始化Scene三维场景scene
  • 3、初始化camera相机,定义相机位置 camera.position.set,设置相机方向camera.lookAt。
  • 4、创建三个THREE.DirectionalLight平行光源dir1、dir2、dir3,设置平行光源的位置,scene中添加dir1、dir2、dir3。创建THREE.SpotLight聚光灯光源spotLight,设置spotLight的位置信息,场景scene中添加spotLight。
  • 5、加载几何模型:创建THREE.AWDLoader加载器loader,loader调用load方法加载‘PolarBear.awd’模型。在load回调函数中,回调函数获取网格对象model,循环model的child,设置child的材质为漫反射材质THREE.MeshLambertMaterial,设置model的范围大小,场景scene中添加model。具体代码参考代码样例。
  • 6、加入THREE.OrbitControls交互控件,加入stats监控器,监控帧数信息。

2. ☘️代码样例

<!DOCTYPE html><html><head><title>导入AWD格式的模型</title><script type="text/javascript" src="../libs/three.js"></script><script type="text/javascript" src="../libs/AWDLoader.js"></script><script type="text/javascript" src="../libs/stats.js"></script><script type="text/javascript" src="../libs/dat.gui.js"></script><script type="text/javascript" src="../libs/OrbitControls.js"></script><style>body {margin: 0;overflow: hidden;}</style>
</head>
<body><div id="Stats-output">
</div>
<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div><!-- Javascript code that runs our Three.js examples -->
<script type="text/javascript">// 初始化function init() {var stats = initStats();// 创建场景var scene = new THREE.Scene();// 创建相机var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);// 创建渲染器,设置渲染器大小var webGLRenderer = new THREE.WebGLRenderer();webGLRenderer.setClearColor(new THREE.Color(0x000, 1.0));webGLRenderer.setSize(window.innerWidth, window.innerHeight);webGLRenderer.shadowMapEnabled = true;// 设置相机位置和方向camera.position.x = 30;camera.position.y = 30;camera.position.z = 30;camera.lookAt(new THREE.Vector3(0, 0, 0));var orbit = new THREE.OrbitControls(camera);var dir1 = new THREE.DirectionalLight();dir1.position.set(-30, 30, -30);scene.add(dir1);var dir2 = new THREE.DirectionalLight();dir2.position.set(-30, 30, 30);scene.add(dir2);var dir3 = new THREE.DirectionalLight();dir3.position.set(30, 30, -30);scene.add(dir3);// 添加聚光灯光源,设置光源位置var spotLight = new THREE.SpotLight(0xffffff);spotLight.position.set(30, 30, 30);scene.add(spotLight);document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);var step = 0;var controls = new function () {};var group;var gui = new dat.GUI();var loader = new THREE.AWDLoader();var group = new THREE.Object3D();loader.load("../assets/models/awd/PolarBear.awd", function (model) {model.traverse(function (child) {if (child instanceof THREE.Mesh) {child.material = new THREE.MeshLambertMaterial({color: 0xaaaaaa});}});model.scale.set(0.1, 0.1, 0.1);scene.add(model);});render();function render() {stats.update();orbit.update();if (group) {group.rotation.y += 0.006;}requestAnimationFrame(render);webGLRenderer.render(scene, camera);}function initStats() {var stats = new Stats();stats.setMode(0);stats.domElement.style.position = 'absolute';stats.domElement.style.left = '0px';stats.domElement.style.top = '0px';document.getElementById("Stats-output").appendChild(stats.domElement);return stats;}}window.onload = init;
</script>
</body>
</html>

效果如下:
在这里插入图片描述


http://www.ppmy.cn/news/1561341.html

相关文章

使用 httputils + chronicle-bytes 实现金融级 java rpc

1、认识 chronicle-bytes Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库&#xff0c;但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护&#xff0c;旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性…

使用systemd管理MySQL服务器

如果您在以下Linux平台上使用RPM或Debian软件包安装MySQL&#xff0c;则服务器启动和关闭由systemd管理&#xff1a; 1、RPM 包平台 企业Linux版本7及更高版本 SUSELinuxEnterprise Server 12及更高版本 Fedora 29及更高版本 2、Debian家族平台 Debian平台 Ubuntu平台 如果…

AWS EMR基础知识

EMR Overview 知识点&#xff1a;EMR是可简化大数据框架运行的托管集群平台&#xff0c;能以可扩展且具成本效益的方式处理和分析大量数据&#xff0c;应用于大数据分析、数据处理、机器学习、数据湖和数据仓库等场景。注意事项&#xff1a;根据业务需求选择合适的使用场景&am…

快速排序(霍尔法),冒泡排序 【C语言】

冒泡排序 效率低&#xff0c;但是稳定性高 代码 // 冒泡排序 void maopao(int a[]);int main() {int a1[10] {34,78,29,46,12,85,63,92,57,31};printf("\n排序前:\n");print(a1);maopao(a2);printf("冒泡排序后:");print(a2); }//冒泡排序 void maopao(…

Kubernetes容器设计模式

Kubernetes容器设计模式 在容器编排领域&#xff0c;Kubernetes已经成为事实上的标准&#xff0c;为容器化应用程序提供了可靠且可扩展的平台。构建容器化应用与传统应用有着显著差异&#xff0c;因此理解和使用容器设计模式至关重要。本文将探讨Kubernetes中的容器设计模式&a…

SUB输入5V升压充电16.8V芯片HU5912

HU5912芯片&#xff0c;作为航誉微电子有限公司推出的一款高性能升压充电管理IC&#xff0c;自其面世以来&#xff0c;便以其出色的性能和广泛的应用领域&#xff0c;受到了业界的高度关注和赞誉。本文将详细介绍HU5912芯片的技术特点、应用优势、市场定位以及其在各类电子设备…

mysql删除无用用户

1、删除不用的账户 (1) 查看当前已存在账户 mysql> select user,host,password from mysql.user; 或下面的命令 #mysql> sELECT DISTINCT CONCAT(User: ,user,,host,;) AS query FROM mysql.user; --------------------------------------- | query …

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言&#xff0c; 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…