Browse Source

babylon.js 删除

master
修宁 7 months ago
parent
commit
7573738473
  1. 4
      package.json
  2. 160
      pnpm-lock.yaml
  3. 16
      src/designer/menus/Model3DView.ts
  4. 357
      src/designer/model3DView/Model3DViewBabylonJs.vue
  5. 1
      tsconfig.app.json

4
package.json

@ -37,10 +37,6 @@
"vue3-menus": "^1.1.2"
},
"devDependencies": {
"@babylonjs/core": "^8.9.0",
"@babylonjs/inspector": "^8.9.0",
"@babylonjs/loaders": "^8.9.0",
"@babylonjs/materials": "^8.9.0",
"@element-plus/icons-vue": "^2.3.1",
"@rolldown/pluginutils": "1.0.0-beta.8-commit.56abf23",
"@tsconfig/node22": "^22.0.1",

160
pnpm-lock.yaml

@ -78,18 +78,6 @@ importers:
specifier: ^1.1.2
version: 1.1.2
devDependencies:
'@babylonjs/core':
specifier: ^8.9.0
version: 8.9.0
'@babylonjs/inspector':
specifier: ^8.9.0
version: 8.9.0(@babylonjs/addons@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/core@8.9.0)(@babylonjs/gui-editor@8.9.0(@babylonjs/core@8.9.0)(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5))(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/loaders@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0))(@babylonjs/materials@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/serializers@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)
'@babylonjs/loaders':
specifier: ^8.9.0
version: 8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0)
'@babylonjs/materials':
specifier: ^8.9.0
version: 8.9.0(@babylonjs/core@8.9.0)
'@element-plus/icons-vue':
specifier: ^2.3.1
version: 2.3.1(vue@3.5.14(typescript@5.8.3))
@ -293,57 +281,6 @@ packages:
resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
engines: {node: '>=6.9.0'}
'@babylonjs/addons@8.9.0':
resolution: {integrity: sha512-GdGPKtu9XMHm5IJl2INMEbGAyKqNJoUeQtz9Tscg8lA0WEulnBwjtWGGQsjCse1aq4WMY4VcGp1lbTlwa9kCNQ==}
peerDependencies:
'@babylonjs/core': ^8.0.0
'@babylonjs/core@8.9.0':
resolution: {integrity: sha512-ZHMDsjFZqeSejtJ+sR2OjUHjk4gjgfjX/iDdZKJMHhst4T/P2pTRl/zcpuxYijqe6P03KV35n5INhShRXV/psw==}
'@babylonjs/gui-editor@8.9.0':
resolution: {integrity: sha512-rV9mWRBLd6dqhJwSbaBQgUplGr5dHnLMHqes919gS7bBbnqA/S9MBeZC88QVWgaAoX4gXZXTLK3aNOQ1x2Sfiw==}
peerDependencies:
'@babylonjs/core': ^8.0.0
'@babylonjs/gui': ^8.0.0
'@types/react': '>=16.7.3'
'@types/react-dom': '>=16.0.9'
'@babylonjs/gui@8.9.0':
resolution: {integrity: sha512-6wR0Iw6BueluwAOH4cAisS/kKluTNVOj0qUkhsAkKEWHAvWeTDnL0BaHSunOF48KJS3bEAMTk7NSYK2ODLt+sw==}
peerDependencies:
'@babylonjs/core': ^8.0.0
'@babylonjs/inspector@8.9.0':
resolution: {integrity: sha512-PZDTV1f5pSTUKu/Bh+CZp1KnWHF79ElwNZ2oaZASDsXk9eOX/MYj390GXTYrQMtG8gsIjZRdoGkoPq277WK+WA==}
peerDependencies:
'@babylonjs/addons': ^8.0.0
'@babylonjs/core': ^8.0.0
'@babylonjs/gui': ^8.0.0
'@babylonjs/gui-editor': ^8.0.0
'@babylonjs/loaders': ^8.0.0
'@babylonjs/materials': ^8.0.0
'@babylonjs/serializers': ^8.0.0
'@types/react': '>=16.7.3'
'@types/react-dom': '>=16.0.9'
'@babylonjs/loaders@8.9.0':
resolution: {integrity: sha512-6Pm1qGGmMMg8x7LweOYRkTNt7O8UO+qi1pgg9oEN4NxH1GtcCzerEvn6jQxxALNVG7NZOVBdTbo5clfbuP0Ylg==}
peerDependencies:
'@babylonjs/core': ^8.0.0
babylonjs-gltf2interface: ^8.0.0
'@babylonjs/materials@8.9.0':
resolution: {integrity: sha512-AbQRABnxbuAj3eKjB+7Ar3MQ/C8dWwqQh1Z3Ryx+tVqyDJbzjNJkjtwzKxgULYSku0k3vi4viY7ugNGx5Jvnog==}
peerDependencies:
'@babylonjs/core': ^8.0.0
'@babylonjs/serializers@8.9.0':
resolution: {integrity: sha512-E5/B1vP1kPdFs+d62LbW/B4uLckdvDACnvFtEc6bFFHPslM2zncs3IF35Bl2RZSKmFJHsv5VRCKnQfVW+8U1Iw==}
peerDependencies:
'@babylonjs/core': ^8.0.0
babylonjs-gltf2interface: ^8.0.0
'@ctrl/tinycolor@3.6.1':
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
@ -515,22 +452,6 @@ packages:
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
'@fortawesome/fontawesome-common-types@6.7.2':
resolution: {integrity: sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==}
engines: {node: '>=6'}
'@fortawesome/fontawesome-svg-core@6.7.2':
resolution: {integrity: sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==}
engines: {node: '>=6'}
'@fortawesome/free-regular-svg-icons@6.7.2':
resolution: {integrity: sha512-7Z/ur0gvCMW8G93dXIQOkQqHo2M5HLhYrRVC0//fakJXxcF1VmMPsxnG6Ee8qEylA8b8Q3peQXWMNZ62lYF28g==}
engines: {node: '>=6'}
'@fortawesome/free-solid-svg-icons@6.7.2':
resolution: {integrity: sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==}
engines: {node: '>=6'}
'@intlify/core-base@9.2.2':
resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==}
engines: {node: '>= 14'}
@ -730,14 +651,6 @@ packages:
'@types/node@22.15.21':
resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==}
'@types/react-dom@19.1.5':
resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
peerDependencies:
'@types/react': ^19.0.0
'@types/react@19.1.5':
resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==}
'@types/sizzle@2.3.9':
resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==}
@ -931,9 +844,6 @@ packages:
axios@1.9.0:
resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
babylonjs-gltf2interface@8.9.0:
resolution: {integrity: sha512-3Ob/5OS618JEUQ1ojRfv3xk+vFuztBpn3rmXUh7TBknwzzz75DneUCoRCeWZz1log0b6qkYPRnxAtAPEvZZrhg==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@ -1950,52 +1860,6 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
'@babylonjs/addons@8.9.0(@babylonjs/core@8.9.0)':
dependencies:
'@babylonjs/core': 8.9.0
'@babylonjs/core@8.9.0': {}
'@babylonjs/gui-editor@8.9.0(@babylonjs/core@8.9.0)(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)':
dependencies:
'@babylonjs/core': 8.9.0
'@babylonjs/gui': 8.9.0(@babylonjs/core@8.9.0)
'@types/react': 19.1.5
'@types/react-dom': 19.1.5(@types/react@19.1.5)
'@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0)':
dependencies:
'@babylonjs/core': 8.9.0
'@babylonjs/inspector@8.9.0(@babylonjs/addons@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/core@8.9.0)(@babylonjs/gui-editor@8.9.0(@babylonjs/core@8.9.0)(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5))(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/loaders@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0))(@babylonjs/materials@8.9.0(@babylonjs/core@8.9.0))(@babylonjs/serializers@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)':
dependencies:
'@babylonjs/addons': 8.9.0(@babylonjs/core@8.9.0)
'@babylonjs/core': 8.9.0
'@babylonjs/gui': 8.9.0(@babylonjs/core@8.9.0)
'@babylonjs/gui-editor': 8.9.0(@babylonjs/core@8.9.0)(@babylonjs/gui@8.9.0(@babylonjs/core@8.9.0))(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)
'@babylonjs/loaders': 8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0)
'@babylonjs/materials': 8.9.0(@babylonjs/core@8.9.0)
'@babylonjs/serializers': 8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0)
'@fortawesome/fontawesome-svg-core': 6.7.2
'@fortawesome/free-regular-svg-icons': 6.7.2
'@fortawesome/free-solid-svg-icons': 6.7.2
'@types/react': 19.1.5
'@types/react-dom': 19.1.5(@types/react@19.1.5)
'@babylonjs/loaders@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0)':
dependencies:
'@babylonjs/core': 8.9.0
babylonjs-gltf2interface: 8.9.0
'@babylonjs/materials@8.9.0(@babylonjs/core@8.9.0)':
dependencies:
'@babylonjs/core': 8.9.0
'@babylonjs/serializers@8.9.0(@babylonjs/core@8.9.0)(babylonjs-gltf2interface@8.9.0)':
dependencies:
'@babylonjs/core': 8.9.0
babylonjs-gltf2interface: 8.9.0
'@ctrl/tinycolor@3.6.1': {}
'@dimforge/rapier3d-compat@0.12.0': {}
@ -2090,20 +1954,6 @@ snapshots:
'@floating-ui/utils@0.2.9': {}
'@fortawesome/fontawesome-common-types@6.7.2': {}
'@fortawesome/fontawesome-svg-core@6.7.2':
dependencies:
'@fortawesome/fontawesome-common-types': 6.7.2
'@fortawesome/free-regular-svg-icons@6.7.2':
dependencies:
'@fortawesome/fontawesome-common-types': 6.7.2
'@fortawesome/free-solid-svg-icons@6.7.2':
dependencies:
'@fortawesome/fontawesome-common-types': 6.7.2
'@intlify/core-base@9.2.2':
dependencies:
'@intlify/devtools-if': 9.2.2
@ -2251,14 +2101,6 @@ snapshots:
dependencies:
undici-types: 6.21.0
'@types/react-dom@19.1.5(@types/react@19.1.5)':
dependencies:
'@types/react': 19.1.5
'@types/react@19.1.5':
dependencies:
csstype: 3.1.3
'@types/sizzle@2.3.9': {}
'@types/stats.js@0.17.4': {}
@ -2518,8 +2360,6 @@ snapshots:
transitivePeerDependencies:
- debug
babylonjs-gltf2interface@8.9.0: {}
balanced-match@1.0.2: {}
birpc@2.3.0: {}

