feat(All):Initial

This commit is contained in:
ErSan 2025-10-04 23:36:07 +08:00
commit 2b4e5d2668
1321 changed files with 415958 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

2
.npmrc Normal file
View File

@ -0,0 +1,2 @@
# 解决pnpm add时优先在本地查找依赖
link-workspace-packages=true

60
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,60 @@
# 贡献指南
欢迎来到 Astral 3D 社区!以下是参与贡献的指南:
## 🛠️ 开发流程
### 环境要求
- Node.js 18+
- Yarn
### 代码规范
1. Git 提交信息格式:
```
<type>(<scope>): <subject>
- type: feat|fix|docs|style|refactor|test|chore
- scope: Editor|Preview|Home|SDK 等模块范围
- subject: 50字内简明描述
```
2. 前端规范:
- Vue 组件使用 Composition API
- TypeScript 严格模式
- CSS 使用 UnoCSS 原子化方案
## 🐛 问题报告
使用 [GitHub Issues](https://github.com/mlt131220/Astral3D/issues) 时请包含:
1. 环境信息OS/浏览器/Node版本
2. 重现步骤
3. 预期与实际行为
4. 相关截图/日志
## ✨ 功能建议
1. 在 Discussions 发起提案讨论
2. 提供使用场景描述
3. 如有原型设计请附示意图
## 🌐 国际化
添加新语言请按以下步骤:
1. 在 `src/language` 创建语言文件
2. 会以文件名作为语言标识符 注册新语言
3. 在 `src/components/setting/common/Locale.vue` 中添加新语言选项
4. 提交 Pull Request 并 @ 维护者
## 🔄 代码提交
1. Fork 仓库并创建特性分支
2. 编写单元测试(重要功能必须包含)
3. 执行代码检查:
```bash
yarn lint
```
4. 发起 Pull Request 至 dev 分支
## 🏅 贡献者公约
请遵守 [贡献者公约](https://www.contributor-covenant.org/version/2/1/code_of_conduct/),我们承诺:
- 友好包容的交流环境
- 尊重不同的开发经验
- 建设性的技术讨论
## 💼 代码所有权
所有贡献代码默认遵循项目 Apache-2.0 协议,作者保留对代码库的最终管理权限。

42
LEGAL.md Normal file
View File

@ -0,0 +1,42 @@
# 法律声明
## 📜 许可协议
本项目采用 [Apache-2.0 许可证](LICENSE),核心条款包括:
### 您必须遵守:
1. **保留声明**
所有副本必须包含:
- 原始版权声明(见本文件底部)
- NOTICE 文件(如有)
- 许可证副本
2. **修改标识**
修改后的版本必须:
- 在文件头添加显著修改声明
- 保留所有现有版权声明
3. **附加商业条款:**
- 直接使用本源码产生的商业行为需获得作者书面授权
- 基于本项目的二次开发产品需在显著位置声明原始项目信息
## ⚠️ 免责声明
1. 作者不对使用本项目产生的任何直接/间接损失负责
2. 禁止将本项目用于任何违法用途,包括但不限于:
- 侵犯他人知识产权
- 传播恶意软件
- 进行网络攻击
- 其他违反当地法律法规的行为
## ®️ 商标条款
1. "Astral"名称及标识为项目作者注册商标
2. 未经授权不得:
- 使用项目名称进行商业宣传
- 修改或隐藏原始项目标识
- 在衍生品中使用Astral商标
- 暗示与官方项目的关联性
## ©️ 版权声明
2019-2025 © ErSan<mlt131220@163.com>. All rights reserved.

201
LICENSE Normal file
View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2024 ErSan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

108
README.en.md Normal file
View File

@ -0,0 +1,108 @@
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
🌍 [简体中文](README.md) | English
[![Online Demo](https://img.shields.io/badge/Online_Demo-Astral_3D_Editor-8732D7?style=for-the-badge&logo=google-chrome&logoColor=white)](https://editor.astraljs.com)
> Modern Web 3D editor based on Vue3 + Three.js
<div align="center">
<img src="http://editor-doc.astraljs.com/images/home/thumbnailDark.png?t=20250518" width="800" alt="Editor City Preview">
<img src="http://editor-doc.astraljs.com/images/home/industryDark.png?t=20250318" width="800" alt="Editor Preview">
</div>
## 💬 Join the community
Get the latest news and technical support in the following ways:
| [![QQ Group](https://img.shields.io/badge/QQ_Group-1040320579-07C160?logo=wechat&logoColor=white)](https://upyun.astraljs.com/static/images/QQGroup.jpg) | [![Contact Author](https://img.shields.io/badge/Contact_Author-WeChat(Business)-07C160?logo=wechat&logoColor=white)](https://upyun.astraljs.com/static/images/ContactMe.jpg) |
|----------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://upyun.astraljs.com/static/images/QQGroup.jpg" width="200"> | <img src="https://upyun.astraljs.com/static/images/ContactMe.jpg" width="200"> |
## 🚀 Core competence
### Core function
- ✅ Multi-format support: 30+ model format (GLTF/OBJ/FBX/GLB/RVT/IFC, etc.)
- ✅ BIM Model Lightweight Demonstration (RVT/IFC)
- ✅ CAD drawing analysis (DWG/DXF)
- ✅ Scenario subcontract storage and loading
- ✅ Animation editor
### Expansion capability
- 🧩 plug-in system
- 📜 When the script is running
- 💫 Particle system
- ❄️ Weather system
- ☁️ Cloud Storage Integration (USS again)
- 🎠 Resource center
### Coming soon
- 🚧 Physical engine support
- 🚧 WebGPU support
- 🚧 Data components (API/WebSocket)
- 🚧 low code data large screen
- 🚧 WebSocket Multi-party collaboration
## 🛠️ Technology stack
![Vue3](https://img.shields.io/badge/Vue-3.3.4-4FC08D?logo=vuedotjs)
![Three.js](https://img.shields.io/badge/Three.js-r170-000000?logo=threedotjs)
![Cesium](https://img.shields.io/badge/Cesium-1.107.0-0133B4?logo=cesium)
![NaiveUI](https://img.shields.io/badge/Naive_UI-2.39.0-66C060?logo=vue.js)
![UnoCSS](https://img.shields.io/badge/UnoCSS-0.46.5-333333?logo=unocss)
## ⚡ Quick start
### pre-demand
- Node.js ≥ 18.x
- Yarn
### Local run
```bash
git clone https://github.com/mlt131220/Astral3D.git
cd Astral3D
pnpm install
pnpm run sdk:build
pnpm run editor:dev
```
### Production construction
```bash
pnpm run editor:build
```
## 📚 Ecological correlation
### Back-end implementation
[![Java Backend](https://img.shields.io/badge/Back_end_implementation-AstralService-00ADD8)](https://github.com/yx8663/astral-service)
### Document center
[![Documentation](https://img.shields.io/badge/Document_center-Astral_Docs-8732D7?logo=gitbook)](http://editor-doc.astraljs.com/)
## ☕ Support project
If this project is helpful to you, please feel free to:
1. In case wall [user] (https://github.com/mlt131220/Astral3D/issues/2) leave your usage scenario
2. Scan code support developers:
| AliPay | WeChat |
|---------------------------------------------------------------------------|------------------------------------------------------------------------------|
| <img src="https://editor-doc.astraljs.com/images/AliPay.png" width="200"> | <img src="https://editor-doc.astraljs.com/images/WeChatPay.png" width="200"> |
## ⚖️ License agreement
This project uses the [![Apache License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) open source license, please comply with the following terms:
- ✅ Allowed: personal learning, secondary development, commercial use
- ⚠️ A copyright notice is required.
- ❌ Do not use this item for any illegal purpose
**[Full legal notice](LEGAL.md)** | **[Contribution guide](CONTRIBUTING.md)**
## 🌟 Star trend
[![Star History Chart](https://api.star-history.com/svg?repos=mlt131220/Astral3D&type=Date)](https://star-history.com/#mlt131220/Astral3D&Date)

109
README.md Normal file
View File

@ -0,0 +1,109 @@
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
🌍 简体中文 | [English](README.en.md)
[![Online Demo](https://img.shields.io/badge/Online_Demo-Astral_3D_Editor-8732D7?style=for-the-badge&logo=google-chrome&logoColor=white)](https://editor.astraljs.com)
> 基于 Vue3 + Three.js 的现代 Web 3D 编辑器
<div align="center">
<img src="http://editor-doc.astraljs.com/images/home/thumbnailDark.png?t=20250518" width="800" alt="Editor City Preview">
<img src="http://editor-doc.astraljs.com/images/home/industryDark.png?t=20250318" width="800" alt="Editor Preview">
</div>
## 💬 加入社区
通过以下方式获取最新动态和技术支持:
| [![QQ Group](https://img.shields.io/badge/QQ交流群-1040320579-07C160?logo=wechat&logoColor=white)](https://upyun.astraljs.com/static/images/QQGroup.jpg) | [![Contact Author](https://img.shields.io/badge/联系作者-个人微信(仅商务)-07C160?logo=wechat&logoColor=white)](https://upyun.astraljs.com/static/images/ContactMe.jpg) |
|-----------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://upyun.astraljs.com/static/images/QQGroup.jpg" width="200"> | <img src="https://upyun.astraljs.com/static/images/ContactMe.jpg" width="200"> |
## 🚀 核心能力
### 核心功能
- ✅ 多格式支持:[30+ 模型格式GLTF/OBJ/FBX/GLB/RVT/IFC等](http://editor-doc.astraljs.com/guide/f7smai4w/#%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E5%8C%BA)
- ✅ BIM模型轻量化展示RVT/IFC
- ✅ CAD图纸解析DWG/DXF
- ✅ 场景分包存储与加载
- ✅ 动画编辑器
### 扩展能力
- 🧩 插件系统
- 📜 脚本运行时
- 💫 粒子系统
- ❄️ 天气系统
- ☁️ 云存储集成(又拍云 USS
- 🎠 资源中心
### 即将到来
- 🚧 物理引擎支持
- 🚧 WebGPU 支持
- 🚧 数据组件API/WebSocket
- 🚧 低代码数据大屏
- 🚧 WebSocket 多人协作
## 🛠️ 技术栈
![Vue3](https://img.shields.io/badge/Vue-3.3.4-4FC08D?logo=vuedotjs)
![Three.js](https://img.shields.io/badge/Three.js-r170-000000?logo=threedotjs)
![Cesium](https://img.shields.io/badge/Cesium-1.107.0-0133B4?logo=cesium)
![NaiveUI](https://img.shields.io/badge/Naive_UI-2.39.0-66C060?logo=vue.js)
![UnoCSS](https://img.shields.io/badge/UnoCSS-0.46.5-333333?logo=unocss)
## ⚡ 快速开始
### 前置需求
- Node.js ≥ 23.0.0
- PNPM
### 本地运行
```bash
git clone https://github.com/mlt131220/Astral3D.git
cd Astral3D
pnpm install
pnpm run sdk:build
pnpm run editor:dev
```
### 生产构建
```bash
pnpm run editor:build
```
## 📚 生态相关
### 后端实现
[![Java Backend](https://img.shields.io/badge/后端实现-AstralService-00ADD8)](https://github.com/yx8663/astral-service)
### 文档中心
[![Documentation](https://img.shields.io/badge/文档中心-Astral_Docs-8732D7?logo=gitbook)](http://editor-doc.astraljs.com/)
## ☕ 支持项目
如果本项目对您有帮助,欢迎:
1. 在 [用户案例墙](https://github.com/mlt131220/Astral3D/issues/2) 留下您的使用场景
2. 扫码支持开发者:
| 支付宝 | 微信 |
|---------------------------------------------------------------------------|------------------------------------------------------------------------------|
| <img src="https://editor-doc.astraljs.com/images/AliPay.png" width="200"> | <img src="https://editor-doc.astraljs.com/images/WeChatPay.png" width="200"> |
## ⚖️ 许可协议
本项目采用 [![Apache License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) 开源协议,使用时请遵守以下条款:
- ✅ 允许:个人学习、二次开发、商业用途
- ⚠️ 需要版权声明
- ❌ 禁止:将本项目用于非法用途
**[完整法律声明](LEGAL.md)** | **[贡献指南](CONTRIBUTING.md)**
## 🌟 Star 趋势
[![Star History Chart](https://api.star-history.com/svg?repos=mlt131220/Astral3D&type=Date)](https://star-history.com/#mlt131220/Astral3D&Date)

22
common/build/package.json Normal file
View File

@ -0,0 +1,22 @@
{
"name": "@astral3d/build-vite-plugins",
"author": "ErSan<mlt131220@163.com>",
"private": true,
"version": "1.0.0",
"type": "module",
"main": "./src/index.ts",
"dependencies": {
},
"devDependencies": {
"@types/fs-extra": "^11.0.3",
"dotenv": "16.3.1",
"fs-extra": "^11.1.1",
"rollup-plugin-visualizer": "catalog:",
"typescript": "catalog:",
"unplugin-config": "^0.1.5",
"vite": "catalog:",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-enhance-log": "^0.6.2",
"vite-plugin-top-level-await": "^1.3.1"
}
}

View File

@ -0,0 +1,2 @@
export * from './utils.ts';
export * from './plugins/index.ts';

View File

@ -0,0 +1,28 @@
// @ts-ignore
import ConfigPlugin from 'unplugin-config/vite';
import type { PluginOption } from 'vite';
import {getEnvConfig,strToHex} from "../utils.ts";
export async function createConfigPluginConfig(
shouldGenerateConfig: boolean,
): Promise<PluginOption> {
const config:Record<string, any> = await getEnvConfig();
const APP_NAME = strToHex(config?.VITE_GLOB_APP_TITLE ?? '__APP');
// https://github.com/kirklin/unplugin-config
return ConfigPlugin({
appName: APP_NAME,
baseDir:"./",
envVariables: {
prefix: 'VITE_GLOB_',
files: [".env.production", ".env"],
},
configFile: {
generate: shouldGenerateConfig,
fileName: '_astral3d.config.js',
outputDir: 'dist',
},
htmlInjection: {
decodeEntities: true,
},
});
}

View File

@ -0,0 +1,36 @@
/**
* gzip;
* Vite中不能正常工作
* https://github.com/anncwb/vite-plugin-compression
*/
import type { PluginOption } from 'vite';
import compressPlugin from 'vite-plugin-compression';
export function configCompressPlugin({compress,deleteOriginFile = false}: {
compress: "gzip" | "brotli" | "none";
deleteOriginFile?: boolean;
}): PluginOption[] {
const compressList = compress.split(',');
const plugins: PluginOption[] = [];
if (compressList.includes('gzip')) {
plugins.push(
compressPlugin({
ext: '.gz',
deleteOriginFile,
}),
);
}
if (compressList.includes('brotli')) {
plugins.push(
compressPlugin({
ext: '.br',
algorithm: 'brotliCompress',
deleteOriginFile,
}),
);
}
return plugins;
}

View File

@ -0,0 +1,54 @@
import type {PluginOption} from 'vite';
import topLevelAwait from "vite-plugin-top-level-await";
import EnhanceLog from 'vite-plugin-enhance-log';
import {createConfigPluginConfig} from "./appConfig.ts";
import {configCompressPlugin} from "./compress.ts";
import {configVisualizerConfig} from "./visualizer.ts";
interface Options {
isBuild: boolean;
root: string;
compress: {
compress: "gzip" | "brotli" | "none";
deleteOriginFile: boolean;
};
enableAnalyze?: boolean;
enableConfig?: boolean;
}
export async function createPlugins({isBuild,compress,enableAnalyze,enableConfig}: Options) {
const vitePlugins: (PluginOption | PluginOption[])[] = [
topLevelAwait({
// 每个块模块的顶级await promise的导出名称
promiseExportName: "__tla",
// 用于在每个块模块中生成顶级await承诺的导入名称的函数
promiseImportName: i => `__tla_${i}`
}),
EnhanceLog({
/** 高亮文件名firefox不支持 */
colorFileName: true,
splitBy: '\n',
preTip: '🚀🚀🚀🚀🚀🚀',
enableFileName: { enableDir: false}
}),
];
if(enableConfig){
const appConfigPlugin = await createConfigPluginConfig(isBuild);
vitePlugins.push(appConfigPlugin);
}
// 以下插件只在生产环境中工作
if (isBuild) {
// rollup-plugin-gzip
vitePlugins.push(configCompressPlugin(compress));
// 打包视图分析 rollup-plugin-visualizer
if (enableAnalyze) {
vitePlugins.push(configVisualizerConfig());
}
}
return vitePlugins;
}

View File

@ -0,0 +1,15 @@
/**
* package.json包文件容量分析
*/
// @ts-ignore
import {visualizer} from 'rollup-plugin-visualizer';
import { type PluginOption } from 'vite';
export function configVisualizerConfig() {
return visualizer({
filename: 'node_modules/.cache/visualizer/stats.html',
open: true,
gzipSize: true,
brotliSize: true,
}) as PluginOption;
}

75
common/build/src/utils.ts Normal file
View File

@ -0,0 +1,75 @@
import { join } from 'node:path';
import pkg from 'fs-extra';
import {parse} from "dotenv";
/**
* .env
*/
export function wrapperEnv(envConf) {
const ret:any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, '\n');
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
if (envName === 'VITE_PORT') {
realName = Number(realName);
}
ret[envName] = realName;
if (typeof realName === 'string') {
process.env[envName] = realName;
} else if (typeof realName === 'object') {
process.env[envName] = JSON.stringify(realName);
}
}
return ret;
}
/**
*
*/
function getConfFiles() {
const script = process.env.npm_lifecycle_script;
const reg = new RegExp('--mode ([a-z_\\d]+)');
const result = reg.exec(script as string) as any;
if (result) {
const mode = result[1] as string;
return ['.env', `.env.${mode}`];
}
return ['.env', '.env.production'];
}
/**
*
* @param match prefix
* @param confFiles ext
*/
export async function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
let envConfig = {};
for (const confFile of confFiles) {
try {
const envPath = await pkg.readFile(join(process.cwd(), confFile), { encoding: 'utf8' });
const env = parse(envPath);
envConfig = { ...envConfig, ...env };
} catch (e) {
console.error(`Error in parsing ${confFile}`, e);
}
}
const reg = new RegExp(`^(${match})`);
Object.keys(envConfig).forEach((key) => {
if (!reg.test(key)) {
Reflect.deleteProperty(envConfig, key);
}
});
return envConfig;
}
export function strToHex(str: string) {
const result: string[] = [];
for (let i = 0; i < str.length; ++i) {
const hex = str.charCodeAt(i).toString(16);
result.push(('000' + hex).slice(-4));
}
return result.join('').toUpperCase();
}

View File

@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "esnext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"noImplicitAny": false,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"types": [],
"typeRoots": ["./node_modules/@types/"]
},
"include": ["src"],
"exclude": []
}

23
package.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "astral3d",
"version": "1.0.0",
"description": "Astral3D Engine",
"author": "ErSan <mlt131220@163.com>",
"scripts": {
"docs:dev": "pnpm run -C packages/docs docs:dev",
"docs:dev-clean": "pnpm run -C packages/docs docs:dev-clean",
"docs:build": "pnpm run -C packages/docs docs:build",
"docs:preview": "pnpm run -C packages/docs docs:preview",
"editor:dev": "pnpm run -C packages/editor dev",
"editor:build": "pnpm run -C packages/editor build",
"editor:tsc": "pnpm run -C packages/editor tsc",
"editor:preview": "pnpm run -C packages/editor preview",
"sdk:dev": "pnpm run -C packages/sdk dev",
"sdk:build": "pnpm run -C packages/sdk build"
},
"engines": {
"node": ">=23.0.0"
},
"keywords": [],
"packageManager": "pnpm@10.8.1"
}

4
packages/docs/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules
src/.vuepress/cache
src/.vuepress/dist
src/.vuepress/temp

3
packages/docs/.npmrc Normal file
View File

@ -0,0 +1,3 @@
shamefully-hoist=true
shell-emulator=true
auto-install-peers=true

View File

@ -0,0 +1,24 @@
{
"name": "@astral3d/docs",
"type": "module",
"version": "1.0.0",
"description": "Astral3D 文档",
"packageManager": "pnpm@10.8.1",
"author": "ErSan <mlt131220@163.com>",
"scripts": {
"docs:dev": "vuepress dev src",
"docs:dev-clean": "vuepress dev src --clean-cache --clean-temp",
"docs:build": "vuepress build src --clean-cache --clean-temp",
"docs:preview": "http-server src/.vuepress/dist",
"vp-update": "pnpm dlx vp-update"
},
"devDependencies": {
"@vuepress/bundler-vite": "^2.0.0-rc.24",
"http-server": "^14.1.1",
"sass-embedded": "^1.85.0",
"typescript": "^5.7.3",
"vue": "^3.5.13",
"vuepress": "^2.0.0-rc.24",
"vuepress-theme-plume": "^1.0.0-rc.164"
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
import { GitContributors } from "D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-git@2.0.0-_3888087f136caca2e6182a3f7923d60b/node_modules/@vuepress/plugin-git/lib/client/components/GitContributors.js";
export default {
enhance: ({ app }) => {
app.component("GitContributors", GitContributors);
},
};

View File

@ -0,0 +1,2 @@
import './articleTagColors.css'
export const articleTagColors = {}

View File

@ -0,0 +1 @@
export const blogPostData = [{"path":"/promotion/","title":"推广中心","categoryList":[],"createTime":"2025/10/04 19:34:07","lang":"zh-CN","excerpt":""},{"path":"/questions/","title":"常见问题","categoryList":[],"createTime":"2025/02/20 16:19:54","lang":"zh-CN","excerpt":""}]

View File

@ -0,0 +1,27 @@
import * as clientConfig0 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress-plume+plugin-font_57d2a5ed8174cdd689a0c01cc1570add/node_modules/@vuepress-plume/plugin-fonts/lib/client/config.js'
import * as clientConfig1 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-copy-code@_a0256e22abe8f1e188ed9327038db869/node_modules/@vuepress/plugin-copy-code/lib/client/config.js'
import * as clientConfig2 from 'D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/shiki/config.js'
import * as clientConfig3 from 'D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/md-power/config.js'
import * as clientConfig4 from 'D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/markdown-math/config.js'
import * as clientConfig5 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-nprogress@_6a81f5149c8e02fe27bc022b3cc82e96/node_modules/@vuepress/plugin-nprogress/lib/client/config.js'
import * as clientConfig6 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-photo-swip_3e10a5606c8980d93749ef1da6fd795c/node_modules/@vuepress/plugin-photo-swipe/lib/client/config.js'
import * as clientConfig7 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-comment@2._d6678c25be023e406eb131de93f5d9f4/node_modules/@vuepress/plugin-comment/lib/client/config.js'
import * as clientConfig8 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress-plume+plugin-sear_a8411ee8221f594d395ace93c87de572/node_modules/@vuepress-plume/plugin-search/lib/client/config.js'
import * as clientConfig9 from 'D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/git/config.js'
import * as clientConfig10 from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-theme-plume@1.0.0-_f74d1d42b810bb0e55305dbb3a3efd52/node_modules/vuepress-theme-plume/lib/client/config.js'
import * as clientConfig11 from 'D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/client.ts'
export const clientConfigs = [
clientConfig0,
clientConfig1,
clientConfig2,
clientConfig3,
clientConfig4,
clientConfig5,
clientConfig6,
clientConfig7,
clientConfig8,
clientConfig9,
clientConfig10,
clientConfig11,
].map((m) => m.default).filter(Boolean)

View File

@ -0,0 +1 @@
export const encrypt = [false,":","",[],{}]

View File

@ -0,0 +1 @@
export const icons = "{}"

View File

@ -0,0 +1 @@
export const searchIndex = {"/": () => import('@internal/minisearchIndex/searchBox-default.js')}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,70 @@
export const redirects = JSON.parse("{\"/promotion.html\":\"/promotion/\",\"/questions.html\":\"/questions/\",\"/notes/guide/%E4%BB%8B%E7%BB%8D.html\":\"/guide/6xkx4dnv/\",\"/notes/guide/%E9%83%A8%E7%BD%B2.html\":\"/guide/n6o11owv/\",\"/notes/guide/plugins/%E5%85%A5%E9%97%A8.html\":\"/guide/plugin/31eucyqc/\",\"/notes/guide/plugins/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91.html\":\"/guide/plugin/7ro8hsc0/\",\"/notes/update/logs/\":\"/update/096h956m/\",\"/notes/update/logs/_2023_02.html\":\"/update/98pjt8xt/\",\"/notes/update/logs/_2023_03.html\":\"/update/moioo5zp/\",\"/notes/update/logs/_2023_04.html\":\"/update/ycbwubyy/\",\"/notes/update/logs/_2023_05.html\":\"/update/sfp23i9i/\",\"/notes/update/logs/_2023_07.html\":\"/update/dbofligs/\",\"/notes/update/logs/_2023_08.html\":\"/update/oju4gahd/\",\"/notes/update/logs/_2024_03.html\":\"/update/xis3xfo2/\",\"/notes/update/logs/_2024_04.html\":\"/update/doebw5ta/\",\"/notes/update/logs/_2024_05.html\":\"/update/oeg8mvgy/\",\"/notes/update/logs/_2024_06.html\":\"/update/t48csw55/\",\"/notes/update/logs/_2024_07.html\":\"/update/8znubzxf/\",\"/notes/update/logs/_2024_08.html\":\"/update/64cj5dsm/\",\"/notes/update/logs/_2024_09.html\":\"/update/efnqd97u/\",\"/notes/update/logs/_2024_10.html\":\"/update/elfg1zow/\",\"/notes/update/logs/_2024_11.html\":\"/update/6k8gige3/\",\"/notes/update/logs/_2024_12.html\":\"/update/rw89vgwo/\",\"/notes/update/logs/_2025_01.html\":\"/update/wjdm5npt/\",\"/notes/update/logs/_2025_02.html\":\"/update/khikfd9q/\",\"/notes/update/logs/_2025_03.html\":\"/update/fi34hwb4/\",\"/notes/update/logs/_2025_04.html\":\"/update/xnmgi5kk/\",\"/notes/update/logs/_2025_05.html\":\"/update/ptvud2e5/\",\"/notes/update/logs/_2025_06.html\":\"/update/ptv58fgr/\",\"/notes/guide/manual/editor/%E7%95%8C%E9%9D%A2.html\":\"/guide/swepocsg/\",\"/notes/guide/manual/editor/%E9%A1%B6%E6%A0%8F.html\":\"/guide/f7smai4w/\",\"/notes/guide/manual/home/%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%BF%83.html\":\"/guide/v0m2jmb5/\",\"/notes/guide/manual/home/%E8%AE%BE%E7%BD%AE%E4%B8%AD%E5%BF%83.html\":\"/guide/sekzh2c0/\",\"/notes/guide/manual/home/%E8%B5%84%E6%BA%90%E4%B8%AD%E5%BF%83.html\":\"/guide/4tirtbsc/\",\"/notes/guide/manual/home/%E9%A1%B9%E7%9B%AE.html\":\"/guide/dbd366ps/\",\"/notes/guide/manual/preview/%E7%95%8C%E9%9D%A2.html\":\"/guide/chhmeza7/\",\"/notes/guide/plugins/builtin/glTFHandler.html\":\"/guide/plugin/builtin/jo87cfk0/\",\"/notes/guide/manual/editor/extras/%E5%8A%A8%E7%94%BB%E7%BC%96%E8%BE%91%E5%99%A8.html\":\"/guide/5s7acuj0/\",\"/notes/guide/manual/editor/extras/%E6%97%A5%E5%BF%97.html\":\"/guide/0q1bxrub/\",\"/notes/guide/manual/editor/extras/%E8%B5%84%E6%BA%90%E4%B8%AD%E5%BF%83.html\":\"/guide/dju4ekca/\",\"/notes/guide/manual/editor/leftSidebar/BIM%E8%BD%BB%E9%87%8F%E5%8C%96.html\":\"/guide/rf1xgf4z/\",\"/notes/guide/manual/editor/leftSidebar/CAD%E8%A7%A3%E6%9E%90%E9%A2%84%E8%A7%88.html\":\"/guide/u1631nwk/\",\"/notes/guide/manual/editor/leftSidebar/%E5%9C%BA%E6%99%AF%E6%A0%91.html\":\"/guide/rzqb0h0l/\",\"/notes/guide/manual/editor/rightSidebar/Html%E9%9D%A2%E6%9D%BF.html\":\"/guide/kk5cv2ij/\",\"/notes/guide/manual/editor/rightSidebar/%E5%87%A0%E4%BD%95.html\":\"/guide/nct00cif/\",\"/notes/guide/manual/editor/rightSidebar/%E5%8A%A8%E7%94%BB.html\":\"/guide/g3kxptm0/\",\"/notes/guide/manual/editor/rightSidebar/%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95.html\":\"/guide/ae7ufigr/\",\"/notes/guide/manual/editor/rightSidebar/%E5%90%8E%E6%9C%9F%E5%A4%84%E7%90%86.html\":\"/guide/l8hd921o/\",\"/notes/guide/manual/editor/rightSidebar/%E5%9C%BA%E6%99%AF%E5%9B%BE%E7%BA%B8.html\":\"/guide/ta6draim/\",\"/notes/guide/manual/editor/rightSidebar/%E5%9C%BA%E6%99%AF%E9%85%8D%E7%BD%AE.html\":\"/guide/pnmbue0k/\",\"/notes/guide/manual/editor/rightSidebar/%E5%A4%A9%E6%B0%94.html\":\"/guide/fn9xwbkf/\",\"/notes/guide/manual/editor/rightSidebar/%E5%AF%B9%E8%B1%A1.html\":\"/guide/2xlh6nrf/\",\"/notes/guide/manual/editor/rightSidebar/%E5%B9%BF%E5%91%8A%E7%89%8C.html\":\"/guide/18al65zg/\",\"/notes/guide/manual/editor/rightSidebar/%E6%9D%90%E8%B4%A8.html\":\"/guide/l1df4723/\",\"/notes/guide/manual/editor/rightSidebar/%E6%B8%B2%E6%9F%93%E5%99%A8%E9%85%8D%E7%BD%AE.html\":\"/guide/crvssx6j/\",\"/notes/guide/manual/editor/rightSidebar/%E7%B2%92%E5%AD%90.html\":\"/guide/siz46vj0/\",\"/notes/guide/manual/editor/rightSidebar/%E8%84%9A%E6%9C%AC.html\":\"/guide/component/h4v1bkyh/\",\"/notes/guide/manual/editor/viewport/2D%E5%9B%BE%E7%BA%B8.html\":\"/guide/7eo51kfy/\",\"/notes/guide/manual/editor/viewport/3D%E5%9C%BA%E6%99%AF.html\":\"/guide/jkg3yahd/\"}")
export const routes = Object.fromEntries([
["/promotion/", { loader: () => import(/* webpackChunkName: "promotion_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/promotion/index.html.js"), meta: {"title":"推广中心"} }],
["/questions/", { loader: () => import(/* webpackChunkName: "questions_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/questions/index.html.js"), meta: {"title":"常见问题"} }],
["/", { loader: () => import(/* webpackChunkName: "index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/index.html.js"), meta: {"title":""} }],
["/guide/6xkx4dnv/", { loader: () => import(/* webpackChunkName: "guide_6xkx4dnv_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/6xkx4dnv/index.html.js"), meta: {"title":"介绍"} }],
["/guide/n6o11owv/", { loader: () => import(/* webpackChunkName: "guide_n6o11owv_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/n6o11owv/index.html.js"), meta: {"title":"部署(待更新)"} }],
["/notes/sdk/", { loader: () => import(/* webpackChunkName: "notes_sdk_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/notes/sdk/index.html.js"), meta: {"title":"🍉 暂未编写"} }],
["/guide/plugin/31eucyqc/", { loader: () => import(/* webpackChunkName: "guide_plugin_31eucyqc_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/31eucyqc/index.html.js"), meta: {"title":"入门"} }],
["/guide/plugin/7ro8hsc0/", { loader: () => import(/* webpackChunkName: "guide_plugin_7ro8hsc0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/7ro8hsc0/index.html.js"), meta: {"title":"插件开发"} }],
["/update/096h956m/", { loader: () => import(/* webpackChunkName: "update_096h956m_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/096h956m/index.html.js"), meta: {"title":"更新日志"} }],
["/update/98pjt8xt/", { loader: () => import(/* webpackChunkName: "update_98pjt8xt_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/98pjt8xt/index.html.js"), meta: {"title":"2月"} }],
["/update/moioo5zp/", { loader: () => import(/* webpackChunkName: "update_moioo5zp_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/moioo5zp/index.html.js"), meta: {"title":"3月"} }],
["/update/ycbwubyy/", { loader: () => import(/* webpackChunkName: "update_ycbwubyy_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/ycbwubyy/index.html.js"), meta: {"title":"4月"} }],
["/update/sfp23i9i/", { loader: () => import(/* webpackChunkName: "update_sfp23i9i_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/sfp23i9i/index.html.js"), meta: {"title":"5月"} }],
["/update/dbofligs/", { loader: () => import(/* webpackChunkName: "update_dbofligs_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/dbofligs/index.html.js"), meta: {"title":"7月"} }],
["/update/oju4gahd/", { loader: () => import(/* webpackChunkName: "update_oju4gahd_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/oju4gahd/index.html.js"), meta: {"title":"8月"} }],
["/update/xis3xfo2/", { loader: () => import(/* webpackChunkName: "update_xis3xfo2_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/xis3xfo2/index.html.js"), meta: {"title":"3月"} }],
["/update/doebw5ta/", { loader: () => import(/* webpackChunkName: "update_doebw5ta_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/doebw5ta/index.html.js"), meta: {"title":"4月"} }],
["/update/oeg8mvgy/", { loader: () => import(/* webpackChunkName: "update_oeg8mvgy_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/oeg8mvgy/index.html.js"), meta: {"title":"5月"} }],
["/update/t48csw55/", { loader: () => import(/* webpackChunkName: "update_t48csw55_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/t48csw55/index.html.js"), meta: {"title":"6月"} }],
["/update/8znubzxf/", { loader: () => import(/* webpackChunkName: "update_8znubzxf_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/8znubzxf/index.html.js"), meta: {"title":"7月"} }],
["/update/64cj5dsm/", { loader: () => import(/* webpackChunkName: "update_64cj5dsm_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/64cj5dsm/index.html.js"), meta: {"title":"8月"} }],
["/update/efnqd97u/", { loader: () => import(/* webpackChunkName: "update_efnqd97u_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/efnqd97u/index.html.js"), meta: {"title":"9月"} }],
["/update/elfg1zow/", { loader: () => import(/* webpackChunkName: "update_elfg1zow_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/elfg1zow/index.html.js"), meta: {"title":"10月"} }],
["/update/6k8gige3/", { loader: () => import(/* webpackChunkName: "update_6k8gige3_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/6k8gige3/index.html.js"), meta: {"title":"11月"} }],
["/update/rw89vgwo/", { loader: () => import(/* webpackChunkName: "update_rw89vgwo_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/rw89vgwo/index.html.js"), meta: {"title":"12月"} }],
["/update/wjdm5npt/", { loader: () => import(/* webpackChunkName: "update_wjdm5npt_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/wjdm5npt/index.html.js"), meta: {"title":"1月"} }],
["/update/khikfd9q/", { loader: () => import(/* webpackChunkName: "update_khikfd9q_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/khikfd9q/index.html.js"), meta: {"title":"2月"} }],
["/update/fi34hwb4/", { loader: () => import(/* webpackChunkName: "update_fi34hwb4_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/fi34hwb4/index.html.js"), meta: {"title":"3月"} }],
["/update/xnmgi5kk/", { loader: () => import(/* webpackChunkName: "update_xnmgi5kk_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/xnmgi5kk/index.html.js"), meta: {"title":"4月"} }],
["/update/ptvud2e5/", { loader: () => import(/* webpackChunkName: "update_ptvud2e5_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/ptvud2e5/index.html.js"), meta: {"title":"5月"} }],
["/update/ptv58fgr/", { loader: () => import(/* webpackChunkName: "update_ptv58fgr_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/update/ptv58fgr/index.html.js"), meta: {"title":"6月"} }],
["/guide/swepocsg/", { loader: () => import(/* webpackChunkName: "guide_swepocsg_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/swepocsg/index.html.js"), meta: {"title":"界面"} }],
["/guide/f7smai4w/", { loader: () => import(/* webpackChunkName: "guide_f7smai4w_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/f7smai4w/index.html.js"), meta: {"title":"顶栏"} }],
["/guide/v0m2jmb5/", { loader: () => import(/* webpackChunkName: "guide_v0m2jmb5_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/v0m2jmb5/index.html.js"), meta: {"title":"数据中心"} }],
["/guide/sekzh2c0/", { loader: () => import(/* webpackChunkName: "guide_sekzh2c0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/sekzh2c0/index.html.js"), meta: {"title":"设置中心"} }],
["/guide/4tirtbsc/", { loader: () => import(/* webpackChunkName: "guide_4tirtbsc_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/4tirtbsc/index.html.js"), meta: {"title":"资源中心"} }],
["/guide/dbd366ps/", { loader: () => import(/* webpackChunkName: "guide_dbd366ps_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/dbd366ps/index.html.js"), meta: {"title":"项目"} }],
["/guide/chhmeza7/", { loader: () => import(/* webpackChunkName: "guide_chhmeza7_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/chhmeza7/index.html.js"), meta: {"title":"界面"} }],
["/guide/plugin/builtin/jo87cfk0/", { loader: () => import(/* webpackChunkName: "guide_plugin_builtin_jo87cfk0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/builtin/jo87cfk0/index.html.js"), meta: {"title":"glTF 处理器"} }],
["/guide/5s7acuj0/", { loader: () => import(/* webpackChunkName: "guide_5s7acuj0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/5s7acuj0/index.html.js"), meta: {"title":"动画编辑器"} }],
["/guide/0q1bxrub/", { loader: () => import(/* webpackChunkName: "guide_0q1bxrub_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/0q1bxrub/index.html.js"), meta: {"title":"日志"} }],
["/guide/dju4ekca/", { loader: () => import(/* webpackChunkName: "guide_dju4ekca_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/dju4ekca/index.html.js"), meta: {"title":"资源中心"} }],
["/guide/rf1xgf4z/", { loader: () => import(/* webpackChunkName: "guide_rf1xgf4z_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/rf1xgf4z/index.html.js"), meta: {"title":"BIM轻量化"} }],
["/guide/u1631nwk/", { loader: () => import(/* webpackChunkName: "guide_u1631nwk_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/u1631nwk/index.html.js"), meta: {"title":"CAD解析预览"} }],
["/guide/rzqb0h0l/", { loader: () => import(/* webpackChunkName: "guide_rzqb0h0l_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/rzqb0h0l/index.html.js"), meta: {"title":"场景树"} }],
["/guide/kk5cv2ij/", { loader: () => import(/* webpackChunkName: "guide_kk5cv2ij_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/kk5cv2ij/index.html.js"), meta: {"title":"Html面板"} }],
["/guide/nct00cif/", { loader: () => import(/* webpackChunkName: "guide_nct00cif_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/nct00cif/index.html.js"), meta: {"title":"几何"} }],
["/guide/g3kxptm0/", { loader: () => import(/* webpackChunkName: "guide_g3kxptm0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/g3kxptm0/index.html.js"), meta: {"title":"动画"} }],
["/guide/ae7ufigr/", { loader: () => import(/* webpackChunkName: "guide_ae7ufigr_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/ae7ufigr/index.html.js"), meta: {"title":"历史记录"} }],
["/guide/l8hd921o/", { loader: () => import(/* webpackChunkName: "guide_l8hd921o_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/l8hd921o/index.html.js"), meta: {"title":"后期处理"} }],
["/guide/ta6draim/", { loader: () => import(/* webpackChunkName: "guide_ta6draim_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/ta6draim/index.html.js"), meta: {"title":"场景图纸"} }],
["/guide/pnmbue0k/", { loader: () => import(/* webpackChunkName: "guide_pnmbue0k_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/pnmbue0k/index.html.js"), meta: {"title":"场景配置"} }],
["/guide/fn9xwbkf/", { loader: () => import(/* webpackChunkName: "guide_fn9xwbkf_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/fn9xwbkf/index.html.js"), meta: {"title":"天气"} }],
["/guide/2xlh6nrf/", { loader: () => import(/* webpackChunkName: "guide_2xlh6nrf_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/2xlh6nrf/index.html.js"), meta: {"title":"对象"} }],
["/guide/18al65zg/", { loader: () => import(/* webpackChunkName: "guide_18al65zg_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/18al65zg/index.html.js"), meta: {"title":"广告牌"} }],
["/guide/l1df4723/", { loader: () => import(/* webpackChunkName: "guide_l1df4723_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/l1df4723/index.html.js"), meta: {"title":"材质"} }],
["/guide/crvssx6j/", { loader: () => import(/* webpackChunkName: "guide_crvssx6j_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/crvssx6j/index.html.js"), meta: {"title":"渲染器配置"} }],
["/guide/siz46vj0/", { loader: () => import(/* webpackChunkName: "guide_siz46vj0_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/siz46vj0/index.html.js"), meta: {"title":"粒子"} }],
["/guide/component/h4v1bkyh/", { loader: () => import(/* webpackChunkName: "guide_component_h4v1bkyh_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/component/h4v1bkyh/index.html.js"), meta: {"title":"脚本"} }],
["/guide/7eo51kfy/", { loader: () => import(/* webpackChunkName: "guide_7eo51kfy_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/7eo51kfy/index.html.js"), meta: {"title":"2D图纸"} }],
["/guide/jkg3yahd/", { loader: () => import(/* webpackChunkName: "guide_jkg3yahd_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/jkg3yahd/index.html.js"), meta: {"title":"3D场景"} }],
["/404.html", { loader: () => import(/* webpackChunkName: "404.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/404.html.js"), meta: {"title":""} }],
["/blog/", { loader: () => import(/* webpackChunkName: "blog_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/index.html.js"), meta: {"title":"博客"} }],
["/blog/tags/", { loader: () => import(/* webpackChunkName: "blog_tags_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/tags/index.html.js"), meta: {"title":"标签"} }],
["/blog/archives/", { loader: () => import(/* webpackChunkName: "blog_archives_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/archives/index.html.js"), meta: {"title":"归档"} }],
["/blog/categories/", { loader: () => import(/* webpackChunkName: "blog_categories_index.html" */"D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/categories/index.html.js"), meta: {"title":"分类"} }],
]);

View File

@ -0,0 +1 @@
export const sidebar = {"/":{"/update":{"items":[{"text":"2025年","collapsed":false,"icon":"carbon:calendar","items":["_2025_01","_2025_02","_2025_03","_2025_04","_2025_05","_2025_06"]},{"text":"2024年","collapsed":false,"icon":"carbon:calendar","items":["_2024_03","_2024_04","_2024_05","_2024_06","_2024_07","_2024_08","_2024_09","_2024_10","_2024_11","_2024_12"]},{"text":"2023年","collapsed":false,"icon":"carbon:calendar","items":["_2023_02","_2023_03","_2023_04","_2023_05","_2023_07","_2023_08"]}],"prefix":"/notes/update/logs/"},"/update/plan":{"items":"auto","prefix":"/notes/update/plan/"},"/guide":{"items":[{"text":"快速入门","collapsed":false,"icon":"carbon:lightning","items":["介绍","部署"]},{"text":"编辑器使用手册","collapsed":false,"prefix":"manual","icon":"carbon:apps","items":[{"text":"首页","collapsed":true,"prefix":"home","items":["项目","数据中心","资源中心","设置中心"]},{"text":"编辑器","collapsed":false,"prefix":"editor","items":["界面","顶栏",{"text":"左侧边栏","collapsed":false,"prefix":"leftSidebar","items":["场景树","CAD解析预览","BIM轻量化"]},{"text":"视口","collapsed":false,"prefix":"viewport","items":["2D图纸","3D场景"]},{"text":"扩展栏","collapsed":false,"prefix":"extras","items":["资源中心","动画编辑器","日志"]},{"text":"右侧边栏","collapsed":false,"prefix":"rightSidebar","items":["场景配置","渲染器配置","后期处理","天气","历史记录","场景图纸","对象","几何","材质","动画","脚本","粒子","广告牌","Html面板"]}]},{"text":"预览页","collapsed":true,"prefix":"preview","items":["界面"]}]},{"text":"插件系统","collapsed":false,"prefix":"plugins","icon":"carbon:lightning","items":["入门","插件开发",{"text":"内置插件","collapsed":false,"prefix":"builtin","icon":"carbon:plug","items":["glTFHandler"]}]}],"prefix":"/notes/guide/"}},"__auto__":{"/notes/update/plan/":[]},"__home__":{}}

View File

@ -0,0 +1 @@
export const siteData = JSON.parse("{\"base\":\"/\",\"lang\":\"zh-CN\",\"title\":\"Astral3D\",\"description\":\"Astral3D 文档\",\"head\":[[\"link\",{\"rel\":\"icon\",\"type\":\"image/png\",\"href\":\"/logo64x64.png\"}]],\"locales\":{}}")

View File

@ -0,0 +1 @@
export const themeData = {"locales":{"/":{"selectLanguageName":"简体中文","selectLanguageText":"选择语言","appearanceText":"外观","lightModeSwitchTitle":"切换为浅色主题","darkModeSwitchTitle":"切换为深色主题","outlineLabel":"此页内容","returnToTopLabel":"返回顶部","editLinkText":"编辑此页","contributorsText":"贡献者","prevPageLabel":"上一页","nextPageLabel":"下一页","lastUpdatedText":"最后更新于","changelogText":"变更历史","changelogOnText":"于","changelogButtonText":"查看全部变更历史","copyrightText":"版权所有","copyrightAuthorText":"版权归属:","copyrightCreationOriginalText":"本文链接:","copyrightCreationTranslateText":"本文翻译自:","copyrightCreationReprintText":"本文转载自:","copyrightLicenseText":"许可证:","notFound":{"code":"404","title":"页面未找到","quote":"但是,如果你不改变方向,并且一直寻找,最终可能会到达你要去的地方。","linkText":"返回首页"},"homeText":"首页","blogText":"博客","tagText":"标签","archiveText":"归档","categoryText":"分类","archiveTotalText":"{count} 篇","encryptButtonText":"确认","encryptPlaceholder":"请输入密码","encryptGlobalText":"本站只允许密码访问","encryptPageText":"本页面只允许密码访问","footer":{"message":"","copyright":"Copyright © 2023-present <a target=\"_blank\" href=\"https://github.com/mlt131220\">ErSan <mlt131220@163.com></a>"},"logo":"/logo64x64.png","social":[{"icon":"github","link":"https://github.com/mlt131220/Astral3D"}],"copyright":true,"prevPage":true,"nextPage":true,"createTime":true,"profile":{"avatar":"/logo64x64.png","name":"Astral3D","description":"Astral3D 文档"},"bulletin":{"lifetime":"session","contentType":"markdown","id":"51042952","content":"<div style=\"text-align:center\"><p><strong>QQ 交流群:</strong> <a href=\"https://qm.qq.com/cgi-bin/qm/qr?k=Ewp9bODHFFaY6yphwEzmSe4lv889WbjR&amp;jump_from=webapi&amp;authKey=5gUSKPjhnXjhIy3pudNN/9igLNGxEwnN8yiXEDnEalE9loBQ4lEtVISG8OyXWmx8\" target=\"_blank\" rel=\"noopener noreferrer\">1040320579</a></p>\n<p><img src=\"/images/qq_qrcode.jpg\" alt=\"QQ qr_code\" width=\"618\" height=\"616\" style=\"width: 200px\"></p>\n<p>您在使用过程中遇到任何问题,欢迎通过 <a href=\"https://github.com/mlt131220/Astral3D/issues/new\" target=\"_blank\" rel=\"noopener noreferrer\">issue</a> 反馈。也欢迎加入我们的 QQ 交流群一起讨论。</p>\n<blockquote>\n<p>🔥 4核8G 200兆服务器仅需49元/月,<a href=\"https://www.rainyun.com/Astral3D_\" target=\"_blank\" rel=\"noopener noreferrer\">点击这里购买</a><br>\n专属优惠码Astral3D</p>\n</blockquote>\n</div>"},"navbar":[{"text":"指南","icon":"icon-park-outline:guide-board","link":"/notes/guide/介绍.md"},{"text":"SDK","link":"/notes/sdk/README.md","icon":"carbon:api"},{"text":"推广中心","link":"/promotion/","icon":"mdi:star-shooting-outline"},{"text":"更多","icon":"icon-park-outline:more-three","items":[{"text":"常见问题","link":"/questions/","icon":"wpf:faq"}]},{"text":"1.0.0","icon":"codicon:versions","items":[{"text":"更新日志","link":"/notes/update/logs/"}]}]}},"appearance":true,"blog":{"pagination":15,"postList":true,"tags":true,"archives":true,"categories":true,"link":"/blog/","tagsLink":"/blog/tags/","archivesLink":"/blog/archives/","categoriesLink":"/blog/categories/"},"navbarSocialInclude":["github","twitter","discord","facebook"],"aside":true,"outline":[2,3],"externalLinkIcon":true,"editLink":true,"prevPage":true,"nextPage":true,"footer":{"message":"","copyright":"Copyright © 2023-present <a target=\"_blank\" href=\"https://github.com/mlt131220\">ErSan <mlt131220@163.com></a>"},"logo":"/logo64x64.png","social":[{"icon":"github","link":"https://github.com/mlt131220/Astral3D"}],"copyright":true,"createTime":true,"profile":{"avatar":"/logo64x64.png","name":"Astral3D","description":"Astral3D 文档"},"contributors":true,"changelog":false,"bulletin":{"lifetime":"session","contentType":"markdown","id":"51042952","content":"<div style=\"text-align:center\"><p><strong>QQ 交流群:</strong> <a href=\"https://qm.qq.com/cgi-bin/qm/qr?k=Ewp9bODHFFaY6yphwEzmSe4lv889WbjR&amp;jump_from=webapi&amp;authKey=5gUSKPjhnXjhIy3pudNN/9igLNGxEwnN8yiXEDnEalE9loBQ4lEtVISG8OyXWmx8\" target=\"_blank\" rel=\"noopener noreferrer\">1040320579</a></p>\n<p><img src=\"/images/qq_qrcode.jpg\" alt=\"QQ qr_code\" width=\"618\" height=\"616\" style=\"width: 200px\"></p>\n<p>您在使用过程中遇到任何问题,欢迎通过 <a href=\"https://github.com/mlt131220/Astral3D/issues/new\" target=\"_blank\" rel=\"noopener noreferrer\">issue</a> 反馈。也欢迎加入我们的 QQ 交流群一起讨论。</p>\n<blockquote>\n<p>🔥 4核8G 200兆服务器仅需49元/月,<a href=\"https://www.rainyun.com/Astral3D_\" target=\"_blank\" rel=\"noopener noreferrer\">点击这里购买</a><br>\n专属优惠码Astral3D</p>\n</blockquote>\n</div>"}}

View File

@ -0,0 +1,2 @@
import "D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/katex@0.16.22/node_modules/katex/dist/katex.min.css";
import "D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/@vuepress+plugin-markdown-m_abd83ca7e483db759c316333198c3244/node_modules/@vuepress/plugin-markdown-math/lib/client/styles/katex.css";

View File

@ -0,0 +1,21 @@
import { defineClientConfig } from 'vuepress/client'
import Tabs from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/components/Tabs.vue'
import CodeTabs from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/components/CodeTabs.vue'
import Plot from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/components/Plot.vue'
import FileTreeNode from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/components/FileTreeNode.vue'
import Annotation from 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/components/Annotation.vue'
import 'D:/A-Ersan/astraljs/Astral3D/node_modules/.pnpm/vuepress-plugin-md-power@1._2c87109d6cd5f186736a72942ca145fb/node_modules/vuepress-plugin-md-power/lib/client/styles/index.css'
export default defineClientConfig({
enhance({ router, app }) {
app.component('Tabs', Tabs)
app.component('CodeTabs', CodeTabs)
app.component('Plot', Plot)
app.component('FileTreeNode', FileTreeNode)
app.component('Annotation', Annotation)
},
setup() {
}
})

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/404.html.vue"
const data = JSON.parse("{\"path\":\"/404.html\",\"title\":\"\",\"lang\":\"zh-CN\",\"frontmatter\":{\"layout\":\"NotFound\",\"description\":\"404 Not Found\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"name\\\":\\\"\\\",\\\"description\\\":\\\"404 Not Found\\\"}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/404.html\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"404 Not Found\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}]]},\"readingTime\":{\"minutes\":0.01,\"words\":3},\"git\":{},\"autoDesc\":true,\"filePathRelative\":null,\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,4 @@
<template><div><p>404 Not Found</p>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/archives/index.html.vue"
const data = JSON.parse("{\"path\":\"/blog/archives/\",\"title\":\"归档\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"归档\",\"draft\":true},\"readingTime\":{\"minutes\":0,\"words\":0},\"git\":{},\"filePathRelative\":null,\"headers\":[],\"type\":\"blog-archives\",\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/categories/index.html.vue"
const data = JSON.parse("{\"path\":\"/blog/categories/\",\"title\":\"分类\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"分类\",\"draft\":true},\"readingTime\":{\"minutes\":0,\"words\":0},\"git\":{},\"filePathRelative\":null,\"headers\":[],\"type\":\"blog-categories\",\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/index.html.vue"
const data = JSON.parse("{\"path\":\"/blog/\",\"title\":\"博客\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"博客\",\"draft\":true},\"readingTime\":{\"minutes\":0,\"words\":0},\"git\":{},\"filePathRelative\":null,\"headers\":[],\"type\":\"blog\",\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/blog/tags/index.html.vue"
const data = JSON.parse("{\"path\":\"/blog/tags/\",\"title\":\"标签\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"标签\",\"draft\":true},\"readingTime\":{\"minutes\":0,\"words\":0},\"git\":{},\"filePathRelative\":null,\"headers\":[],\"type\":\"blog-tags\",\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/0q1bxrub/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/0q1bxrub/\",\"title\":\"日志\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"日志\",\"createTime\":\"2025/03/31 20:03:00\",\"permalink\":\"/guide/0q1bxrub/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"日志\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/0q1bxrub/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"日志\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/extras/日志.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/18al65zg/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/18al65zg/\",\"title\":\"广告牌\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"广告牌\",\"createTime\":\"2025/04/17 17:11:18\",\"permalink\":\"/guide/18al65zg/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"广告牌\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/18al65zg/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"广告牌\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":11},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/广告牌.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/2xlh6nrf/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/2xlh6nrf/\",\"title\":\"对象\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"对象\",\"createTime\":\"2025/03/31 20:06:07\",\"permalink\":\"/guide/2xlh6nrf/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"对象\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/2xlh6nrf/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"对象\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/对象.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/4tirtbsc/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/4tirtbsc/\",\"title\":\"资源中心\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"资源中心\",\"createTime\":\"2025/08/01 15:14:39\",\"permalink\":\"/guide/4tirtbsc/\",\"description\":\"上传资源 类型可上传资源类型默认为模型、材质、纹理、广告牌、HDR; 分类:从树节点中选择资源所属的详细类别; 标签:为资源添加特定的标签,比如 “有动画、有骨骼” 之类的,便于在资源列表顶部勾选标签快速搜索; 缩略图:可以从本地选择,或者在选择资源文件后,点击 通过预览截图 生成。 文件:不同类型的资源具有不同的文件格式支持。 名称:默认会在上传...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"资源中心\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-08-01T17:28:41.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/4tirtbsc/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"资源中心\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"上传资源 类型可上传资源类型默认为模型、材质、纹理、广告牌、HDR; 分类:从树节点中选择资源所属的详细类别; 标签:为资源添加特定的标签,比如 “有动画、有骨骼” 之类的,便于在资源列表顶部勾选标签快速搜索; 缩略图:可以从本地选择,或者在选择资源文件后,点击 通过预览截图 生成。 文件:不同类型的资源具有不同的文件格式支持。 名称:默认会在上传...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-08-01T17:28:41.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-08-01T17:28:41.000Z\"}]]},\"readingTime\":{\"minutes\":2.97,\"words\":892},\"git\":{\"createdTime\":1754069321000,\"updatedTime\":1754069321000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/home/资源中心.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,157 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/assets/assets-page.png"
title="资源中心"
description="多级分类,精细控制"
author="ErSan"
date="2025/08/01"
/>
</div></div><h2 id="上传资源" tabindex="-1"><a class="header-anchor" href="#上传资源"><span>上传资源</span></a></h2>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/assets/asset-upload.png"
title="上传资源"
description="多级分类,精细控制"
author="ErSan"
date="2025/08/01"
/>
</div></div><ul>
<li><strong>类型</strong>可上传资源类型默认为<mark>模型材质纹理广告牌HDR</mark>;</li>
<li><strong>分类</strong>从树节点中选择资源所属的详细类别;</li>
<li><strong>标签</strong>为资源添加特定的标签比如 <mark>有动画有骨骼</mark> 之类的便于在资源列表顶部勾选标签快速搜索</li>
<li><strong>缩略图</strong>可以从本地选择或者在选择资源文件后点击 <mark>通过预览截图</mark> 生成</li>
</ul>
<Tabs id="31" :data='[{"id":"通过预览截图"}]'>
<template #title0="{ value, isActive }">通过预览截图</template><template #tab0="{ value, isActive }"><blockquote>
<p>假设在<code v-pre>模型</code>类型下我先选择了一个飞机模型然后点击按钮<code v-pre>通过预览截图</code></p>
</blockquote>
<ImageCard
image="/images/manual/home/assets/asset-preview-screenshot.png"
title="通过预览截图"
description="点击截图按钮,将自动截取当前画布填充至表单缩略图字段,并关闭此预览弹窗"
author="ErSan"
date="2025/08/01"
/>
</template></Tabs><ul>
<li><strong>文件</strong>不同类型的资源具有不同的文件格式支持</li>
</ul>
<Tabs id="48" :data='[{"id":"模型"},{"id":"材质"},{"id":"纹理"},{"id":"广告牌"},{"id":"HDR"}]'>
<template #title0="{ value, isActive }">模型</template><template #title1="{ value, isActive }">材质</template><template #title2="{ value, isActive }">纹理</template><template #title3="{ value, isActive }">广告牌</template><template #title4="{ value, isActive }">HDR</template><template #tab0="{ value, isActive }"><ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> glb</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> gltf</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-2" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-2"> fbx</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-3" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-3"> obj</label></li>
</ul>
</template><template #tab1="{ value, isActive }"><ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-4" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-4"> zip</label></li>
</ul>
<blockquote>
<p>默认解析为<mark>PBR材质</mark><br>
上传的ZIP包内文件应依照特定规则以下两种之一</p>
<ul>
<li>
<Badge type="tip" text="推荐" /> . zip包中包含一个<code v-pre>material.json</code>的文件其中指明各类贴图使用的纹理文件及材质属性示例如下</li>
</ul>
<div class="code-block-title" data-title="material.json"><div class="code-block-title-bar"><span class="title"><VPIcon provider="iconify" name="vscode-icons:file-type-json"/>material.json</span></div><div class="language-json" data-highlighter="shiki" data-ext="json" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-json"><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">{</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> textures</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> baseColor</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> normal</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> bump</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> displacement</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> roughness</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> metalness</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> ao</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> emissive</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> alpha</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> env</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> light</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> xxx.</span><span style="--shiki-light:#999999;--shiki-dark:#666666">[</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic">png/jpg/webp/tga/hdr/exr</span><span style="--shiki-light:#999999;--shiki-dark:#666666">],</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> },</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> properties</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> metalness</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 1</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> roughness</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 0.5</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span></span>
<span class="line"><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic"> ...</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> }</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span></code></pre>
</div></div><ul>
<li>. zip包中不包含<code v-pre>material.json</code>文件此时包中的各纹理文件应语义化命名如下(文件名均为按照关键字模糊匹配)
::: file-tree</li>
</ul>
<ul>
<li>*.zip
<ul>
<li>%baseColor%.[png/jpg/webp/tga/hdr/exr] // (/:diffuse, /:baseColor)</li>
<li>%normal%.[png/jpg/webp/tga/hdr/exr] // 线</li>
<li>%bump%.[png/jpg/webp/tga/hdr/exr] // ,线</li>
<li>%displacement%.[png/jpg/webp/tga/hdr/exr] // ()</li>
<li>%roughness%.[png/jpg/webp/tga/hdr/exr] // (使绿)</li>
<li>%metalness%.[png/jpg/webp/tga/hdr/exr] // (使)</li>
<li>%ao%.[png/jpg/webp/tga/hdr/exr] // ()</li>
<li>%emissive%.[png/jpg/webp/tga/hdr/exr] // ()</li>
<li>%alpha%.[png/jpg/webp/tga/hdr/exr] // ()</li>
<li>%env%.[png/jpg/webp/tga/hdr/exr] // (使scene.environment)</li>
<li>%light%.[png/jpg/webp/tga/hdr/exr] // (UV)
:::</li>
</ul>
</li>
</ul>
</blockquote>
</template><template #tab2="{ value, isActive }"><ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-5" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-5"> png</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-6" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-6"> jpg/jpeg</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-7" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-7"> webp</label></li>
</ul>
</template><template #tab3="{ value, isActive }"><ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-8" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-8"> png</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-9" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-9"> jpg/jpeg</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-10" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-10"> webp</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-11" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-11"> svg</label></li>
</ul>
</template><template #tab4="{ value, isActive }"><ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-12" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-12"> hdr</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-13" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-13"> exr</label></li>
</ul>
</template></Tabs><ul>
<li><strong>名称</strong>默认会在上传资源文件后自动获取文件名填充</li>
<li><strong>大小</strong>会在上传资源文件后自动计算无需填写</li>
</ul>
<h2 id="预览资源" tabindex="-1"><a class="header-anchor" href="#预览资源"><span>预览资源</span></a></h2>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/assets/asset-preview.png"
title="预览资源"
description="点击资源卡片/资源卡片操作栏的预览按钮进行资源预览。 预览弹窗左侧为可操作画布,右侧为资源详情及操作。"
author="ErSan"
date="2025/08/01"
/>
</div></div><h2 id="编辑资源" tabindex="-1"><a class="header-anchor" href="#编辑资源"><span>编辑资源</span></a></h2>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/assets/asset-edit.png"
title="编辑资源"
description="点击资源卡片操作栏的编辑选项进行资源编辑。 编辑时无法修改资源类型和资源文件。"
author="ErSan"
date="2025/08/01"
/>
</div></div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/5s7acuj0/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/5s7acuj0/\",\"title\":\"动画编辑器\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"动画编辑器\",\"createTime\":\"2025/03/31 19:50:56\",\"permalink\":\"/guide/5s7acuj0/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"动画编辑器\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/5s7acuj0/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"动画编辑器\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":13},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/extras/动画编辑器.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/6xkx4dnv/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/6xkx4dnv/\",\"title\":\"介绍\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"介绍\",\"createTime\":\"2025/02/20 15:13:36\",\"permalink\":\"/guide/6xkx4dnv/\",\"description\":\"Astral 3D Engine 是一个基于 ThreeJS 的三维快速开发引擎。 Astral 3D Editor 是一个以 Astral 3D 作为底层的三维可视化编辑器。 从诞生之初其定位便是快捷、轻量、可扩展的3D低代码创作工具意在解决Web3D产品开发难迭代速度慢并且视觉效果不达标的行业痛点推动Web3D的发展。 重点功能 场景数据...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"介绍\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-10-02T16:56:51.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/6xkx4dnv/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"介绍\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"Astral 3D Engine 是一个基于 ThreeJS 的三维快速开发引擎。 Astral 3D Editor 是一个以 Astral 3D 作为底层的三维可视化编辑器。 从诞生之初其定位便是快捷、轻量、可扩展的3D低代码创作工具意在解决Web3D产品开发难迭代速度慢并且视觉效果不达标的行业痛点推动Web3D的发展。 重点功能 场景数据...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-10-02T16:56:51.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-10-02T16:56:51.000Z\"}]]},\"readingTime\":{\"minutes\":1.09,\"words\":326},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1759424211000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":3,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/介绍.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,38 @@
<template><div><blockquote>
<p><code v-pre>Astral 3D Engine</code> 是一个基于 <code v-pre>ThreeJS</code> 的三维快速开发引擎 <br />
<code v-pre>Astral 3D Editor</code> 是一个以 <code v-pre>Astral 3D</code> 作为底层的三维可视化编辑器 <br />
从诞生之初其定位便是快捷轻量可扩展的3D低代码创作工具意在解决Web3D产品开发难迭代速度慢并且视觉效果不达标的行业痛点推动Web3D的发展 <br /></p>
</blockquote>
<h2 id="重点功能" tabindex="-1"><a class="header-anchor" href="#重点功能"><span>重点功能</span></a></h2>
<ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> 场景数据无损压缩;</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> 网络分包渐进存取</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-2" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-2"> 支持30+模型格式</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-3" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-3"> <code v-pre>BIM</code>模型在线轻量化;</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-4" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-4"> <code v-pre>CAD</code>图纸解析预览</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-5" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-5"> 碰撞检测</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-6" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-6"> 粒子系统</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-7" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-7"> 插件系统</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-8" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-8"> 动画编辑器</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-9" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-9"> BillboardHtmlPanel(在线解析htmlVue/React打包工程)</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-10" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-10"> 资源中心</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-11" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-11"> 3DTiles支持</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-12" disabled="disabled"><label class="task-list-item-label" for="task-item-12"> 数据组件 (API接口前端SQLWebSocket静态JSON)</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-13" disabled="disabled"><label class="task-list-item-label" for="task-item-13"> Cesium场景融合GIS支持</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-14" disabled="disabled"><label class="task-list-item-label" for="task-item-14"> WebGPU 支持</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-15" disabled="disabled"><label class="task-list-item-label" for="task-item-15"> 低代码数据大屏(🎉开发阶段)</label></li>
</ul>
<h2 id="需要掌握的技能" tabindex="-1"><a class="header-anchor" href="#需要掌握的技能"><span>需要掌握的技能</span></a></h2>
<p>本项目二开及与服务器交互需要一定前端基础知识建议在开发前先学习一下以下内容会对项目理解非常有帮助:</p>
<ul>
<li><a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer">Vue3</a></li>
<li><a href="https://threejs.org/" target="_blank" rel="noopener noreferrer">ThreeJS</a></li>
<li><a href="https://www.cesium.com/" target="_blank" rel="noopener noreferrer">Cesium</a></li>
<li><a href="https://www.naiveui.com/zh-CN/os-theme" target="_blank" rel="noopener noreferrer">Naive UI</a></li>
<li><a href="https://www.typescriptlang.org/" target="_blank" rel="noopener noreferrer">TypeScript</a></li>
<li><a href="https://vitejs.dev/" target="_blank" rel="noopener noreferrer">Vite</a></li>
<li><a href="https://uno.antfu.me/" target="_blank" rel="noopener noreferrer">UnoCSS</a></li>
</ul>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/7eo51kfy/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/7eo51kfy/\",\"title\":\"2D图纸\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"2D图纸\",\"createTime\":\"2025/03/31 20:00:46\",\"permalink\":\"/guide/7eo51kfy/\",\"description\":\"简要说明 拖入(双击) 添加至场景中的图纸会自动占据中心视口一半的位置其与3D视图中间的 垂直分割线 可以左右拖动以改变占据视口的大小。 图纸可以与3D视图联动提供更直观的设计体验。 这一功能不仅提升了图纸的可视化效果,还为设计和协作提供了极大的便利。 主要亮点: 使用OffscreenCanvas技术在Worker线程中对图纸内容进行渲染不会阻...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"2D图纸\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/7eo51kfy/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"2D图纸\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"简要说明 拖入(双击) 添加至场景中的图纸会自动占据中心视口一半的位置其与3D视图中间的 垂直分割线 可以左右拖动以改变占据视口的大小。 图纸可以与3D视图联动提供更直观的设计体验。 这一功能不仅提升了图纸的可视化效果,还为设计和协作提供了极大的便利。 主要亮点: 使用OffscreenCanvas技术在Worker线程中对图纸内容进行渲染不会阻...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":3,\"words\":899},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/viewport/2D图纸.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,109 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/viewport/drawing.png"
title="2D图纸"
description="拖入(双击)添加至场景中的图纸会自动占据中心视口一半的位置其与3D视图中间的垂直分割线可以左右拖动以改变占据视口的大小"
author="ErSan"
date="2025/04/16"
/>
</div></div><h2 id="简要说明" tabindex="-1"><a class="header-anchor" href="#简要说明"><span>简要说明</span></a></h2>
<p><mark>拖入(双击)</mark> 添加至场景中的图纸会自动占据中心视口一半的位置其与3D视图中间的 <mark>垂直分割线</mark> 可以左右拖动以改变占据视口的大小<br />
图纸可以与3D视图联动提供更直观的设计体验<br />
这一功能不仅提升了图纸的可视化效果还为设计和协作提供了极大的便利<br /></p>
<p><strong>主要亮点</strong></p>
<ul>
<li>使用OffscreenCanvas技术在Worker线程中对图纸内容进行渲染不会阻塞主线程3D场景的渲染</li>
<li>图纸与3D视图联动操作简单高效</li>
<li>灵活调整视口分割线优化工作空间</li>
</ul>
<h2 id="功能说明" tabindex="-1"><a class="header-anchor" href="#功能说明"><span>功能说明</span></a></h2>
<ul>
<li><strong>图纸加载</strong>支持将图纸拖入或双击添加至场景</li>
<li><strong>视口分割</strong>通过拖动分割线调整2D图纸与3D视图的占比</li>
<li><strong>图纸复位</strong>将图纸的显示区域恢复为初始状态</li>
<li><strong>图层显隐</strong>查看图纸的图层列表并显示/隐藏任意图层</li>
<li><strong>新增标记</strong>在3D视图中选中模型后便可以在图纸中新增对应的标记框</li>
<li><strong>删除标记</strong>删除当前选中的标记</li>
</ul>
<h3 id="图纸加载" tabindex="-1"><a class="header-anchor" href="#图纸加载"><span>图纸加载</span></a></h3>
<ul>
<li><strong>功能描述</strong>将图纸拖入或双击添加至场景后图纸会自动占据中心视口的一半位置</li>
<li><strong>操作方式</strong>
<ul>
<li>在左侧CAD图纸列表中双击目标图纸快速加载到场景中</li>
</ul>
</li>
</ul>
<h3 id="视口分割" tabindex="-1"><a class="header-anchor" href="#视口分割"><span>视口分割</span></a></h3>
<ul>
<li><strong>功能描述</strong>调整2D图纸与3D视图的占比优化工作空间</li>
<li><strong>操作方式</strong>
<ul>
<li>拖动2D图纸与3D视图中间的垂直分割线调整两者的占比</li>
</ul>
<!-- - 分割线位置会自动保存方便下次使用 -->
</li>
</ul>
<h3 id="图纸复位" tabindex="-1"><a class="header-anchor" href="#图纸复位"><span>图纸复位</span></a></h3>
<ul>
<li><strong>功能描述</strong>将图纸的显示区域恢复为初始状态</li>
<li><strong>操作方式</strong>
<ul>
<li>点击图纸菜单栏中的复位按钮第一个</li>
</ul>
</li>
</ul>
<h3 id="图层显隐" tabindex="-1"><a class="header-anchor" href="#图层显隐"><span>图层显隐</span></a></h3>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/viewport/drawingLayer.png"
title="CAD图层"
author="ErSan"
date="2025/04/16"
/>
</div></div><ul>
<li><strong>功能描述</strong>查看图纸的图层列表并显示/隐藏任意图层</li>
<li><strong>操作方式</strong>
<ul>
<li>点击图纸菜单栏中的图层按钮第二个</li>
<li>弹出的图层列表中点击任一个图层前面的小眼睛图标即可隐藏对应图层反正显示对应图层</li>
<li>图层列表顶部的<mark>全部图层</mark>节点可以同时显示/隐藏所有图层</li>
</ul>
</li>
</ul>
<h3 id="新增标记" tabindex="-1"><a class="header-anchor" href="#新增标记"><span>新增标记</span></a></h3>
<ul>
<li><strong>功能描述</strong>在图纸中新增3D场景中所选中模型的对应的标记框</li>
<li><strong>操作方式</strong>
<ul>
<li>在右侧3D场景中选中需要标注的模型</li>
<li>点击图纸菜单栏中的新增标记按钮第三个</li>
<li>在图纸需要标记的位置按住鼠标左键拖动即可绘制出长方形标记框</li>
<li>只会只要在图纸中点击该标记右侧3D场景便会自动聚焦并选中相应模型</li>
</ul>
</li>
</ul>
<h3 id="删除标记" tabindex="-1"><a class="header-anchor" href="#删除标记"><span>删除标记</span></a></h3>
<ul>
<li><strong>功能描述</strong>删除当前选中的标记</li>
<li><strong>操作方式</strong>
<ul>
<li>在图纸上选中需要删除的标记</li>
<li>点击图纸菜单栏中的删除按钮第四个</li>
<li>标记及其与模型的关联关系将被移除</li>
</ul>
</li>
</ul>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/ae7ufigr/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/ae7ufigr/\",\"title\":\"历史记录\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"历史记录\",\"createTime\":\"2025/03/31 20:05:25\",\"permalink\":\"/guide/ae7ufigr/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"历史记录\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/ae7ufigr/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"历史记录\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":12},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/历史记录.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/chhmeza7/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/chhmeza7/\",\"title\":\"界面\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"界面\",\"createTime\":\"2025/04/14 00:49:50\",\"permalink\":\"/guide/chhmeza7/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"界面\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/chhmeza7/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"界面\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/preview/界面.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/component/h4v1bkyh/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/component/h4v1bkyh/\",\"title\":\"脚本\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"脚本\",\"createTime\":\"2025/02/20 15:13:36\",\"permalink\":\"/guide/component/h4v1bkyh/\",\"description\":\"主要面相于开发人员,主要功能有: 编写脚本逻辑,并将其挂载于实体模型上; 脚本组件使用JavaScript编程语言 脚本组件由事件驱动,在对应生命周期内执行; 脚本组件可以访问实体模型的属性和方法; 运行时执行脚本逻辑,并获取脚本执行结果; 内置变量 在脚本中已经内置了以下变量: 内置方法 在脚本中已经内置了以下方法: 内置生命周期 支持以下几个基本...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"脚本\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-10-03T15:00:46.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/component/h4v1bkyh/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"脚本\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"主要面相于开发人员,主要功能有: 编写脚本逻辑,并将其挂载于实体模型上; 脚本组件使用JavaScript编程语言 脚本组件由事件驱动,在对应生命周期内执行; 脚本组件可以访问实体模型的属性和方法; 运行时执行脚本逻辑,并获取脚本执行结果; 内置变量 在脚本中已经内置了以下变量: 内置方法 在脚本中已经内置了以下方法: 内置生命周期 支持以下几个基本...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-10-03T15:00:46.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-10-03T15:00:46.000Z\"}]]},\"readingTime\":{\"minutes\":5.02,\"words\":1505},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1759503646000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":4,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/脚本.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,482 @@
<template><div><blockquote>
<p>主要面相于开发人员主要功能有</p>
<ol>
<li>编写脚本逻辑并将其挂载于实体模型上</li>
<li>脚本组件使用<code v-pre>JavaScript</code>编程语言</li>
<li>脚本组件由事件驱动在对应生命周期内执行</li>
<li>脚本组件可以访问实体模型的属性和方法</li>
<li>运行时执行脚本逻辑并获取脚本执行结果</li>
</ol>
</blockquote>
<h3 id="内置变量" tabindex="-1"><a class="header-anchor" href="#内置变量"><span>内置变量</span></a></h3>
<p>在脚本中已经内置了以下变量</p>
<table>
<thead>
<tr>
<th>变量</th>
<th>描述</th>
<th>类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>this</td>
<td>当前实体模型的引用</td>
<td><code v-pre>THREE.Object3D</code></td>
</tr>
<tr>
<td>THREE</td>
<td>THREE对象</td>
<td><code v-pre>THREE</code></td>
</tr>
<tr>
<td>helper</td>
<td>辅助类函数集合</td>
<td><a href="#helper">Helper</a></td>
</tr>
<tr>
<td>renderer</td>
<td>当前渲染器的引用</td>
<td><code v-pre>THREE.WebGLRenderer</code></td>
</tr>
<tr>
<td>scene</td>
<td>当前场景的引用</td>
<td><code v-pre>THREE.Scene</code></td>
</tr>
<tr>
<td>camera</td>
<td>当前场景相机的引用</td>
<td><code v-pre>THREE.PerspectiveCamera</code></td>
</tr>
<tr>
<td>controls</td>
<td>当前场景控制器的引用</td>
<td><a href="https://github.com/yomotsu/camera-controls" target="_blank" rel="noopener noreferrer">CameraControls</a></td>
</tr>
<tr>
<td>timer</td>
<td>场景运行时间跟踪</td>
<td><code v-pre>three/addons/misc/Timer.js</code></td>
</tr>
</tbody>
</table>
<h3 id="内置方法" tabindex="-1"><a class="header-anchor" href="#内置方法"><span>内置方法</span></a></h3>
<p>在脚本中已经内置了以下方法</p>
<table>
<thead>
<tr>
<th>方法</th>
<th>描述</th>
<th>传入参数</th>
</tr>
</thead>
<tbody>
<tr>
<td>render</td>
<td>驱动场景渲染一帧</td>
<td><code v-pre>{delta?:number}</code></td>
</tr>
</tbody>
</table>
<h3 id="内置生命周期" tabindex="-1"><a class="header-anchor" href="#内置生命周期"><span>内置生命周期</span></a></h3>
<p>支持以下几个基本生命周期</p>
<table>
<thead>
<tr>
<th>生命周期</th>
<th>描述</th>
<th>参数</th>
</tr>
</thead>
<tbody>
<tr>
<td>loaded</td>
<td>场景加载完成时执行仅执行一次</td>
<td>-</td>
</tr>
<tr>
<td>beforeAnimation</td>
<td>场景当前动画帧循环开始之前触发每一帧执行一次</td>
<td><code v-pre>{&quot;delta&quot;:number}</code></td>
</tr>
<tr>
<td>afterAnimation</td>
<td>场景当前动画帧循环完成之后立即触发每一帧执行一次</td>
<td><code v-pre>{&quot;delta&quot;:number,&quot;toBeRender&quot;:(_needRender: boolean) =&gt; void}</code></td>
</tr>
<tr>
<td>beforeRender</td>
<td>场景当前动画帧循环完成之后渲染之前触发每一次渲染执行一次</td>
<td><code v-pre>{&quot;delta&quot;:number}</code></td>
</tr>
<tr>
<td>afterRender</td>
<td>场景当前帧渲染完成之后触发每一次渲染执行一次</td>
<td><code v-pre>{&quot;delta&quot;:number}</code></td>
</tr>
<tr>
<td>beforeDestroy</td>
<td>场景销毁前调用仅执行一次</td>
<td>-</td>
</tr>
<tr>
<td>afterDestroy</td>
<td>场景销毁后调用仅执行一次</td>
<td>-</td>
</tr>
</tbody>
</table>
<blockquote>
<p>Tips:</p>
<blockquote>
<p><code v-pre>toBeRender</code>:由于本系统默认为事件驱动渲染而非持续渲染故提供此方法以便在脚本中实现自定义的逻辑推荐用法</p>
<div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-javascript"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">afterAnimation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">toBeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">){</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // true</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> toBeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">true</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></blockquote>
</blockquote>
<h3 id="内置事件" tabindex="-1"><a class="header-anchor" href="#内置事件"><span>内置事件</span></a></h3>
<p>支持以下几个基本事件</p>
<table>
<thead>
<tr>
<th>事件</th>
<th>描述</th>
<th>参数</th>
</tr>
</thead>
<tbody>
<tr>
<td>onPick</td>
<td>模型单击事件</td>
<td><code v-pre>intersect:THREE.Intersection</code></td>
</tr>
<tr>
<td>onDoubleClick</td>
<td>模型双击事件</td>
<td><code v-pre>intersect:THREE.Intersection</code></td>
</tr>
<tr>
<td>onKeydown</td>
<td>键盘按下事件(全局)</td>
<td><code v-pre>event:KeyboardEvent</code></td>
</tr>
<tr>
<td>onKeyup</td>
<td>键盘抬起事件(全局)</td>
<td><code v-pre>event:KeyboardEvent</code></td>
</tr>
<tr>
<td>onPointerDown</td>
<td>指针按下事件(全局)</td>
<td><code v-pre>event:PointerEvent</code></td>
</tr>
<tr>
<td>onPointerUp</td>
<td>指针抬起事件(全局)</td>
<td><code v-pre>event:PointerEvent</code></td>
</tr>
<tr>
<td>onPointerMove</td>
<td>指针移动事件(全局)</td>
<td><code v-pre>event:PointerEvent</code></td>
</tr>
<tr>
<td>onTouchStart</td>
<td>触屏按下事件(全局)</td>
<td><code v-pre>event:TouchEvent</code></td>
</tr>
<tr>
<td>onTouchEnd</td>
<td>触屏释放事件(全局)</td>
<td><code v-pre>event:TouchEvent</code></td>
</tr>
</tbody>
</table>
<br/>
<hr>
<h3 id="辅助类-helper" tabindex="-1"><a class="header-anchor" href="#辅助类-helper"><span>辅助类(<a id="helper">Helper</a>)</span></a></h3>
<table>
<thead>
<tr>
<th>成员</th>
<th>描述</th>
<th>类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>scene</td>
<td>当前场景的引用内置变量scene的引用</td>
<td><code v-pre>THREE.Scene</code></td>
</tr>
<tr>
<td>Animation</td>
<td>未实例化的动画类</td>
<td><a href="#helper-animation">Animation</a></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>方法</th>
<th>描述</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>objectByUuid</td>
<td>通过uuid获取场景中的Object3D对象</td>
<td><code v-pre>uuid:string</code></td>
<td><code v-pre>THREE.Object3D</code></td>
</tr>
<tr>
<td>moveObject</td>
<td>移动3D对象到指定位置</td>
<td><code v-pre>object: Object3D</code><br/><code v-pre>parent: Object3D</code><br/><code v-pre>before: Object3D</code></td>
<td>-</td>
</tr>
<tr>
<td>removeObject</td>
<td>从场景中移除3D对象</td>
<td><code v-pre>object: THREE.Object3D</code></td>
<td>-</td>
</tr>
</tbody>
</table>
<h3 id="动画类-animation" tabindex="-1"><a class="header-anchor" href="#动画类-animation"><span>动画类(<a id="helper-animation">Animation</a>)</span></a></h3>
<h4 id="基础用法" tabindex="-1"><a class="header-anchor" href="#基础用法"><span>基础用法</span></a></h4>
<div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-javascript"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> animation</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> new</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> helper</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">Animation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076">this</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h4 id="api" tabindex="-1"><a class="header-anchor" href="#api"><span>API</span></a></h4>
<div class="language-typescript line-numbers-mode" data-highlighter="shiki" data-ext="typescript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-typescript"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> new</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> helper</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">Animation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">object</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE">:</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">THREE</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">Object3D</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><table>
<thead>
<tr>
<th>成员</th>
<th>描述</th>
<th>类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>object</td>
<td>构造函数形参值动画绑定的对象<br/> 如果实例化时传入参数this(如上)则指向内置变量this</td>
<td><code v-pre>THREE.Object3D</code></td>
</tr>
<tr>
<td>actions</td>
<td>动画动作集合</td>
<td><code v-pre>THREE.AnimationAction[]</code></td>
</tr>
<tr>
<td>actionsMap</td>
<td>动画动作映射表key为动作名称value为THREE.AnimationAction对象</td>
<td><code v-pre>Map&lt;string, THREE.AnimationAction&gt;</code></td>
</tr>
<tr>
<td>lastPlayAction</td>
<td>正在播放的动作名称</td>
<td><code v-pre>THREE.AnimationAction | undefined</code></td>
</tr>
<tr>
<td>repetitions</td>
<td>动画重复次数</td>
<td><code v-pre>number</code></td>
</tr>
<tr>
<td>ActionLoop (static)</td>
<td>动画循环模式枚举<br/> LoopOnce - 只执行一次 <br/> LoopRepeat - 重复次数为repetitions的值, 且每次循环结束时候将回到起始动作开始下一次循环 <br/> LoopPingPong - 重复次数为repetitions的值, 且像乒乓球一样在起始点与结束点之间来回循环</td>
<td><code v-pre>Enum</code></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>方法</th>
<th>描述</th>
<th>参数</th>
<th>返回值</th>
</tr>
</thead>
<tbody>
<tr>
<td>getAction</td>
<td>获取指定名称的动画动作,用于用户直接调用<a href="https://threejs.org/docs/index.html#api/zh/animation/AnimationAction" target="_blank" rel="noopener noreferrer">THREE.AnimationAction的方法</a></td>
<td><code v-pre>name:string</code></td>
<td><code v-pre>THREE.AnimationAction | undefined</code></td>
</tr>
<tr>
<td>play</td>
<td>播放指定名称的动画动作,支持链式调用</td>
<td><code v-pre>name:string</code> <br/> <code v-pre>loop:AnimationActionLoopStyles = helper.Animation.ActionLoop.LoopRepeat</code> <br/> <code v-pre>timeScale:number = 1</code></td>
<td><code v-pre>this(helper.Animation)</code></td>
</tr>
<tr>
<td>pause</td>
<td>暂停动画,支持链式调用</td>
<td><code v-pre>name:string | undefined</code></td>
<td><code v-pre>this(helper.Animation)</code></td>
</tr>
<tr>
<td>stop</td>
<td>停止动画,支持链式调用</td>
<td><code v-pre>name:string | undefined</code></td>
<td><code v-pre>this(helper.Animation)</code></td>
</tr>
</tbody>
</table>
<h3 id="基础用法-1" tabindex="-1"><a class="header-anchor" href="#基础用法-1"><span>基础用法</span></a></h3>
<p>完整结构</p>
<div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-javascript"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景加载完成时执行仅执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> loaded</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">group</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">loaded</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076">this</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">renderer</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">scene</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">camera</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">controls</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">timer</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">groupEnd</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景当前动画帧循环开始之前触发每一帧执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">number</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> delta</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> beforeAnimation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景当前动画帧循环完成之后立即触发每一帧执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">number</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> delta</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">(_needRender: boolean) => void</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> toBeRender</span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> 设置下一帧是否将渲染</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> afterAnimation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">toBeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景当前动画帧循环完成之后渲染之前触发每一次渲染执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">number</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> delta</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> beforeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景当前帧渲染完成之后触发每一次渲染执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">number</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> delta</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> afterRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景销毁前调用仅执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> beforeDestroy</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 场景销毁后调用仅执行一次</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> afterDestroy</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 模型单击事件</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">THREE.Intersection</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> intersect</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onPick</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">intersect</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 模型双击事件</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">THREE.Intersection</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> intersect</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onDoubleClick</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">intersect</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 键盘按下事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">KeyboardEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onKeyDown</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 键盘抬起事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">KeyboardEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onKeyUp</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 指针按下事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">PointerEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onPointerDown</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 指针抬起事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">PointerEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onPointerUp</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 指针移动事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">PointerEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onPointerMove</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 触屏按下事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">TouchEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onTouchStart</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">/**</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * 触屏释放事件(全局)</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> * </span><span style="--shiki-light:#999999;--shiki-dark:#666666">@</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">param</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">TouchEvent</span><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> event</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> */</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onTouchEnd</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr>
<h3 id="示例代码" tabindex="-1"><a class="header-anchor" href="#示例代码"><span>示例代码</span></a></h3>
<h4 id="_1-动态天空盒-模型动画-键盘事件" tabindex="-1"><a class="header-anchor" href="#_1-动态天空盒-模型动画-键盘事件"><span>1. 动态天空盒/模型动画/键盘事件</span></a></h4>
<Tabs id="700" :data='[{"id":"scene"},{"id":"wolf"}]' :active="1" tab-id="animate">
<template #title0="{ value, isActive }">Scene</template><template #title1="{ value, isActive }">Wolf</template><template #tab0="{ value, isActive }"><div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-javascript"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> afterAnimation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">toBeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">){</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> toBeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">true</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> DEG2RAD</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> Math</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">PI</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> /</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 180</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> beforeRender</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">delta</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> t</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> delta</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> *</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> DEG2RAD</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> scene</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">backgroundRotation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">y</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> t</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></template><template #tab1="{ value, isActive }"><div class="language-javascript line-numbers-mode" data-highlighter="shiki" data-ext="javascript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-javascript"><span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">const</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> new</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> helper</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">Animation</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076">this</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> loaded</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">play</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">01_Run_Armature_0</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> onKeyDown</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // 1 "01_Run_Armature_0" ,2 "02_walk_Armature_0" 3 ""05_site_Armature_0"" ,</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> switch</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> (</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">key</span><span style="--shiki-light:#999999;--shiki-dark:#666666">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> case</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">1</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">stop</span><span style="--shiki-light:#999999;--shiki-dark:#666666">();</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">play</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">02_walk_Armature_0</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> break</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> case</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">2</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">stop</span><span style="--shiki-light:#999999;--shiki-dark:#666666">();</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">play</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">05_site_Armature_0</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> break</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> case</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">3</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">stop</span><span style="--shiki-light:#999999;--shiki-dark:#666666">();</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">play</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">01_Run_Armature_0</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> break</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> }</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">function</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> beforeDestroy</span><span style="--shiki-light:#999999;--shiki-dark:#666666">()</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> anime</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">stop</span><span style="--shiki-light:#999999;--shiki-dark:#666666">();</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></template></Tabs><iframe height=500 width=100% src="https://editor.astraljs.com/#/preview/a18eb710-c1f8-4cff-b8ab-c3a2056ccf57" frameborder=0 allowfullscreen></iframe></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/crvssx6j/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/crvssx6j/\",\"title\":\"渲染器配置\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"渲染器配置\",\"createTime\":\"2025/03/31 20:04:34\",\"permalink\":\"/guide/crvssx6j/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"渲染器配置\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/crvssx6j/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"渲染器配置\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":13},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/渲染器配置.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/dbd366ps/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/dbd366ps/\",\"title\":\"项目\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"项目\",\"createTime\":\"2025/08/01 15:13:58\",\"permalink\":\"/guide/dbd366ps/\",\"description\":\"新建项目 可以选择新建一个空项目或者依据内置模板创建。\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"项目\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-08-01T17:28:41.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/dbd366ps/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"项目\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"新建项目 可以选择新建一个空项目或者依据内置模板创建。\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-08-01T17:28:41.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-08-01T17:28:41.000Z\"}]]},\"readingTime\":{\"minutes\":0.31,\"words\":94},\"git\":{\"createdTime\":1754069321000,\"updatedTime\":1754069321000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/home/项目.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,33 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/project/project-page.png"
title="项目"
description=""
author="ErSan"
date="2025/08/01"
/>
</div></div><h2 id="新建项目" tabindex="-1"><a class="header-anchor" href="#新建项目"><span>新建项目</span></a></h2>
<blockquote>
<p>可以选择新建一个空项目或者依据内置模板创建</p>
</blockquote>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/home/project/new-project.png"
title="新建项目"
description="可以选择新建一个空项目或者依据内置模板创建"
author="ErSan"
date="2025/08/01"
/>
</div></div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/dju4ekca/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/dju4ekca/\",\"title\":\"资源中心\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"资源中心\",\"createTime\":\"2025/03/31 19:51:33\",\"permalink\":\"/guide/dju4ekca/\",\"description\":\"简要说明 在扩展栏左上角下拉菜单中可将扩展面板切换到资源中心模块。 资源共分为模型、材质、粒子、广告牌、Html面板、灯光、相机。 编辑器已内置大多通用资源,也可在扩展栏右上角切换资源来源:内置资源/公共资源。 主要亮点: 资源分类清晰:支持多种资源类型,方便用户快速查找和使用。 资源来源灵活:可切换内置资源和公共资源,满足不同场景需求。 高效管理:支...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"资源中心\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/dju4ekca/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"资源中心\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"简要说明 在扩展栏左上角下拉菜单中可将扩展面板切换到资源中心模块。 资源共分为模型、材质、粒子、广告牌、Html面板、灯光、相机。 编辑器已内置大多通用资源,也可在扩展栏右上角切换资源来源:内置资源/公共资源。 主要亮点: 资源分类清晰:支持多种资源类型,方便用户快速查找和使用。 资源来源灵活:可切换内置资源和公共资源,满足不同场景需求。 高效管理:支...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":4.14,\"words\":1242},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/extras/资源中心.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,92 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/extras/resource.png"
title="资源中心"
author="ErSan"
date="2025/04/17"
/>
</div></div><h2 id="简要说明" tabindex="-1"><a class="header-anchor" href="#简要说明"><span>简要说明</span></a></h2>
<p>在扩展栏左上角下拉菜单中可将扩展面板切换到资源中心模块<br />
资源共分为<mark>模型材质粒子广告牌Html面板灯光相机</mark><br />
编辑器已内置大多通用资源也可在扩展栏右上角切换资源来源<mark>内置资源/公共资源</mark></p>
<p><strong>主要亮点</strong></p>
<ul>
<li><strong>资源分类清晰</strong>支持多种资源类型方便用户快速查找和使用</li>
<li><strong>资源来源灵活</strong>可切换内置资源和公共资源满足不同场景需求</li>
<li><strong>高效管理</strong>支持资源的快速预览搜索和分类管理</li>
<li><strong>扩展性强</strong>用户可自定义资源并上传到公共资源库</li>
</ul>
<h2 id="功能说明" tabindex="-1"><a class="header-anchor" href="#功能说明"><span>功能说明</span></a></h2>
<ul>
<li><strong>资源搜索</strong>按名称模糊搜索已选择分类下的资源</li>
<li><strong>模型</strong>内置多种类型的模型用户可快速预览模型并拖拽到场景中使用</li>
<li><strong>材质</strong>提供丰富的材质库用户可实时预览材质效果并应用至模型</li>
<li><strong>粒子</strong>内置多种粒子效果模板支持参数调整和自定义粒子效果创建</li>
<li><strong>广告牌</strong>支持图片和文字广告牌的快速创建适用于场景标注和装饰</li>
<li><strong>Html面板</strong>允许嵌入自定义HTML内容支持动态交互和样式调整</li>
<li><strong>灯光</strong>提供多种灯光类型如点光源聚光灯等支持实时调整光照参数</li>
<li><strong>相机</strong>内置透视相机与正交相机满足不同场景需求</li>
</ul>
<h3 id="资源搜索" tabindex="-1"><a class="header-anchor" href="#资源搜索"><span>资源搜索</span></a></h3>
<p>搜索框位于扩展栏顶部中间
输入搜索内容将根据当前所选取资源类型进行模糊查询</p>
<h3 id="模型" tabindex="-1"><a class="header-anchor" href="#模型"><span>模型</span></a></h3>
<p>如本页首图内置了多种类型的模型用户可通过<mark>拖拽/双击</mark>方式将模型添加到场景中</p>
<ul>
<li><mark>拖拽</mark>模型将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>模型将放置在场景中心</li>
</ul>
<h3 id="材质" tabindex="-1"><a class="header-anchor" href="#材质"><span>材质</span></a></h3>
<p>内置了多类型的PBR材质Shader材质用户可通过<mark>拖拽/双击</mark>方式将材质应用到模型上; <br />
成功应用的材质可在 右侧边栏-<VPLink href="/guide/l1df4723/">材质</VPLink> 进行参数配置及修改</p>
<ul>
<li><mark>右键</mark>预览材质</li>
<li><mark>拖拽</mark>材质将应用至鼠标放开位置选取到的模型上</li>
<li><mark>双击</mark>材质将应用至所选取的模型上</li>
</ul>
<p><strong>注意</strong>材质只能应用至Mesh节点不能应用于Group广告牌粒子Html面板等节点即材质只能应用于本身就包含材质属性的模型节点</p>
<h3 id="粒子" tabindex="-1"><a class="header-anchor" href="#粒子"><span>粒子</span></a></h3>
<p>内置火焰烟雾萤火虫等常见粒子效果模板用户可通过<mark>拖拽/双击</mark>方式将粒子添加到场景中; <br />
成功添加的粒子可在 右侧边栏-<VPLink href="/guide/siz46vj0/">粒子</VPLink> 调整粒子发射器参数及粒子行为</p>
<ul>
<li><mark>拖拽</mark>粒子将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>粒子将放置在场景中心</li>
</ul>
<h3 id="广告牌" tabindex="-1"><a class="header-anchor" href="#广告牌"><span>广告牌</span></a></h3>
<p>内置图标文本广告牌用户可通过<mark>拖拽/双击</mark>方式将广告牌添加到场景中; <br />
成功添加的广告牌可在 右侧边栏-<VPLink href="/guide/18al65zg/">广告牌</VPLink> 进行参数配置及修改</p>
<ul>
<li><mark>拖拽</mark>广告牌将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>广告牌将放置在场景中心</li>
</ul>
<h3 id="html面板" tabindex="-1"><a class="header-anchor" href="#html面板"><span>Html面板</span></a></h3>
<p>内置多个Html面板模板用户可通过<mark>拖拽/双击</mark>方式将Html面板添加到场景中; <br />
该功能允许用户在场景中嵌入HTML内容如视频播放器交互式表单数据图表等支持动态更新; <br />
成功添加的Html面板可在 右侧边栏-<VPLink href="/guide/kk5cv2ij/">Html面板</VPLink> 进行参数配置及内容修改</p>
<ul>
<li><mark>拖拽</mark>Html面板将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>Html面板将放置在场景中心</li>
</ul>
<h3 id="灯光" tabindex="-1"><a class="header-anchor" href="#灯光"><span>灯光</span></a></h3>
<p>内置<mark>环境光平行光半球光点光源聚光灯</mark>五种灯光类型用户可通过<mark>拖拽/双击</mark>方式将灯光添加到场景中; <br />
成功添加的灯光选中后可在 右侧边栏-<VPLink href="/guide/2xlh6nrf/">对象</VPLink> 进行参数配置及修改</p>
<ul>
<li><mark>拖拽</mark>灯光将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>灯光将放置在场景中心</li>
</ul>
<h3 id="相机" tabindex="-1"><a class="header-anchor" href="#相机"><span>相机</span></a></h3>
<p>内置<mark>透视相机正交相机</mark>用户可通过<mark>拖拽/双击</mark>方式将相机添加到场景中; <br />
相机添加后可在<VPLink href="/guide/jkg3yahd/">3D视口</VPLink>左上角进行主相机切换<br />
成功添加的相机选中后可在 右侧边栏-<VPLink href="/guide/2xlh6nrf/">对象</VPLink> 进行参数配置及修改</p>
<ul>
<li><mark>拖拽</mark>相机将放置在鼠标放开的屏幕位置</li>
<li><mark>双击</mark>相机将放置在场景中心</li>
</ul>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/f7smai4w/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/f7smai4w/\",\"title\":\"顶栏\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"顶栏\",\"createTime\":\"2025/03/31 20:09:24\",\"permalink\":\"/guide/f7smai4w/\",\"description\":\"顶栏 说明 顶栏部分为左中右布局,左侧为基础操作区,中间仅展示场景名称,右侧为多功能区域 基础操作区 图标/按钮 从左到右依次是 Logo、撤回、重做、删除、清空、拷贝、全屏、导出、导入 多功能区域 图标/按钮 从左到右依次是 保存、预览、国际化、主题、主色调、设置\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"顶栏\\\",\\\"image\\\":[\\\"https://docs.astraljs.com/images/manual/editor/header.png\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/f7smai4w/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"顶栏\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"顶栏 说明 顶栏部分为左中右布局,左侧为基础操作区,中间仅展示场景名称,右侧为多功能区域 基础操作区 图标/按钮 从左到右依次是 Logo、撤回、重做、删除、清空、拷贝、全屏、导出、导入 多功能区域 图标/按钮 从左到右依次是 保存、预览、国际化、主题、主色调、设置\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:image\",\"content\":\"https://docs.astraljs.com/images/manual/editor/header.png\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":2.3,\"words\":689},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/顶栏.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,111 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<p><img src="/images/manual/editor/header.png" alt="顶栏"></p>
</div></div><div class="hint-container tip">
<p class="hint-container-title">说明</p>
<p><code v-pre>顶栏</code>部分为左中右布局左侧为<code v-pre>基础操作区</code>中间仅展示<code v-pre>场景名称</code>右侧为<code v-pre>多功能区域</code></p>
</div>
<h2 id="基础操作区" tabindex="-1"><a class="header-anchor" href="#基础操作区"><span>基础操作区</span></a></h2>
<blockquote>
<p>图标/按钮 从左到右依次是 <mark>Logo撤回重做删除清空拷贝全屏导出导入</mark></p>
</blockquote>
<Tabs id="18" :data='[{"id":"Logo"},{"id":"撤回"},{"id":"重做"},{"id":"删除"},{"id":"清空"},{"id":"拷贝"},{"id":"全屏"},{"id":"导出"},{"id":"导入"}]'>
<template #title0="{ value, isActive }">Logo</template><template #title1="{ value, isActive }">撤回</template><template #title2="{ value, isActive }">重做</template><template #title3="{ value, isActive }">删除</template><template #title4="{ value, isActive }">清空</template><template #title5="{ value, isActive }">拷贝</template><template #title6="{ value, isActive }">全屏</template><template #title7="{ value, isActive }">导出</template><template #title8="{ value, isActive }">导入</template><template #tab0="{ value, isActive }"><p>方寸藏寰宇虚实映乾坤</p>
</template><template #tab1="{ value, isActive }"><p>撤销上一步操作</p>
</template><template #tab2="{ value, isActive }"><p>恢复被撤销的操作</p>
</template><template #tab3="{ value, isActive }"><p>删除当前选中的对象</p>
</template><template #tab4="{ value, isActive }"><p>清空场景中的所有内容并重置所有模块</p>
</template><template #tab5="{ value, isActive }"><p>复制当前选中的对象</p>
</template><template #tab6="{ value, isActive }"><p>切换编辑器的全屏模式全屏后会变为退出全屏图标点击可退出全屏</p>
</template><template #tab7="{ value, isActive }"><CardGrid>
<ImageCard
image="/images/manual/editor/header/exportObject.png"
title="导出选中对象"
author="ErSan"
date="2025/04/14"
/>
<ImageCard
image="/images/manual/editor/header/exportScene.png"
title="导出场景"
author="ErSan"
date="2025/04/14"
/>
</CardGrid>
<p>导出功能分为两类一是导出选中的物体二是导出整个场景<br />
两者所支持的导出格式一致分别是<mark>JSONGLBGLTFOBJPLYPLY(二进制)STLSTL(二进制)USDZ</mark></p>
</template><template #tab8="{ value, isActive }"><p>从文件系统导入模型/场景文件允许多选支持在此处导入的文件格式如下</p>
<ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-0" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-0"> glb</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-1" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-1"> gltf</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-2" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-2"> fbx</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-3" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-3"> json (Three JSON / Astral3D JSON)</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-4" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-4"> zip <Annotation label="zip" :total="1"><template #item-0><p>导入zip包时系统会自动解析处理分为下面几种情况</p>
<ul>
<li>同时包含<code v-pre>model.obj</code><code v-pre>materials.mtl</code>会按照<code v-pre>.obj</code>解析</li>
<li>遍历解析zip包中的<code v-pre>fbx</code><code v-pre>glb</code><code v-pre>gltf</code></li>
</ul>
</template></Annotation></label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-5" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-5"> obj</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-6" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-6"> mtl</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-7" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-7"> ifc</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-8" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-8"> 3dm</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-9" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-9"> 3ds</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-10" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-10"> 3mf</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-11" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-11"> amf</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-12" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-12"> dae</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-13" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-13"> drc</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-14" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-14"> kmz</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-15" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-15"> ldr</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-16" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-16"> mpd</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-17" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-17"> md2</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-18" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-18"> pcd</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-19" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-19"> ply</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-20" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-20"> stl</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-21" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-21"> svg</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-22" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-22"> usdz</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-23" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-23"> vox</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-24" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-24"> vtk</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-25" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-25"> vtp</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-26" disabled="disabled"><label class="task-list-item-label" for="task-item-26"> vtu</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-27" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-27"> wrl</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-28" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-28"> xyz</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-29" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-29"> js</label></li>
</ul>
</template></Tabs><h2 id="多功能区域" tabindex="-1"><a class="header-anchor" href="#多功能区域"><span>多功能区域</span></a></h2>
<blockquote>
<p>图标/按钮 从左到右依次是 <mark>保存预览国际化主题主色调设置</mark></p>
</blockquote>
<Tabs id="226" :data='[{"id":"保存"},{"id":"预览"},{"id":"国际化"},{"id":"主题"},{"id":"主色调"},{"id":"设置"}]'>
<template #title0="{ value, isActive }">保存</template><template #title1="{ value, isActive }">预览</template><template #title2="{ value, isActive }">国际化</template><template #title3="{ value, isActive }">主题</template><template #title4="{ value, isActive }">主色调</template><template #title5="{ value, isActive }">设置</template><template #tab0="{ value, isActive }"><p>打包当前场景并保存至服务器</p>
</template><template #tab1="{ value, isActive }"><p>打开新的<VPLink href="/guide/chhmeza7/">预览页</VPLink>窗口进行场景预览</p>
</template><template #tab2="{ value, isActive }"><p>切换编辑器的语言默认支持语言如下</p>
<ul class="task-list-container">
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-30" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-30"> 简体中文</label></li>
<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" id="task-item-31" checked="checked" disabled="disabled"><label class="task-list-item-label" for="task-item-31"> English</label></li>
</ul>
</template><template #tab3="{ value, isActive }"><p>切换编辑器的主题风格<br />
切换顺序为<code v-pre>深色</code>--&gt;<code v-pre>跟随系统</code>--&gt;<code v-pre>浅色</code>--&gt;<code v-pre>深色</code> <br />
系统默认为<code v-pre>深色</code>风格</p>
</template><template #tab4="{ value, isActive }"><ImageCard
image="/images/manual/editor/header/mainColor.png"
title="主色调"
description="调整编辑器的主色,系统会自动生成相应的浅色、深色色阶,用于鼠标经过以及选中等效果"
author="ErSan"
date="2025/04/14"
/>
<p>调整编辑器的主色,系统会自动生成相应的浅色深色色阶用于鼠标经过以及选中等效果</p>
<p></p>
</template><template #tab5="{ value, isActive }"><ImageCard
image="/images/manual/editor/header/setting.png"
title="系统设置"
author="ErSan"
date="2025/04/14"
/>
<p>打开编辑器的设置面板</p>
</template></Tabs></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/fn9xwbkf/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/fn9xwbkf/\",\"title\":\"天气\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"天气\",\"createTime\":\"2025/03/31 20:05:08\",\"permalink\":\"/guide/fn9xwbkf/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"天气\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/fn9xwbkf/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"天气\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/天气.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/g3kxptm0/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/g3kxptm0/\",\"title\":\"动画\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"动画\",\"createTime\":\"2025/03/31 20:07:33\",\"permalink\":\"/guide/g3kxptm0/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"动画\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/g3kxptm0/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"动画\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/动画.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/jkg3yahd/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/jkg3yahd/\",\"title\":\"3D场景\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"3D场景\",\"createTime\":\"2025/03/31 20:00:56\",\"permalink\":\"/guide/jkg3yahd/\",\"description\":\"简要说明 编辑器的核心视口,展示用户所编辑的场景内容。 主要亮点: 提供六视角切换/主相机切换功能方便用户观察3D场景。 自适应视口。 支持多种渲染模式,满足不同场景需求。 提供丰富的变换控制工具,便于编辑和调整模型。 功能说明 主相机切换:支持在默认的透视相机和其他添加进场景的相机之间切换,满足不同场景的观察需求。 六视图:快速切换到前、后、左、右...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"3D场景\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/jkg3yahd/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"3D场景\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"简要说明 编辑器的核心视口,展示用户所编辑的场景内容。 主要亮点: 提供六视角切换/主相机切换功能方便用户观察3D场景。 自适应视口。 支持多种渲染模式,满足不同场景需求。 提供丰富的变换控制工具,便于编辑和调整模型。 功能说明 主相机切换:支持在默认的透视相机和其他添加进场景的相机之间切换,满足不同场景的观察需求。 六视图:快速切换到前、后、左、右...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":3.09,\"words\":928},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/viewport/3D场景.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,107 @@
<template><div><div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/viewport/viewer.png"
title="3D场景"
description="编辑器的核心视口,展示用户所编辑的场景内容。"
author="ErSan"
date="2025/04/16"
/>
</div></div><h2 id="简要说明" tabindex="-1"><a class="header-anchor" href="#简要说明"><span>简要说明</span></a></h2>
<p>编辑器的核心视口展示用户所编辑的场景内容</p>
<p><strong>主要亮点</strong></p>
<ul>
<li>提供六视角切换/主相机切换功能方便用户观察3D场景</li>
<li>自适应视口</li>
<li>支持多种渲染模式满足不同场景需求</li>
<li>提供丰富的变换控制工具便于编辑和调整模型</li>
</ul>
<h2 id="功能说明" tabindex="-1"><a class="header-anchor" href="#功能说明"><span>功能说明</span></a></h2>
<ul>
<li><strong>主相机切换</strong>支持在默认的透视相机和其他添加进场景的相机之间切换满足不同场景的观察需求</li>
<li><strong>六视图</strong>快速切换到<mark></mark>六个标准视角便于精确调整模型</li>
<li><strong>渲染模式</strong>提供<mark>真实原色法线线框</mark>四种渲染模式适应不同的设计需求</li>
<li><strong>变换控制</strong>支持平移旋转缩放三种变换操作用户可以通过鼠标或快捷键快速调整模型</li>
<li><strong>坐标参考</strong>可以切换<mark>世界坐标本地坐标</mark>以查看不同坐标系下的轴情况帮助用户明确模型的方向和位置</li>
<li><strong>场景统计信息</strong>实时显示场景中的模型数量顶点数三角面数帧时等信息便于性能优化</li>
<li><strong>视角辅助</strong>提供视角导航工具帮助用户快速调整观察方向</li>
<li><strong>操作快捷键</strong>内置聚焦删除等快捷键操作便于快速设计</li>
</ul>
<h3 id="主相机切换-六视图" tabindex="-1"><a class="header-anchor" href="#主相机切换-六视图"><span>主相机切换/六视图</span></a></h3>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/viewport/viewerCamera.png"
title="场景相机/六视图"
author="ErSan"
date="2025/04/16"
/>
</div></div><h3 id="渲染模式" tabindex="-1"><a class="header-anchor" href="#渲染模式"><span>渲染模式</span></a></h3>
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/viewport/viewerRenderMode.png"
title="渲染模式"
width="400"
author="ErSan"
date="2025/04/16"
/>
</div>
<p>提供以下渲染模式</p>
<ul>
<li><strong>真实模式</strong>显示模型的材质效果并进行实时采样以产生类似光线追踪的效果</li>
<li><strong>原色模式</strong>显示模型的材质效果便于检查纹理和光影</li>
<li><strong>法线模式</strong></li>
<li><strong>线框模式</strong>仅显示模型的边框线条便于查看内部结构</li>
</ul>
<h3 id="变换控制" tabindex="-1"><a class="header-anchor" href="#变换控制"><span>变换控制</span></a></h3>
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/viewport/viewerTransform.png"
title="变换控制"
width="400"
author="ErSan"
date="2025/04/16"
/>
</div>
支持以下变换操作
- **平移**拖动模型在平面内移动
- **旋转**绕指定轴旋转模型
- **缩放**调整模型的大小比例
<h3 id="坐标参考" tabindex="-1"><a class="header-anchor" href="#坐标参考"><span>坐标参考</span></a></h3>
<p>变换控制右边的按钮点击后会在<mark>世界坐标/本地坐标</mark>之间切换<br />
用于表明场景中显示的坐标轴XYZ所使用的参考坐标系<br />
比如A模型在世界坐标下Y轴向上但是本地坐标下却是Z轴向上确定轴向可以辅助用户快速定位一些矩阵变换错误的原因<br /></p>
<h3 id="场景统计信息" tabindex="-1"><a class="header-anchor" href="#场景统计信息"><span>场景统计信息</span></a></h3>
<p>在界面左下角显示场景的实时统计信息包括</p>
<ul>
<li>模型数量</li>
<li>顶点数</li>
<li>三角面数</li>
<li>帧时帧率 = 1000/帧时</li>
</ul>
<h3 id="视角辅助" tabindex="-1"><a class="header-anchor" href="#视角辅助"><span>视角辅助</span></a></h3>
<p>在界面右下角提供了视角辅助器方便用户快速切换视角共支持22个视角
其颜色会跟随编辑器主题变换深色/浅色</p>
<h3 id="操作快捷键" tabindex="-1"><a class="header-anchor" href="#操作快捷键"><span>操作快捷键</span></a></h3>
<p>支持以下快捷键操作</p>
<ul>
<li><strong>W</strong>切换到平移模式</li>
<li><strong>E</strong>切换到旋转模式</li>
<li><strong>R</strong>切换到缩放模式</li>
<li><strong>F</strong>聚焦选中模型</li>
<li><strong>Del</strong>删除选中模型</li>
<li><strong>Ctrl + Z</strong>撤销上一步操作</li>
<li><strong>Ctrl + Shift +Z</strong>重做被撤销的操作</li>
</ul>
<p>如果在设置中修改了对应快捷键则请使用对应快捷键操作</p>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/kk5cv2ij/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/kk5cv2ij/\",\"title\":\"Html面板\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"Html面板\",\"createTime\":\"2025/04/17 17:03:07\",\"permalink\":\"/guide/kk5cv2ij/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"Html面板\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/kk5cv2ij/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"Html面板\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":11},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/Html面板.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/l1df4723/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/l1df4723/\",\"title\":\"材质\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"材质\",\"createTime\":\"2025/03/31 20:07:10\",\"permalink\":\"/guide/l1df4723/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"材质\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/l1df4723/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"材质\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/材质.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/l8hd921o/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/l8hd921o/\",\"title\":\"后期处理\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"后期处理\",\"createTime\":\"2025/03/31 20:04:44\",\"permalink\":\"/guide/l8hd921o/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"后期处理\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/l8hd921o/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"后期处理\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":12},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/后期处理.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/n6o11owv/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/n6o11owv/\",\"title\":\"部署(待更新)\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"部署(待更新)\",\"createTime\":\"2025/03/29 23:50:17\",\"permalink\":\"/guide/n6o11owv/\",\"description\":\"此文档尚未更新,请勿参考。 本文档适用于部署 Astral3D 编辑器到服务器上。 以Golang版本后端为例其他语言版本后端部署方式请参考官方文档。 本地打包 前端打包 后端打包 服务器部署(Windows) 基础环境 Nginx MySQL 或者直接使用集成环境如PHPStudy。 前端部署 将Astral 3D Editor打包后的文件放到方...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"部署(待更新)\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/n6o11owv/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"部署(待更新)\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"此文档尚未更新,请勿参考。 本文档适用于部署 Astral3D 编辑器到服务器上。 以Golang版本后端为例其他语言版本后端部署方式请参考官方文档。 本地打包 前端打包 后端打包 服务器部署(Windows) 基础环境 Nginx MySQL 或者直接使用集成环境如PHPStudy。 前端部署 将Astral 3D Editor打包后的文件放到方...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":3.13,\"words\":940},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/部署.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,148 @@
<template><div><blockquote>
<p><strong>此文档尚未更新请勿参考</strong></p>
</blockquote>
<blockquote>
<p>本文档适用于部署 Astral3D 编辑器到服务器上 <br />
<a href="https://github.com/mlt131220/Astral3DEditorGoBack" target="_blank" rel="noopener noreferrer">Golang版本</a>后端为例其他语言版本后端部署方式请参考官方文档</p>
</blockquote>
<h2 id="本地打包" tabindex="-1"><a class="header-anchor" href="#本地打包"><span>本地打包</span></a></h2>
<h3 id="前端打包" tabindex="-1"><a class="header-anchor" href="#前端打包"><span>前端打包</span></a></h3>
<div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 确认 Node.js 版本 23.x</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">node</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -v</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 拉取代码</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">git</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> clone</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> https://github.com/mlt131220/Astral3D.git</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 安装依赖</span></span>
<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965">cd</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> Astral3D</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">pnpm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> install</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 打包 Astral 3D Engine SDK</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">pnpm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> run</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> sdk:build</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 打包Astral 3D Editor</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">pnpm</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> run</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> editor:build</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="后端打包" tabindex="-1"><a class="header-anchor" href="#后端打包"><span>后端打包</span></a></h3>
<div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-bash"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 确认go环境</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">go</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> version</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 拉取代码</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">git</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> clone</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> https://github.com/mlt131220/Astral3DEditorGoBack.git</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 安装依赖</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">go</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> mod</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> tidy</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 修改数据库等配置修改 conf/app.conf详见 https://github.com/mlt131220/Astral3DEditorGoBack/blob/main/README.md</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">edit</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> conf/app.conf</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 安装bee工具</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">go</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> get</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -u</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> github.com/beego/bee/v2</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 编译后端代码</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># Linux</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">bee</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> pack</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -be</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> GOOS=linux</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -be</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> GOARCH=amd64</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># Windows</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">bee</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> pack</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -be</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> GOOS=windows</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="服务器部署-windows" tabindex="-1"><a class="header-anchor" href="#服务器部署-windows"><span>服务器部署(Windows)</span></a></h2>
<h3 id="基础环境" tabindex="-1"><a class="header-anchor" href="#基础环境"><span>基础环境</span></a></h3>
<ul>
<li><a href="https://nginx.org/en/download.html" target="_blank" rel="noopener noreferrer">Nginx</a></li>
<li><a href="https://www.mysql.com/cn/downloads/" target="_blank" rel="noopener noreferrer">MySQL</a></li>
</ul>
<p>或者直接使用集成环境<a href="https://old.xp.cn/download.html" target="_blank" rel="noopener noreferrer">PHPStudy</a></p>
<h3 id="前端部署" tabindex="-1"><a class="header-anchor" href="#前端部署"><span>前端部署</span></a></h3>
<p>将Astral 3D Editor打包后的文件放到方便读取的目录下 <code v-pre>C:\www\Astral3dEditor</code>;</p>
<h3 id="后端部署" tabindex="-1"><a class="header-anchor" href="#后端部署"><span>后端部署</span></a></h3>
<ol>
<li>将后端编译后的文件放到方便读取的目录下 <code v-pre>C:\www\Astral3DEditorGoBack</code>;</li>
<li>打开 MySQL 数据库创建名为 <code v-pre>astral3d</code> 的数据库并导入 <code v-pre>Astral3DEditorGoBack/static/sql/astral-3d-editor.sql</code> 文件</li>
<li>启动 MySQL 服务并确保 MySQL 服务正常运行</li>
<li>双击后端程序打包生成的可执行文件 <code v-pre>Astral3DEditorGoBack.exe</code> 启动后端服务默认监听 <code v-pre>8080</code> 端口</li>
</ol>
<h3 id="nginx-配置" tabindex="-1"><a class="header-anchor" href="#nginx-配置"><span>Nginx 配置</span></a></h3>
<ol>
<li>打开 Nginx 配置文件假设nginx安装目录为<code v-pre>C:\nginx</code>,则配置文件路径为<code v-pre>C:\nginx\conf\nginx.conf</code>;</li>
<li> <code v-pre>http</code> 块中添加以下配置<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-"><span class="line"><span>http {</span></span>
<span class="line"><span> # ... 忽略原有其他配置不变更</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> # 开启gzip</span></span>
<span class="line"><span> gzip on;</span></span>
<span class="line"><span> </span></span>
<span class="line"><span> # 导入所有的server配置</span></span>
<span class="line"><span> include vhosts/*.conf;</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
<li> <code v-pre>C:\nginx\conf</code> 目录下创建 <code v-pre>vhosts</code> 目录(与上方http中增加的配置路径同名并非一定要为<code v-pre>vhost</code>,可以自定义);</li>
<li> <code v-pre>C:\nginx\conf\vhosts</code> 目录下创建 <code v-pre>astral3d.conf</code> 文件内容如下<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-"><span class="line"><span>server {</span></span>
<span class="line"><span> # 监听端口,即前端部署的端口一般设置为80</span></span>
<span class="line"><span> listen 80;</span></span>
<span class="line"><span> # 域名/ip/localhost</span></span>
<span class="line"><span> server_name 127.0.0.1;</span></span>
<span class="line"><span></span></span>
<span class="line"><span> # 访问 server_name:listen 请求就会被转发到这个location块中</span></span>
<span class="line"><span> location / {</span></span>
<span class="line"><span> # 前端部署的目录即前端打包后的文件所在目录</span></span>
<span class="line"><span> root "C:\www\Astral3dEditor";</span></span>
<span class="line"><span> # 文件url重写规则将请求转发到index.html单页面应用</span></span>
<span class="line"><span> try_files $uri $uri/ index.html;</span></span>
<span class="line"><span> # 项目入口文件</span></span>
<span class="line"><span> index index.html;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> # 后端api接口代理接口请求匹配 /api 的会走此处转发下面都同理</span></span>
<span class="line"><span> location /api {</span></span>
<span class="line"><span> # 后端接口访问地址上面部署在了本机的8080端口</span></span>
<span class="line"><span> proxy_pass http://127.0.0.1:8080/api;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> # 前端websocket代理</span></span>
<span class="line"><span> location /socket {</span></span>
<span class="line"><span> proxy_pass http://127.0.0.1:8080/api/sys/ws; </span></span>
<span class="line"><span></span></span>
<span class="line"><span> proxy_http_version 1.1;</span></span>
<span class="line"><span> proxy_set_header Upgrade $http_upgrade;</span></span>
<span class="line"><span> proxy_set_header Connection "Upgrade";</span></span>
<span class="line"><span> proxy_connect_timeout 10s;</span></span>
<span class="line"><span> proxy_read_timeout 300s;</span></span>
<span class="line"><span> proxy_send_timeout 300s;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> # 如果需要使用upyun上传功能则需要添加以下配置</span></span>
<span class="line"><span> # 假设 http://upyun.xxx.com upyun</span></span>
<span class="line"><span></span></span>
<span class="line"><span> location /upyun {</span></span>
<span class="line"><span> rewrite ^/upyun(.*)$ $1 break;</span></span>
<span class="line"><span> proxy_pass http://upyun.xxx.com;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> location /static/upload {</span></span>
<span class="line"><span> proxy_pass http://upyun.xxx.com/static/upload;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span></span></span>
<span class="line"><span> location /static/bim2gltf {</span></span>
<span class="line"><span> proxy_pass http://upyun.xxx.com/static/bim2gltf;</span></span>
<span class="line"><span> }</span></span>
<span class="line"><span>}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
</ol>
<h3 id="启动服务" tabindex="-1"><a class="header-anchor" href="#启动服务"><span>启动服务</span></a></h3>
<div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-bash"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">nginx</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -s</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> start</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"># 重启 nginx如果修改了配置文件</span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665">nginx</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076"> -s</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D"> reload</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>此时访问 <code v-pre>http://127.0.0.1</code> 即可访问到 Astral 3D Editor</p>
<h2 id="服务器部署-linux" tabindex="-1"><a class="header-anchor" href="#服务器部署-linux"><span>服务器部署(Linux)</span></a></h2>
<h2 id="docker-部署" tabindex="-1"><a class="header-anchor" href="#docker-部署"><span>Docker 部署</span></a></h2>
<h2 id="注意事项" tabindex="-1"><a class="header-anchor" href="#注意事项"><span>注意事项</span></a></h2>
<ol>
<li>后端打包前请确认<code v-pre>Astral3DEditorGoBack/conf/app.conf</code>文件中的<code v-pre>runmode = prod</code>;</li>
<li>后端部署时请确保 MySQL 数据库配置正确并导入 <code v-pre>Astral3DEditorGoBack/static/sql/astral-3d-editor.sql</code> 文件</li>
<li>前端部署时请确保 Nginx 配置正确并将前端部署到服务器上</li>
<li>后端部署时请确保后端程序启动成功并监听 <code v-pre>Astral3DEditorGoBack/conf/app.conf</code>中配置的端口<code v-pre>httpport </code>默认为 <code v-pre>8080</code> </li>
<li>前端部署时请确保前端程序启动成功并监听 Nginx 配置中配置的端口,比如上面示例的 <code v-pre>80</code> 端口</li>
<li>部署完成后请确保 Nginx MySQL 服务正常运行</li>
<li>部署完成后请确保前端程序与后端程序正常运行</li>
</ol>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/nct00cif/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/nct00cif/\",\"title\":\"几何\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"几何\",\"createTime\":\"2025/03/31 20:06:40\",\"permalink\":\"/guide/nct00cif/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"几何\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/nct00cif/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"几何\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.03,\"words\":10},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/几何.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/31eucyqc/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/plugin/31eucyqc/\",\"title\":\"入门\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"入门\",\"createTime\":\"2025/02/20 15:13:36\",\"permalink\":\"/guide/plugin/31eucyqc/\",\"description\":\"Astral 3D 内置了插件系统,为其提供了巨大的灵活性和可扩展性。 使用方法 打开插件中心: 插件中心入口 单击需要使用的插件运行以glTF处理器为例 插件中心 glTF处理器 内置插件 Astral 3D Editor 内置了以下插件: glTF处理器在Web端处理glTF文件的能力。用于对 glTF 格式的模型文件进行压缩、优化等操作;\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"入门\\\",\\\"image\\\":[\\\"https://docs.astraljs.com/images/plugin/entrance.jpg\\\",\\\"https://docs.astraljs.com/images/plugin/plane.jpg\\\",\\\"https://docs.astraljs.com/images/plugin/glTFHandler/plane.jpg\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/plugin/31eucyqc/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"入门\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"Astral 3D 内置了插件系统,为其提供了巨大的灵活性和可扩展性。 使用方法 打开插件中心: 插件中心入口 单击需要使用的插件运行以glTF处理器为例 插件中心 glTF处理器 内置插件 Astral 3D Editor 内置了以下插件: glTF处理器在Web端处理glTF文件的能力。用于对 glTF 格式的模型文件进行压缩、优化等操作;\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:image\",\"content\":\"https://docs.astraljs.com/images/plugin/entrance.jpg\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.45,\"words\":136},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/plugins/入门.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,21 @@
<template><div><blockquote>
<p>Astral 3D 内置了插件系统为其提供了巨大的灵活性和可扩展性</p>
</blockquote>
<h2 id="使用方法" tabindex="-1"><a class="header-anchor" href="#使用方法"><span>使用方法</span></a></h2>
<ol>
<li>打开插件中心</li>
</ol>
<p><img src="/images/plugin/entrance.jpg" alt="插件中心入口"></p>
<ol start="2">
<li>单击需要使用的插件运行<kbd>glTF处理器</kbd>为例</li>
</ol>
<p><img src="/images/plugin/plane.jpg" alt="插件中心"></p>
<p><img src="/images/plugin/glTFHandler/plane.jpg" alt="glTF处理器"></p>
<h2 id="内置插件" tabindex="-1"><a class="header-anchor" href="#内置插件"><span>内置插件</span></a></h2>
<p>Astral 3D Editor 内置了以下插件</p>
<ul>
<li>glTF处理器在Web端处理glTF文件的能力用于对 glTF 格式的模型文件进行压缩优化等操作</li>
</ul>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/7ro8hsc0/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/plugin/7ro8hsc0/\",\"title\":\"插件开发\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"插件开发\",\"createTime\":\"2025/02/20 15:13:36\",\"permalink\":\"/guide/plugin/7ro8hsc0/\",\"description\":\"开发插件时插件入口类需要实现以下接口并以esm方式导出Astral3D Engine会加载默认导出模块。 插件入口类接口 示例插件\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"插件开发\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/plugin/7ro8hsc0/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"插件开发\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"开发插件时插件入口类需要实现以下接口并以esm方式导出Astral3D Engine会加载默认导出模块。 插件入口类接口 示例插件\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.69,\"words\":208},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/plugins/插件开发.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,44 @@
<template><div><blockquote>
<p>开发插件时插件入口类需要实现以下接口并以esm方式导出Astral3D Engine会加载默认导出模块</p>
</blockquote>
<h2 id="插件入口类接口" tabindex="-1"><a class="header-anchor" href="#插件入口类接口"><span>插件入口类接口</span></a></h2>
<div class="language-typescript line-numbers-mode" data-highlighter="shiki" data-ext="typescript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-typescript"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">export</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> interface</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> Plugin</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666">: </span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">string</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE"> </span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> version</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">number</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE"> </span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> icon</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">string</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> install</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">config</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">?</span><span style="--shiki-light:#999999;--shiki-dark:#666666">: </span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">any</span><span style="--shiki-light:#999999;--shiki-dark:#666666">):</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE"> </span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> uninstall</span><span style="--shiki-light:#999999;--shiki-dark:#666666">():</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD"> // </span></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> run</span><span style="--shiki-light:#999999;--shiki-dark:#666666">():</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE"> </span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="示例插件" tabindex="-1"><a class="header-anchor" href="#示例插件"><span>示例插件</span></a></h2>
<div class="language-typescript line-numbers-mode" data-highlighter="shiki" data-ext="typescript" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code" v-pre=""><code class="language-typescript"><span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">// 暂未发布到npm请自行将代码拷贝到项目中</span></span>
<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD">// import { Plugin } from 'msy3d';</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">class</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> ExamplePlugin</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676"> implements</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> Plugin</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> name</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">example-plugin</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> version</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 1.0</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> icon</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> =</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> '</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">https://example.com/icon.png</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> install</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">config</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676">?</span><span style="--shiki-light:#999999;--shiki-dark:#666666">: </span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994">any</span><span style="--shiki-light:#999999;--shiki-dark:#666666">):</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">ExamplePlugin installed</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> uninstall</span><span style="--shiki-light:#999999;--shiki-dark:#666666">():</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">ExamplePlugin uninstalled</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665"> run</span><span style="--shiki-light:#999999;--shiki-dark:#666666">():</span><span style="--shiki-light:#2E8F82;--shiki-dark:#5DA994"> void</span><span style="--shiki-light:#999999;--shiki-dark:#666666"> {</span></span>
<span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> console</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">log</span><span style="--shiki-light:#999999;--shiki-dark:#666666">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">ExamplePlugin run</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">'</span><span style="--shiki-light:#999999;--shiki-dark:#666666">);</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666"> }</span></span>
<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375">export</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375"> default</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A"> ExamplePlugin</span><span style="--shiki-light:#999999;--shiki-dark:#666666">;</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/plugin/builtin/jo87cfk0/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/plugin/builtin/jo87cfk0/\",\"title\":\"glTF 处理器\",\"lang\":\"zh-CN\",\"frontmatter\":{\"lang\":\"zh-CN\",\"title\":\"glTF 处理器\",\"createTime\":\"2025/02/20 15:13:36\",\"permalink\":\"/guide/plugin/builtin/jo87cfk0/\",\"description\":\"此插件提供了在 Web 端处理 glTF 文件的能力,主要能力如下: 优化 glTF 文件: a. 压缩模型数据(包括贴图材质与几何数据),减少文件大小; b. 网格顶点优化,减少顶点数量,提升渲染性能; c. 实例化网格,减少渲染 DrawCall提升渲染性能; d. 压缩裁剪纹理贴图,减少内存占用,提升渲染性能; 面板 glTF处理器 使用方法 ...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"glTF 处理器\\\",\\\"image\\\":[\\\"https://docs.astraljs.com/images/plugin/glTFHandler/plane.jpg\\\",\\\"https://docs.astraljs.com/images/plugin/glTFHandler/result.jpg\\\",\\\"https://docs.astraljs.com/images/plugin/glTFHandler/compare.jpg\\\",\\\"https://docs.astraljs.com/images/plugin/glTFHandler/compare2.jpg\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/plugin/builtin/jo87cfk0/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"glTF 处理器\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"此插件提供了在 Web 端处理 glTF 文件的能力,主要能力如下: 优化 glTF 文件: a. 压缩模型数据(包括贴图材质与几何数据),减少文件大小; b. 网格顶点优化,减少顶点数量,提升渲染性能; c. 实例化网格,减少渲染 DrawCall提升渲染性能; d. 压缩裁剪纹理贴图,减少内存占用,提升渲染性能; 面板 glTF处理器 使用方法 ...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:image\",\"content\":\"https://docs.astraljs.com/images/plugin/glTFHandler/plane.jpg\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":3.16,\"words\":947},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/plugins/builtin/glTFHandler.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,136 @@
<template><div><blockquote>
<p>此插件提供了在 Web 端处理 glTF 文件的能力主要能力如下</p>
<ul>
<li>优化 glTF 文件
<ul>
<li>a. 压缩模型数据(包括贴图材质与几何数据)减少文件大小;</li>
<li>b. 网格顶点优化减少顶点数量提升渲染性能;</li>
<li>c. 实例化网格减少渲染 DrawCall提升渲染性能;</li>
<li>d. 压缩裁剪纹理贴图减少内存占用提升渲染性能;</li>
</ul>
</li>
</ul>
</blockquote>
<!-- > - 查看glTF文件构成
> - a. 显示glTF文件的结构包括文件头场景节点动画材质几何体等;
> - b. 显示glTF文件中的贴图几何体动画等资源的属性信息; -->
<h2 id="面板" tabindex="-1"><a class="header-anchor" href="#面板"><span>面板</span></a></h2>
<p><img src="/images/plugin/glTFHandler/plane.jpg" alt="glTF处理器"></p>
<h2 id="使用方法" tabindex="-1"><a class="header-anchor" href="#使用方法"><span>使用方法</span></a></h2>
<h4 id="_1-点击面板顶部上传区域-选择-gltf-文件-相关文件不会上传至服务器-仅用于本地处理" tabindex="-1"><a class="header-anchor" href="#_1-点击面板顶部上传区域-选择-gltf-文件-相关文件不会上传至服务器-仅用于本地处理"><span>1. 点击面板顶部上传区域选择 glTF 文件相关文件不会上传至服务器仅用于本地处理</span></a></h4>
<h4 id="_2-修改配置选项或直接使用默认配置" tabindex="-1"><a class="header-anchor" href="#_2-修改配置选项或直接使用默认配置"><span>2. 修改配置选项或直接使用默认配置</span></a></h4>
<h4 id="_3-点击-优化-按钮-开始处理-gltf-文件-优化日志会实时显示在面板顶部-原上传文件区域" tabindex="-1"><a class="header-anchor" href="#_3-点击-优化-按钮-开始处理-gltf-文件-优化日志会实时显示在面板顶部-原上传文件区域"><span>3. 点击优化按钮开始处理 glTF 文件优化日志会实时显示在面板顶部原上传文件区域</span></a></h4>
<h2 id="配置说明" tabindex="-1"><a class="header-anchor" href="#配置说明"><span>配置说明</span></a></h2>
<table>
<thead>
<tr>
<th>配置项</th>
<th>描述</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>压缩方式</td>
<td>网格浮点压缩方法<br/>Draco 压缩 geometry;<br/>Meshopt &amp; Quantization 压缩 geometry animation;</td>
<td><code v-pre>Draco</code>|<code v-pre>Meshopt</code>|<code v-pre>Quantization</code>|<code v-pre>None</code></td>
</tr>
<tr>
<td>Meshopt 压缩级别</td>
<td>压缩方式选择<code v-pre>Meshopt</code>时需要选择压缩级别</td>
<td><code v-pre>low</code>|<code v-pre>medium</code>|<code v-pre>high</code></td>
</tr>
<tr>
<td>实例化网格</td>
<td>使用 GPU 实例化技术共享网格引用即生成<code v-pre>THREE.InstancedMesh</code>对象减少 DrawCall</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>实例化网格界限</td>
<td>实例化网格所需的实例数,实例数低于该值的网格将不会实例化</td>
<td><code v-pre>min:2,max:Infinity</code></td>
</tr>
<tr>
<td>展平场景树</td>
<td>将场景内子模型对象全部展平到场景根节点<br/>开启合并网格时此项无法关闭</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>合并网格</td>
<td>合并网格以减少渲染调用合并后的网格无法单独选中<br/>前置条件开启展平场景树</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>合并纹理</td>
<td>创建调色板纹理并合并材质</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>合并纹理界限</td>
<td>合并纹理所需的纹理数,纹理数低于该值将不会合并</td>
<td><code v-pre>min:2,max:Infinity</code></td>
</tr>
<tr>
<td>修剪</td>
<td>从文件中删除未被场景引用的属性</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>修剪顶点</td>
<td>是否修剪未使用的顶点属性</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>修剪子节点</td>
<td>是否修剪空的叶子节点</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>修剪纹理</td>
<td>是否修剪实体(单色)纹理将其转换为材质元素</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>合并同位顶点</td>
<td>合并按位相同的顶点合并和索引后顶点之间的数据共享效率更高文件大小可以减小GPU 可以更高效地使用顶点缓存<br/>开启简化网格时此项无法关闭</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>简化网格</td>
<td>基于<code v-pre>meshoptimizer</code>的简化算法生成具有较少三角形和顶点的网格简化是有损的但该算法旨在针对给定的参数尽可能地保持视觉质量<br/>前置条件开启合并同位顶点</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>简化误差界限</td>
<td>简化网格误差容忍度以网格尺寸的百分比表示</td>
<td><code v-pre>min:0.01,max:100</code></td>
</tr>
<tr>
<td>简化锁定边界</td>
<td>是否锁定网格的拓扑边界拓扑结构尤其是分割顶点会限制简化器</td>
<td><code v-pre>true</code>|<code v-pre>false</code></td>
</tr>
<tr>
<td>简化比率</td>
<td>要保留的顶点的比率0-1</td>
<td><code v-pre>min:0,max:1</code></td>
</tr>
<tr>
<td>纹理压缩</td>
<td><code v-pre>AVIF</code><code v-pre>WebP</code>优化传输大小;<br/><code v-pre>Auto</code>按原始格式进行压缩;</td>
<td><code v-pre>WebP</code>|<code v-pre>AVIF</code>|<code v-pre>Auto</code>|<code v-pre>None</code></td>
</tr>
<tr>
<td>纹理最大尺寸</td>
<td>超过该尺寸的纹理将被压缩,值一般为 2 N 次方</td>
<td><code v-pre>min:2,max:Infinity</code></td>
</tr>
</tbody>
</table>
<h2 id="结果" tabindex="-1"><a class="header-anchor" href="#结果"><span>结果</span></a></h2>
<p><img src="/images/plugin/glTFHandler/result.jpg" alt="glTF优化结果"></p>
<p><img src="/images/plugin/glTFHandler/compare.jpg" alt="glTF优化文件对比"></p>
<p><img src="/images/plugin/glTFHandler/compare2.jpg" alt="glTF优化文件对比"></p>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/pnmbue0k/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/pnmbue0k/\",\"title\":\"场景配置\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"场景配置\",\"createTime\":\"2025/03/31 20:04:17\",\"permalink\":\"/guide/pnmbue0k/\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"场景配置\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/pnmbue0k/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"场景配置\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":0.04,\"words\":12},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"filePathRelative\":\"notes/guide/manual/editor/rightSidebar/场景配置.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,3 @@
<template><div></div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/rf1xgf4z/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/rf1xgf4z/\",\"title\":\"BIM轻量化\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"BIM轻量化\",\"createTime\":\"2025/03/31 19:48:15\",\"permalink\":\"/guide/rf1xgf4z/\",\"description\":\"简要说明 通过编辑器的BIM轻量化功能您可以将复杂的BIM工程文件如.rvt转换为轻量化的.glTF文件。 转换过程中保留了BIM构件的属性信息同时对模型进行了压缩优化方便在Web端进行高效解析与展示。 主要亮点: 支持BIM文件的轻量化转换优化模型大小。 保留构件属性,便于后续操作与分析。 界面设计与类似,操作直观易用。 功能说明 模型列...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"BIM轻量化\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/rf1xgf4z/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"BIM轻量化\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"简要说明 通过编辑器的BIM轻量化功能您可以将复杂的BIM工程文件如.rvt转换为轻量化的.glTF文件。 转换过程中保留了BIM构件的属性信息同时对模型进行了压缩优化方便在Web端进行高效解析与展示。 主要亮点: 支持BIM文件的轻量化转换优化模型大小。 保留构件属性,便于后续操作与分析。 界面设计与类似,操作直观易用。 功能说明 模型列...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":2.92,\"words\":875},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/leftSidebar/BIM轻量化.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

View File

@ -0,0 +1,80 @@
<template><div><div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/leftSidebar/bim.png"
title="BIM"
description="通过将BIM工程文件.rvt转换为glTF文件在保留BIM构件属性的同时压缩优化模型以达到web端解析BIM并且轻量化的目的。"
width="300"
author="ErSan"
date="2025/04/15"
/>
</div>
<h2 id="简要说明" tabindex="-1"><a class="header-anchor" href="#简要说明"><span>简要说明</span></a></h2>
<p>通过编辑器的BIM轻量化功能您可以将复杂的BIM工程文件<code v-pre>.rvt</code>转换为轻量化的<code v-pre>.glTF</code>文件<br>
转换过程中保留了BIM构件的属性信息同时对模型进行了压缩优化方便在Web端进行高效解析与展示</p>
<p><strong>主要亮点</strong></p>
<ul>
<li>支持BIM文件的轻量化转换优化模型大小</li>
<li>保留构件属性便于后续操作与分析</li>
<li>界面设计与<VPLink href="/guide/u1631nwk/">CAD解析预览</VPLink>类似操作直观易用</li>
</ul>
<h2 id="功能说明" tabindex="-1"><a class="header-anchor" href="#功能说明"><span>功能说明</span></a></h2>
<ul>
<li><strong>模型列表</strong>展示用户上传转换的所有BIM模型</li>
<li><strong>上传模型</strong>点击顶部<mark>历史记录</mark>右侧的<mark>上传按钮</mark>会打开模型上传界面</li>
<li><strong>历史记录</strong>点击顶部<mark>历史记录</mark>按钮会弹出历史上传记录列表</li>
</ul>
<h3 id="模型列表" tabindex="-1"><a class="header-anchor" href="#模型列表"><span>模型列表</span></a></h3>
<ul>
<li><strong>功能描述</strong>展示用户上传并转换成功的所有BIM模型</li>
<li><strong>操作方式</strong><br>
如本页面首图列表以网格形式展示<br>
从列表中直接<mark>拖动</mark>相应模型到中间的三维视口 <mark>双击</mark>该模型都可加载并渲染对应模型</li>
</ul>
<h3 id="上传模型" tabindex="-1"><a class="header-anchor" href="#上传模型"><span>上传模型</span></a></h3>
<div style="display:flex;justify-content:center;">
<ImageCard
image="/images/manual/editor/leftSidebar/bimUpload.png"
title="上传模型"
width="400"
author="ErSan"
date="2025/04/15"
/>
</div>
<ul>
<li><strong>支持格式</strong><code v-pre>.rvt.rfa</code></li>
<li><strong>转换方式</strong>
<ul>
<li>文件会在上传后通过WebSocket发起轻量化转换请求</li>
<li>转换结果通过WebSocket消息返回并加载渲染展示</li>
</ul>
</li>
<li><strong>转换配置</strong>
<ul>
<li>极致轻量化模型会在转换过程中执行<mark>网格优化材质贴图压缩并转换格式为WebP网格实例化网格合并</mark>等模型优化操作以确保输出的BIM轻量化模型是最小体积及最小渲染损耗的glTF模型过程中可能执行的具体优化项可参考<VPLink href="/guide/plugin/builtin/jo87cfk0/">glTF处理器</VPLink>章节</li>
<li>导出属性生成的glTF模型中是否包含构件属性</li>
<li>转换视图一个BIM文件中可能会包含多个3D视图如果用户有确切的转换视图目标可选择<code v-pre>按名称</code>并输入视图名称以转换否则将自动以<code v-pre>默认3D视图</code>为目标转换
-视觉样式此设置影响最终输出的模型材质<code v-pre>着色</code>模式基本不包含任何材质贴图以纯色材质方式输出<code v-pre>真实</code>模式会包含用户建模时的材质贴图输出材质更真实</li>
<li>坐标参考一般情况下一个BIM工程模型会由多工程师完成便会存在多个单体BIM文件此设置会决定最终输出模型与笛卡尔坐标系原点的相对位置信息关于<mark>原点项目基点测量点</mark>的详细说明可以参考这篇文章<a href="https://zhuanlan.zhihu.com/p/220113797" target="_blank" rel="noopener noreferrer">详解Revit坐标系</a></li>
</ul>
</li>
</ul>
<h3 id="历史记录" tabindex="-1"><a class="header-anchor" href="#历史记录"><span>历史记录</span></a></h3>
<div class="demo-wrapper only-img no-padding">
<div class="demo-head">
<div class="demo-ctrl"><i></i><i></i><i></i></div>
</div>
<div class="demo-container" >
<ImageCard
image="/images/manual/editor/leftSidebar/bimHistory.png"
title="历史记录"
author="ErSan"
date="2025/04/15"
/>
</div></div><ul>
<li><strong>功能描述</strong>展示用户之前上传的所有BIM模型记录方便快速查找和重新加载</li>
<li><strong>操作方式</strong>点击顶部<mark>历史记录</mark>按钮弹出历史上传记录列表</li>
</ul>
</div></template>

View File

@ -0,0 +1,3 @@
import comp from "D:/A-Ersan/astraljs/Astral3D/packages/docs/src/.vuepress/.temp/pages/guide/rzqb0h0l/index.html.vue"
const data = JSON.parse("{\"path\":\"/guide/rzqb0h0l/\",\"title\":\"场景树\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"场景树\",\"createTime\":\"2025/03/31 19:58:06\",\"permalink\":\"/guide/rzqb0h0l/\",\"description\":\"简要说明 场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象。 功能说明 节点搜索:顶部搜索栏用于快速查找节点,模糊查询到的节点父级会自动展开,并在改节点下添加下划线。 层级管理:通过拖拽操作,可以调整对象的父子关系。 对象选择:点击场景树中的对象名称,可以在场景中选中对应的对...\",\"head\":[[\"script\",{\"type\":\"application/ld+json\"},\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Article\\\",\\\"headline\\\":\\\"场景树\\\",\\\"image\\\":[\\\"\\\"],\\\"dateModified\\\":\\\"2025-04-21T09:37:33.000Z\\\",\\\"author\\\":[]}\"],[\"meta\",{\"property\":\"og:url\",\"content\":\"https://docs.astraljs.com/guide/rzqb0h0l/\"}],[\"meta\",{\"property\":\"og:site_name\",\"content\":\"Astral3D\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"场景树\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"简要说明 场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象。 功能说明 节点搜索:顶部搜索栏用于快速查找节点,模糊查询到的节点父级会自动展开,并在改节点下添加下划线。 层级管理:通过拖拽操作,可以调整对象的父子关系。 对象选择:点击场景树中的对象名称,可以在场景中选中对应的对...\"}],[\"meta\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"meta\",{\"property\":\"og:locale\",\"content\":\"zh-CN\"}],[\"meta\",{\"property\":\"og:updated_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}],[\"meta\",{\"property\":\"article:modified_time\",\"content\":\"2025-04-21T09:37:33.000Z\"}]]},\"readingTime\":{\"minutes\":1.39,\"words\":418},\"git\":{\"createdTime\":1745228253000,\"updatedTime\":1745228253000,\"contributors\":[{\"name\":\"ErSan\",\"username\":\"ErSan\",\"email\":\"mlt131220@163.com\",\"commits\":1,\"avatar\":\"https://avatars.githubusercontent.com/ErSan?v=4\",\"url\":\"https://github.com/ErSan\"}]},\"autoDesc\":true,\"filePathRelative\":\"notes/guide/manual/editor/leftSidebar/场景树.md\",\"headers\":[],\"bulletin\":true}")
export { comp, data }

Some files were not shown because too many files have changed in this diff Show More