如何从3D对象中获取X,Y,Z坐标?怎样提取Sketchfab标注点坐标存入数据库
这个需求完全可以实现,Sketchfab平台存储的3D标注本身就是绑定模型空间坐标存储的,只要你拥有对应模型的访问权限,就可以拿到标注的完整坐标数据。
方法1:通过Sketchfab Viewer API 自动化批量提取(推荐生产环境使用)
这是稳定性最高的方案,适合需要批量同步标注数据到自有数据库的场景。你可以在自己的业务页面嵌入Sketchfab的iframe播放器,初始化官方提供的Viewer API后,直接调用getAnnotations()方法获取所有标注数据,返回的标注对象中position3D字段就是标准[x, y, z]格式的3D空间坐标,你可以直接将该字段以及你需要的关联标注信息(比如标注名称、描述)一起提交到自有数据库存储。
参考代码示例:// 页面中提前添加id为api-frame的iframe元素指向Sketchfab模型 const iframe = document.getElementById('api-frame'); const sketchfabClient = new Sketchfab(iframe); sketchfabClient.init('你的模型唯一UID', { success: (api) => { api.start(); api.addEventListener('viewerready', () => { // 获取所有标注数据 api.getAnnotations((annotationList) => { annotationList.forEach(anno => { const annotationData = { id: anno.id, name: anno.name, coordinate: anno.position3D, // 3D坐标字段 normal: anno.normal // 标注点法向,可选存储 }; // 此处添加你的业务请求逻辑,将annotationData提交到自有数据库 }); }); }); }, error: () => console.log('播放器初始化失败,请检查模型权限和UID是否正确') });注意:如果是私有模型,需要在init方法中额外传入你账号生成的访问令牌,才能正常拉取标注数据。
方法2:手动提取(适合临时少量标注场景)
如果你只需要提取少数几个标注的坐标,不需要做自动化流程,可以直接通过浏览器开发者工具获取:打开对应3D模型的Sketchfab页面,按下F12打开开发者工具,切换到「网络」面板,过滤请求关键词annotations,找到对应请求后,返回的JSON报文中即可直接找到每个标注的position3D字段值,手动复制后存入你的数据库即可。
提取到的坐标为模型自身的局部坐标系坐标,如果你后续需要将坐标应用到其他3D引擎或平台,需要确认两个平台的坐标系规则是否一致,必要时做坐标转换避免位置偏移。
请确保你对提取标注的模型拥有合法的访问、使用权限,避免违规操作。
内容的提问来源于stack exchange,提问作者Faris Afiq