16
src/designer/menus/Model3DView.ts

@ -1,6 +1,5 @@
import { defineMenu } from '@/runtime/DefineMenu.ts'
import Model3DView from '@/designer/model3DView/Model3DView.vue'
import Model3DViewBabylonJs from '@/designer/model3DView/Model3DViewBabylonJs.vue'
export default defineMenu((menus) => {
menus.insertChildren('tool',
@ -22,21 +21,6 @@ export default defineMenu((menus) => {
dialogClass: 'model-3d-view-wrap'
})
}
},
{
name: 'model3dviewBabylon', label: '模型查看器 (BabylonJs)', order: 2,
click: () => {
system.showDialog(Model3DViewBabylonJs, {
title: '模型查看器 BabylonJs',
width: 950,
height: 400,
showClose: true,
showMax: true,
showCancelButton: false,
showOkButton: false,
dialogClass: 'model-3d-view-wrap'
})
}
}
]
)

357
src/designer/model3DView/Model3DViewBabylonJs.vue

@ -1,357 +0,0 @@
<template>
<div class="model3d-view">
<el-space :gutter="10" class="toolbar">
<el-upload :on-change="handleFileChange"
:show-file-list="false" accept=".fbx,.obj,.mtl,.3ds" action="" :auto-upload="false">
<el-button type="primary">打开模型</el-button>
</el-upload>
<el-upload :on-change="handleTextureUpload"
:show-file-list="false" accept=".png,.jpg,.jpeg" action="" :auto-upload="false"
list-type="picture">
<el-button>打开贴图</el-button>
</el-upload>
<el-upload :on-change="handleMtlUpload"
:show-file-list="false" accept=".mtl" action="" :auto-upload="false"
list-type="picture">
<el-button>打开材质</el-button>
</el-upload>
<div class="demo-color-block">
<span class="demonstration">材质颜色</span>
<el-color-picker v-model="restate.targetColor" />
</div>
<!-- 1:1 / 1:0.001 比例 -->
<div class="demo-color-block">
<span class="demonstration">默认比例</span>
<el-radio-group v-model="restate.loadScale">
<el-radio-button label="1" :value="1" />
<el-radio-button label="0.01" :value="0.01" />
<el-radio-button label="0.001" :value="0.001" />
</el-radio-group>
</div>
<div class="demo-color-block">
<span class="demonstration">物体数:<el-text type="danger">{{ restate.objects }}</el-text></span>
<span class="demonstration"> 顶点数:<el-text type="danger">{{ restate.vertices }}</el-text></span>
<span class="demonstration"> 三角形数:<el-text type="danger">{{ restate.faces }}</el-text></span>
</div>
</el-space>
<div class="main-content">
<Split class="model3d-content" :direction="'horizontal'">
<SplitArea class="model3d-canvas" :size="70">
<!-- Three.js 渲染画布 -->
<div class="canvas-container" ref="canvasContainer">
<canvas ref="canvasRef"></canvas>
<div class="canvas-left-toolbar">
<button class="Button" :class="{selected:(restate.mode==='translate')}" title="平移"
@mousedown="restate.mode='translate'">
<component :is="renderIcon('element Rank')" />
</button>
<button class="Button" :class="{selected:(restate.mode==='rotate')}" title="旋转"
@mousedown="restate.mode='rotate'">
<component :is="renderIcon('element RefreshLeft')" />
</button>
<button class="Button" :class="{selected:(restate.mode==='scale')}" title="缩放"
@mousedown="restate.mode='scale'">
<component :is="renderIcon('element ScaleToOriginal')" />
</button>
</div>
</div>
</SplitArea>
<SplitArea class="model3d-gui" :size="30">
<div class="model3d-gui-wrap">
<!-- 右侧面板 -->
<div class="gui-toolbar">
<TransformEdit ref="transformEditCtl" />
</div>
<div class="gui-panel" ref="guiPanel"></div>
</div>
</SplitArea>
</Split>
</div>
</div>
</template>
<script setup lang="ts">
import TransformEdit from '@/components/propertyEdit/TransformEdit.vue'
import { ref, onMounted, nextTick, reactive, watch, getCurrentInstance, onUnmounted, onBeforeUnmount } from 'vue'
import '@babylonjs/core/Debug/debugLayer'
import '@babylonjs/inspector'
import {
Engine,
Scene,
ArcRotateCamera,
Vector3,
HemisphericLight,
MeshBuilder,
Color4,
Camera,
GizmoManager,
DirectionalLight
} from '@babylonjs/core'
import { TransformNode } from '@babylonjs/core'
import Split from '@/components/split/split.vue'
import SplitArea from '@/components/split/split-area.vue'
import { renderIcon } from '@/utils/webutils.js'
import { GridMaterial } from '@babylonjs/materials'
// DOM refs
const canvasRef = ref(null)
// Three.js
let engine: Engine
let scene: Scene
let camera: ArcRotateCamera
let gizmoManager: GizmoManager
let currentMesh = null
let modelGroup, resizeObserver
const restate = reactive({
targetColor: '#ff0000',
loadScale: 1,
mode: 'translate',
objects: 0,
vertices: 0,
faces: 0
})
//
const state = {
showAxesHelper: true,
showGridHelper: true,
camera: {
position: { x: 0, y: 5, z: 10 },
rotation: { x: 0, y: 0, z: 0 }
}
}
onMounted(() => {
nextTick(() => {
initBabylon()
const viewerDom = canvasRef.value
resizeObserver = new ResizeObserver(handleResize)
resizeObserver.observe(viewerDom)
handleResize()
window['model3dView'] = getCurrentInstance()
window['engine'] = engine
window['scene'] = scene
window['camera'] = camera
window['gizmoManager'] = gizmoManager
})
})
onBeforeUnmount(() => {
cleanupThree()
const viewerDom = canvasRef.value
if (resizeObserver) {
resizeObserver.unobserve(viewerDom)
}
window['model3dView'] = null
window['model3dViewRenderer'] = null
})
watch(() => restate.targetColor, (newVal) => {
// if (modelGroup) {
// modelGroup.traverse((child) => {
// if (child.isMesh && child.material?.color) {
// child.material.color.set(newVal)
// child.material.needsUpdate = true
// }
// })
// }
})
watch(() => restate.mode, (newVal) => {
// if (tcontrols) {
// tcontrols.setMode(newVal)
// }
})
function initBabylon() {
//
engine = new Engine(canvasRef.value, true)
scene = new Scene(engine)
// 线
const ground = MeshBuilder.CreateGround('ground', { width: 25, height: 25 })
ground.material = new GridMaterial('groundMat')
ground.material.backFaceCulling = false
camera = new ArcRotateCamera('ArcRotateCamera', 1, 0.8, 10, new Vector3(0, 0, 0), scene)
// camera.panningInertia = 0
camera.attachControl(true, true, 0)
camera.lowerRadiusLimit = 2 //
camera.upperRadiusLimit = 10 // upperRadiusLimitlowerRadiusLimit
camera.wheelDeltaPercentage = 0.09 //
camera.checkCollisions = true //
camera.upperBetaLimit = (Math.PI / 2) * 0.9 // beta
camera.lowerRadiusLimit = 0.1 //
camera.upperRadiusLimit = 1000 //
camera.radius = 1 //
camera.setTarget(Vector3.Zero()) //
// camera.panningSensibility = 1 //
//
new HemisphericLight('light1', new Vector3(1, 1, 0), scene)
const directionalLight = new DirectionalLight(
'dirLight',
new Vector3(-1, -1, -1),
scene
)
// Gizmo
gizmoManager = new GizmoManager(scene)
gizmoManager.usePointerToAttachGizmos = false
// //
const box = MeshBuilder.CreateBox('box', {})
box.position = new Vector3(1, 2, 5)
engine.runRenderLoop(() => {
scene.render()
})
}
/**
* 重新加载相机状态到全局状态
*/
function syncCameraState() {
if (camera) {
state.camera.position.x = camera.position.x
state.camera.position.y = camera.position.y
state.camera.position.z = camera.position.z
state.camera.rotation.x = camera.rotation.x
state.camera.rotation.y = camera.rotation.y
state.camera.rotation.z = camera.rotation.z
}
}
function handleTextureUpload(file) {
}
let lastObjfile = undefined
function handleMtlUpload(file) {
}
function addGroupToScene(group) {
}
function handleFileChange(file) {
}
function cleaupModel() {
}
function cleanupThree() {
//
}
function handleResize() {
if (canvasRef.value) {
const width = canvasRef.value.clientWidth
const height = canvasRef.value.clientHeight
if (engine) {
engine.resize()
engine.setSize(width, height)
}
}
}
</script>
<style scoped lang="less">
.model3d-view {
display: flex;
flex-direction: column;
flex-grow: 1;
overflow: hidden;
.canvas-left-toolbar {
position: absolute;
left: 5px;
top: 5px;
width: 32px;
background: #eee;
text-align: center;
button {
color: #555;
background-color: #ddd;
border: 0;
margin: 0;
padding: 5px 8px;
font-size: 12px;
text-transform: uppercase;
cursor: pointer;
outline: none;
}
button.selected {
background-color: #fff;
}
}
.toolbar {
padding: 10px;
background: #f5f5f5;
border-bottom: 1px solid #ccc;
}
.dialog-container {
display: flex;
flex-direction: column;
height: 100vh;
}
.main-content {
display: flex;
flex: 1;
overflow: hidden;
.model3d-content {
height: 100%;
display: flex;
flex-direction: row;
}
}
.canvas-container {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
canvas {
width: 100%;
height: 100%;
touch-action: none;
}
}
.model3d-gui-wrap {
border-left: 1px solid #ccc;
background: #111;
width: 100%;
height: 100%;
overflow-y: auto;
}
.gui-panel {
:deep(.lil-gui.root) {
width: 100%;
}
}
}
</style>

1
tsconfig.app.json

@ -39,7 +39,6 @@
]
},
"types": [
"babylonjs"
]
},
"extends": "@vue/tsconfig/tsconfig.dom.json",

Loading…
Cancel
Save