IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react 高德地图本地gltf 模型 -> 正文阅读

[JavaScript知识库]react 高德地图本地gltf 模型

引入高德地图

npm install @amap/amap-jsapi-loader --save

在utils创建 AMap.ts

import AMapLoader from '@amap/amap-jsapi-loader';

export let getAMap = (id = 'container', config = {}) => {
  return new Promise((yes, no) => {
    AMapLoader.load({
      key: 'xxxxxx', // 申请好的Web端开发者Key,首次调用 load 时必填
      version: '1.4.15', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
      plugins: ['Map3D'], //插件列表
    })
      .then((AMap) => {
        let map = new AMap.Map(id, {
          viewMode: '3D',//使用3D视图
          pitch: 30,
          rotation: 25,
          zoom: 16,
          center: [121.499809, 31.236666],
          mapStyle: 'amap://styles/macaron',
          showIndoorMap: false,
          layers: [],//使用多个图层 
          ...config
        });
        yes({
          map,
          AMap
        });
      })
      .catch((e) => {
        console.log('高德地图错误', e);
        no(e);
      });
  });
};

index.tsx

import React, { useEffect } from 'react';
import './index.less'
import { getAMap } from '../../utils/AMap'

const Map: React.FC = () => {
    useEffect(() => {
        fetchMap()
    }, []);

    const fetchMap = async () => {
        let aa: any = await getAMap()
        let AMap = aa.AMap
        let map = aa.map
        // 创建Object3DLayer图层
        var object3Dlayer = new AMap.Object3DLayer();
        map.add(object3Dlayer);
        var druckMeshes;
        map.plugin(["AMap.GltfLoader"], () => {
            var urlDuck = 'Duck.gltf';
            var paramDuck = {
                position: new AMap.LngLat(121.495000, 31.233366), // 必须
                scale: 800, // 非必须,默认1
                height: -100,  // 非必须,默认0
                scene: 0, // 非必须,默认0
            };
            var gltfObj = new AMap.GltfLoader();
            gltfObj.load(urlDuck, (gltfDuck: {
                setOption: (arg0: {
                    position: any; // 必须
                    scale: number; // 非必须,默认1
                    height: number; // 非必须,默认0
                    scene: number;
                }) => void; rotateX: (arg0: number) => void; rotateZ: (arg0: number) => void;
            }) => {
                druckMeshes = gltfDuck;
                gltfDuck.setOption(paramDuck);
                gltfDuck.rotateX(90);
                gltfDuck.rotateZ(-20);
                object3Dlayer.add(gltfDuck);
            });

        });
    }
    return (
        <div id="container" style={{ width: "100%", height: "100%" }}></div>
    )
};

export default Map;

运行报错,请在umi中gltf格式添加配置;
在config.ts中添加

runtimePublicPath: true,
 chainWebpack: config=>{
    config.module.rule('gltf').test(/\.(gltf)$/).use('gltf').loader('url-loader').options('$').end()
  },

注意:重点
gltf模型请放在public目录下,否则可能会找不到路径
在这里插入图片描述
如果gltf模型里的贴图路径找不到建议将图片转为base64格式;

图片在线转base64工具

如果设计师给的是glb二进制格式的我们可以使用Visual Studio Code 的 glTF 工具进行转换

glTF Tools

互转的使用方法

参考博主

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:38:44  更:2021-08-16 11:41:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:12:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计