当前位置: 首页 > news >正文

glTF 添加数据属性(extras)

 使用3D 模型作为可视化界面的一个关键是要能够在3D模型中添加额外的数据属性,利用这些数据属性能够与后台的信息模型建立对应关系,例如后台信息模型是opcua 信息模型的话,在3D模型中要能够包含OPC UA 的NodeId,BrowserName  等基本信息。

  glTF 是一种流行的3D 模型的标准,它使用JSON 语言描述3D模型。其中可以包含所谓的extras 。

        另一方面,Three.JS 的object能够包含userData ,也是为了定义数据属性。通过GLTFLoader能够将extras 转换成为Three 的userData。

        网络上介绍glTF的extras和ThreeJS 的userData 都比较零散。自己做了各种尝试,将结果分享给读者。

glTF 2.0 导出的内容

  • Meshes(网 格)

  • Materials 材质(Principled BSDF) and Shadeless (Unlit)

  • Textures纹理

  • Cameras相机

  • Punctual lights准点灯 (point, spot, and directional)

  • Extensions扩展 (listed below)

  • Extras附加功能 (custom properties自定义属性)

  • Animation动画 (keyframe, shape key, and skinning关键帧、形状关键帧和外观)

glTF extras 数据的插入

   我尝试使用solidworks visualize 导出glTF 。但是,在solidworks visualize 没有插入extras 的方法。而且objects 的名称是渲染的名称(例如blue high gloss plastic)。这是难以使用的。

于是我尝试在glTF 的JSON 文档中手工插入extras。每一个mesh都对应Three 的object ,所以,每个mesh 中都应该添加extras.

extras 的json格式

"extras": {
"opc":{
"BrowserName":"Cube1" 
}
}

 注意,他不能定义为:

"extras": {"BrowserName":"Cube1" }

extras 中的成员是对象。 

glTF 中extras 的定义(mesh)


"nodes" : [{"mesh" : 0,"extras": {"opc": { "BrowserName": "Cube1"}}}],

也可以使用Three editor 在线编辑器添加

https://threejs.org/editor/

在Three 中定义object 的userData

在下面的代码中,为地板添加的userData,格式与extras 类似

 var plane = new THREE.Mesh(planeGeometry,planeMaterial);plane.name="Ground"plane.userData={opc:{BrowserName:"Plane"}}scene.add(plane);

 点击对象,显示userData

function onClick() {event.preventDefault();const mouse = new THREE.Vector2();const rect = screenDom.value.getBoundingClientRect()mouse.x = ((event.clientX+rect.left) / window.innerWidth) * 2 - 1;mouse.y = -((event.clientY+rect.top)/ window.innerHeight) * 2 + 1;console.log("x:"+mouse.x,"y:"+mouse.y);const raycaster = new THREE.Raycaster();raycaster.setFromCamera(mouse, camera);var intersects = raycaster.intersectObjects(scene.children,true); //if (intersects.length > 0) {var selectedObject = intersects[0];SelectObject.value.innerHTML=selectedObject.object.userData.opc.BrowserNameconsole.log(selectedObject.object.userData)

selectedObject.object.userData.opc.BrowserName 引用了opc 中的BrowserName值。SelectObject.value.innerHTML是网页<div >

结束语

   哪一个glTF 编辑器(sketchups,blender)支持extras 的添加和编辑呢?有了解的读者请推荐。

遗憾的是solidworks 没有这一功能 。

http://www.lryc.cn/news/306446.html

相关文章:

  • linux系统消息中间件rabbitmq普通集群的部署
  • TextCNN:文本分类卷积神经网络
  • 欧几里得和《几何原本》
  • linux c++ 开发 tensorrt 安装
  • Redis高并发分布锁实战
  • Kotlin基础——DSL
  • 《Docker 简易速速上手小册》第4章 Docker 容器管理(2024 最新版)
  • 【人脸朝向识别与分类预测】基于PNN神经网络
  • 【Python笔记-设计模式】组合模式
  • 51单片机学习(5)-----蜂鸣器的介绍与使用
  • -bash: /root/.ssh/authorized_keys: Read-only file system
  • 3,设备无关位图显示
  • 转前端了!!
  • RESTful API如何使用它构建 web 应用程序。
  • 现在学Oracle是49年入国军么?
  • 【回溯】组合问题||
  • 【c语言】字符函数和字符串函数(下)
  • 基于Java的艺培管理解决方案
  • Python算法题集_实现 Trie [前缀树]
  • pytorch简单新型模型测试参数
  • Unity中URP下实现水体(水面高光)
  • 26.HarmonyOS App(JAVA)列表对话框
  • 五种主流数据库:常用字符函数
  • 软考笔记--企业资源规划和实施
  • React歌词滚动效果(跟随音乐播放时间滚动)
  • java面试题之mybatis篇
  • Java的编程之旅19——使用idea对面相对象编程项目的创建
  • docker build基本命令
  • nginx高级配置详解
  • 小程序--分包加载