fix(resize): 新增3DTiles内置资源;增加内置资源对http(s)地址的支持;
This commit is contained in:
1 parent
87acdc4896
commit
915e83bc84
94 files changed
+40
-17
No files matched your search
File renamed without changes.
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1071,8 +1071,11 @@ export default {
|
|||||||
Fireworks: '烟花',
|
Fireworks: '烟花',
|
||||||
},
|
},
|
||||||
tiles:{
|
tiles:{
|
||||||
|
/* 分类 */
|
||||||
|
|
||||||
// 工厂
|
// 工厂
|
||||||
'A petrochemical plant':"石油化工厂",
|
'A petrochemical plant':"石油化工厂",
|
||||||
|
'Building group 1':"建筑群1",
|
||||||
// 其他
|
// 其他
|
||||||
'Dragon':"龙",
|
'Dragon':"龙",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -41,15 +41,16 @@ const searchText = inject('searchText') as Ref<string>;
|
|||||||
const previewInfo = inject('previewInfo') as any;
|
const previewInfo = inject('previewInfo') as any;
|
||||||
const previewRef = inject('previewRef') as any;
|
const previewRef = inject('previewRef') as any;
|
||||||
|
|
||||||
const activeSubCategory = ref('factory');
|
const activeSubCategory = ref('building');
|
||||||
const subCategories = ref([
|
const subCategories = ref([
|
||||||
{key: 'factory', name: cpt('extra.resource.billboard.Factory')},
|
{key: 'building', name: cpt('extra.resource.model.Building')},
|
||||||
{key: 'other', name: cpt('extra.resource.model.Other')}
|
{key: 'other', name: cpt('extra.resource.model.Other')}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const allList = {
|
const allList = {
|
||||||
"factory": [
|
"building": [
|
||||||
{key: "APetrochemicalPlant", image: "/static/images/resource/tiles/factory/APetrochemicalPlant.jpg", name: cpt('extra.resource.tiles.A petrochemical plant'), tileset: "/static/resource/tiles/factory/APetrochemicalPlant/tileset.json"},
|
{key: "APetrochemicalPlant", image: "/static/images/resource/tiles/building/APetrochemicalPlant.jpg", name: cpt('extra.resource.tiles.A petrochemical plant'), tileset: "/static/resource/tiles/building/APetrochemicalPlant/tileset.json"},
|
||||||
|
{key: "BuildingGroup1", image: "/static/images/resource/tiles/building/buildingGroup1.jpg", name: cpt('extra.resource.tiles.Building group 1'), tileset: "https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Utrecht_3D_Tiles_Integrated_Mesh/3DTilesServer/tileset.json"},
|
||||||
],
|
],
|
||||||
"other": [
|
"other": [
|
||||||
{key: "Dragon", image: "/static/images/resource/tiles/other/dragon.jpg", name: cpt('extra.resource.tiles.Dragon'), tileset: "/static/resource/tiles/other/dragon/tileset.json"},
|
{key: "Dragon", image: "/static/images/resource/tiles/other/dragon.jpg", name: cpt('extra.resource.tiles.Dragon'), tileset: "/static/resource/tiles/other/dragon/tileset.json"},
|
||||||
@@ -67,9 +68,14 @@ function selectSubCategory(key: string) {
|
|||||||
|
|
||||||
// 预览
|
// 预览
|
||||||
async function handlePreview(item){
|
async function handlePreview(item){
|
||||||
|
let url = item.tileset;
|
||||||
|
if(!url.startsWith('http')){
|
||||||
|
url = import.meta.env.VITE_GLOB_ORIGIN + item.tileset;
|
||||||
|
}
|
||||||
|
|
||||||
previewInfo.name = (item.name as Ref<string>).value || item.name;
|
previewInfo.name = (item.name as Ref<string>).value || item.name;
|
||||||
previewInfo.type = "Tiles";
|
previewInfo.type = "Tiles";
|
||||||
previewInfo.fileOrUrl = import.meta.env.VITE_GLOB_ORIGIN + item.tileset;
|
previewInfo.fileOrUrl = url;
|
||||||
previewInfo.visible = true;
|
previewInfo.visible = true;
|
||||||
|
|
||||||
// TODO: [20250927] 直接赋值previewInfo.fileOrUrl就会在预览组件中自动加载模型,运行2个月没问题后删除下面注释
|
// TODO: [20250927] 直接赋值previewInfo.fileOrUrl就会在预览组件中自动加载模型,运行2个月没问题后删除下面注释
|
||||||
@@ -93,9 +99,14 @@ async function handlePreview(item){
|
|||||||
|
|
||||||
//双击添加至场景..
|
//双击添加至场景..
|
||||||
function addToScene(item, position?: Vector3) {
|
function addToScene(item, position?: Vector3) {
|
||||||
|
let url = item.tileset;
|
||||||
|
if(!url.startsWith('http')){
|
||||||
|
url = import.meta.env.VITE_GLOB_ORIGIN + item.tileset;
|
||||||
|
}
|
||||||
|
|
||||||
const tiles = new Tiles({
|
const tiles = new Tiles({
|
||||||
// 内置的3dTiles打包时需要存入完整地址方可通过sdk加载回来
|
// 内置的3dTiles打包时需要存入完整地址方可通过sdk加载回来
|
||||||
url: import.meta.env.VITE_GLOB_ORIGIN + item.tileset,
|
url: url,
|
||||||
name:item.name.value || item.name,
|
name:item.name.value || item.name,
|
||||||
reset2origin:true,
|
reset2origin:true,
|
||||||
debug:false,
|
debug:false,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {TilesRenderer} from "3d-tiles-renderer";
|
import {TilesRenderer} from "3d-tiles-renderer";
|
||||||
import {GLTFExtensionsPlugin,DebugTilesPlugin} from "3d-tiles-renderer/plugins";
|
import {GLTFExtensionsPlugin,GLTFMeshFeaturesExtension,GLTFStructuralMetadataExtension,TilesFadePlugin,DebugTilesPlugin,UnloadTilesPlugin} from "3d-tiles-renderer/plugins";
|
||||||
import Loader from "@/core/loader/Loader.ts";
|
import Loader from "@/core/loader/Loader.ts";
|
||||||
import {PerspectiveCamera, WebGLRenderer, Group, JSONMeta} from "three";
|
import {PerspectiveCamera, WebGLRenderer, Group, JSONMeta} from "three";
|
||||||
import {deepAssign} from "@/utils";
|
import {deepAssign} from "@/utils";
|
||||||
@@ -14,7 +14,7 @@ export default class Tiles extends Group{
|
|||||||
reset2origin:true,
|
reset2origin:true,
|
||||||
debug:false,
|
debug:false,
|
||||||
name:"Tiles",
|
name:"Tiles",
|
||||||
errorTarget: 5,
|
errorTarget: 6,
|
||||||
LRUCache:{
|
LRUCache:{
|
||||||
maxSize: 4000,
|
maxSize: 4000,
|
||||||
minSize: 3000,
|
minSize: 3000,
|
||||||
@@ -68,11 +68,27 @@ export default class Tiles extends Group{
|
|||||||
tilesRenderer.registerPlugin(new GLTFExtensionsPlugin({
|
tilesRenderer.registerPlugin(new GLTFExtensionsPlugin({
|
||||||
dracoLoader: Loader.dracoLoader,
|
dracoLoader: Loader.dracoLoader,
|
||||||
ktxLoader: Loader.ktx2Loader,
|
ktxLoader: Loader.ktx2Loader,
|
||||||
|
plugins:[() => new GLTFMeshFeaturesExtension(),() => new GLTFStructuralMetadataExtension()]
|
||||||
}));
|
}));
|
||||||
// Loader.createGLTFLoader(tilesRenderer.manager).then(loader => {
|
// Loader.createGLTFLoader(tilesRenderer.manager).then(loader => {
|
||||||
|
// loader.register(() => new GLTFMeshFeaturesExtension());
|
||||||
|
// loader.register(() => new GLTFStructuralMetadataExtension());
|
||||||
// tilesRenderer.manager.addHandler( /\.(gltf|glb)$/g, loader );
|
// tilesRenderer.manager.addHandler( /\.(gltf|glb)$/g, loader );
|
||||||
// })
|
// })
|
||||||
|
|
||||||
|
// 瓦片渐显隐
|
||||||
|
tilesRenderer.registerPlugin(new TilesFadePlugin());
|
||||||
|
// 从gpu卸载不可见瓦片数据,cpu上仍然存在
|
||||||
|
tilesRenderer.registerPlugin(new UnloadTilesPlugin());
|
||||||
|
if(this.options.debug){
|
||||||
|
// 注册调试插件
|
||||||
|
tilesRenderer.registerPlugin(new DebugTilesPlugin());
|
||||||
|
// 获取调试插件
|
||||||
|
const debugTilesPlugin = tilesRenderer.getPluginByName('DEBUG_TILES_PLUGIN') as DebugTilesPlugin;
|
||||||
|
// 显示包围盒的线框
|
||||||
|
debugTilesPlugin.displayBoxBounds = true;
|
||||||
|
}
|
||||||
|
|
||||||
// 子级瓦片加载
|
// 子级瓦片加载
|
||||||
tilesRenderer.addEventListener('load-model', (e) => {
|
tilesRenderer.addEventListener('load-model', (e) => {
|
||||||
e.scene.traverse(c => {
|
e.scene.traverse(c => {
|
||||||
@@ -92,15 +108,6 @@ export default class Tiles extends Group{
|
|||||||
console.error(`${tilesRenderer.group.name} load error:`, e);
|
console.error(`${tilesRenderer.group.name} load error:`, e);
|
||||||
});
|
});
|
||||||
|
|
||||||
if(this.options.debug){
|
|
||||||
// 注册调试插件
|
|
||||||
tilesRenderer.registerPlugin(new DebugTilesPlugin());
|
|
||||||
// 获取调试插件
|
|
||||||
const debugTilesPlugin = tilesRenderer.getPluginByName('DEBUG_TILES_PLUGIN') as DebugTilesPlugin;
|
|
||||||
// 显示包围盒的线框
|
|
||||||
debugTilesPlugin.displayBoxBounds = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tilesRenderer;
|
return tilesRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -149,6 +149,8 @@ export class TilesManage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
|
// this.camera.updateMatrixWorld();
|
||||||
|
|
||||||
for (const tiles of this.tilesMap.values()) {
|
for (const tiles of this.tilesMap.values()) {
|
||||||
tiles.forEach(tile => tile.update());
|
tiles.forEach(tile => tile.update());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user