Initial commit
Made-with: Cursor
26
Astral3D/.gitignore
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
packages/examples
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
2
Astral3D/.npmrc
Normal file
@@ -0,0 +1,2 @@
|
||||
# 解决pnpm add时优先在本地查找依赖
|
||||
link-workspace-packages=true
|
||||
1
Astral3D/.nvmrc
Normal file
@@ -0,0 +1 @@
|
||||
23.11.0
|
||||
49
Astral3D/.prettierrc.js
Normal file
@@ -0,0 +1,49 @@
|
||||
/** @type {import("prettier").Config} */
|
||||
module.exports = {
|
||||
// 一行最多160字符
|
||||
printWidth: 160,
|
||||
// 指定一个制表符等于的空格数
|
||||
tabWidth: 4,
|
||||
// 使用制表符,而不使用空格
|
||||
useTabs: true,
|
||||
// 行尾需要有分号
|
||||
semi: true,
|
||||
// 使用单引号代替双引号
|
||||
singleQuote: false,
|
||||
// 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
|
||||
proseWrap: "preserve",
|
||||
// 对象的key仅在必要时用引号括起来
|
||||
quoteProps: "as-needed",
|
||||
// 尾逗号根据ES5规则使用
|
||||
trailingComma: "es5",
|
||||
// 在对象,数组括号与文字之间加空格 "{ foo: bar }"
|
||||
bracketSpacing: true,
|
||||
// (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
|
||||
arrowParens: "avoid",
|
||||
// 指定 HTML 文件的空白字符敏感度
|
||||
htmlWhitespaceSensitivity: "ignore",
|
||||
// 缩进 Vue SFC 文件中的 <script> 和 <style> 标签
|
||||
vueIndentScriptAndStyle: true,
|
||||
// 结尾是 \n \r \n\r auto
|
||||
endOfLine: "auto",
|
||||
// 在jsx中使用单引号代替双引号
|
||||
jsxSingleQuote: false,
|
||||
// 在jsx中是否把'>' 单独放一行
|
||||
bracketSameLine: false,
|
||||
// === 不同文件的定制 ===
|
||||
overrides: [
|
||||
{
|
||||
files: "*.md",
|
||||
options: {
|
||||
printWidth: 120,
|
||||
proseWrap: "preserve",
|
||||
},
|
||||
},
|
||||
{
|
||||
files: "*.json",
|
||||
options: {
|
||||
printWidth: 120,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
60
Astral3D/CONTRIBUTING.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 贡献指南
|
||||
|
||||
欢迎来到 Astral 3D 社区!以下是参与贡献的指南:
|
||||
|
||||
## 🛠️ 开发流程
|
||||
|
||||
### 环境要求
|
||||
- Node.js 23.11+
|
||||
- PNPM
|
||||
|
||||
### 代码规范
|
||||
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
|
||||
pnpm lint
|
||||
```
|
||||
4. 发起 Pull Request 至 dev 分支
|
||||
|
||||
## 🏅 贡献者公约
|
||||
请遵守 [贡献者公约](https://www.contributor-covenant.org/version/2/1/code_of_conduct/),我们承诺:
|
||||
- 友好包容的交流环境
|
||||
- 尊重不同的开发经验
|
||||
- 建设性的技术讨论
|
||||
|
||||
## 💼 代码所有权
|
||||
所有贡献代码默认遵循项目 Apache-2.0 协议,作者保留对代码库的最终管理权限。
|
||||
42
Astral3D/LEGAL.md
Normal 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
Astral3D/LICENSE
Normal 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.
|
||||
113
Astral3D/README.en.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
|
||||
|
||||
🌍 [简体中文](README.md) | English
|
||||
|
||||
|
||||
Link:
|
||||
[](https://github.com/mlt131220/Astral3D)
|
||||
[](https://gitee.com/mlt131220/Astral3D)
|
||||
[](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:
|
||||
|
||||
|  | -07C160?logo=wechat&logoColor=white) |
|
||||
|---------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| <img src="https://fs.mhbdng.cn/temp/4851677b-661d-4e60-884d-414316290425.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135452Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=4868484133727ab3881d0f7eb65a52db07ee91bc154b4bf4b88d19a91446188e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200"> | <img src="https://fs.mhbdng.cn/temp/c1c7ecef-d655-4bb3-97e8-54402e3a48ef.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135514Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=7005038e2ded3dbad425f6a23341002bf79c3ffe9f2166af18348dcaeb61dca0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" 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
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## ⚡ Quick start
|
||||
|
||||
### pre-demand
|
||||
- Node.js ≥ 23.11.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
|
||||
[](https://github.com/yx8663/astral-service)
|
||||
|
||||
### Document center
|
||||
[](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 adopts the [![Apache License] (https://img.shields.io/badge/License-Apache_2.0-blue.svg)] (License) open source licenses, please comply with the terms of the agreement and the following supplementary conditions:
|
||||
|
||||
- ✅ allows: individual learning/secondary development
|
||||
- ⚠️ A copyright notice is required
|
||||
- ⚠️ commercial use requires authorization
|
||||
- ❌ Prohibited: using this project for business or illegal purposes that are competitive with **hangzhou xingluan digital technology**
|
||||
|
||||
**[Full legal notice](LEGAL.md)** | **[Contribution guide](CONTRIBUTING.md)**
|
||||
|
||||
## 🌟 Star trend
|
||||
|
||||
[](https://star-history.com/#mlt131220/Astral3D&Date)
|
||||
126
Astral3D/README.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# <img src="https://editor.astraljs.com/static/images/logo/logo.png" width="30" height="30"> Astral 3D Editor
|
||||
|
||||
🌍 简体中文 | [English](README.en.md)
|
||||
|
||||
直达:
|
||||
[](https://github.com/mlt131220/Astral3D)
|
||||
[](https://gitee.com/mlt131220/Astral3D)
|
||||
[](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>
|
||||
|
||||
## 💬 加入社区
|
||||
|
||||
通过以下方式获取最新动态和技术支持:
|
||||
|
||||
|  | -07C160?logo=wechat&logoColor=white)
|
||||
|---------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| <img src="https://fs.mhbdng.cn/temp/4851677b-661d-4e60-884d-414316290425.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135452Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=4868484133727ab3881d0f7eb65a52db07ee91bc154b4bf4b88d19a91446188e&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" width="200"> | <img src="https://fs.mhbdng.cn/temp/c1c7ecef-d655-4bb3-97e8-54402e3a48ef.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=6TE7OKPZN15R380TGT1V%2F20260111%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260111T135514Z&X-Amz-Expires=3600&X-Amz-Security-Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJwYXJlbnQiOiJtbHQxMzEyMjAiLCJleHAiOjE3NjgxODExNTV9.RAvlAnLKtG-9rNIZMrO5lrSJc_N1VqHf3yF3-slD59b-miNqdorqsI9Zmaz6_imBe_uw1u5KMt_OGE7No-vxfA&X-Amz-Signature=7005038e2ded3dbad425f6a23341002bf79c3ffe9f2166af18348dcaeb61dca0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject" 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 多人协作
|
||||
|
||||
## 🛠️ 技术栈
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## ⚡ 快速开始
|
||||
|
||||
### 前置需求
|
||||
- Node.js ≥ 23.11.x
|
||||
- PNPM
|
||||
```
|
||||
# 进入项目时
|
||||
nvm use 23.11.0
|
||||
# 或者如果 .nvmrc 已存在,直接:
|
||||
nvm use
|
||||
|
||||
# 如果还是不行,手动修复 PATH 顺序:
|
||||
$env:PATH = "E:\nvm4w\nodejs;$env:PATH"
|
||||
nvm version # 应显示 1.1.12
|
||||
nvm install 23.11.0
|
||||
nvm use 23.11.0
|
||||
node --version
|
||||
```
|
||||
|
||||
### 本地运行
|
||||
```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
|
||||
```
|
||||
|
||||
## 📚 生态相关
|
||||
|
||||
### 后端实现
|
||||
[](https://github.com/yx8663/astral-service)
|
||||
|
||||
### 文档中心
|
||||
[](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"> |
|
||||
|
||||
## ⚖️ 许可协议
|
||||
|
||||
本项目采用 [](LICENSE) 开源协议,使用时请遵守协议条款及以下补充条款:
|
||||
|
||||
- ✅ 允许:个人学习/二次开发
|
||||
- ⚠️ 需要版权声明
|
||||
- ⚠️ 商业用途需要授权
|
||||
- ❌ 禁止:将本项目用于与**杭州星孪数字科技**有竞争性的业务或非法用途
|
||||
|
||||
**[完整法律声明](LEGAL.md)** | **[贡献指南](CONTRIBUTING.md)**
|
||||
|
||||
## 🌟 Star 趋势
|
||||
|
||||
[](https://star-history.com/#mlt131220/Astral3D&Date)
|
||||
22
Astral3D/common/build/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
2
Astral3D/common/build/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from './utils.ts';
|
||||
export * from './plugins/index.ts';
|
||||
28
Astral3D/common/build/src/plugins/appConfig.ts
Normal 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,
|
||||
},
|
||||
});
|
||||
}
|
||||
36
Astral3D/common/build/src/plugins/compress.ts
Normal 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;
|
||||
}
|
||||
54
Astral3D/common/build/src/plugins/index.ts
Normal 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;
|
||||
}
|
||||
15
Astral3D/common/build/src/plugins/visualizer.ts
Normal 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
Astral3D/common/build/src/utils.ts
Normal 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();
|
||||
}
|
||||
29
Astral3D/common/build/tsconfig.json
Normal 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": []
|
||||
}
|
||||
28
Astral3D/package.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"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 sdk: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",
|
||||
"examples:dev": "pnpm run -C packages/examples dev",
|
||||
"examples:build": "pnpm run -C packages/examples build"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=23.0.0"
|
||||
},
|
||||
"keywords": [],
|
||||
"devDependencies": {
|
||||
"prettier": "^3.7.4"
|
||||
},
|
||||
"packageManager": "pnpm@10.8.1"
|
||||
}
|
||||
4
Astral3D/packages/docs/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
src/.vuepress/.cache
|
||||
src/.vuepress/dist
|
||||
src/.vuepress/.temp
|
||||
3
Astral3D/packages/docs/.npmrc
Normal file
@@ -0,0 +1,3 @@
|
||||
shamefully-hoist=true
|
||||
shell-emulator=true
|
||||
auto-install-peers=true
|
||||
24
Astral3D/packages/docs/package.json
Normal 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": "catalog:",
|
||||
"vue": "catalog:",
|
||||
"vuepress": "^2.0.0-rc.24",
|
||||
"vuepress-theme-plume": "^1.0.0-rc.164"
|
||||
}
|
||||
}
|
||||
16
Astral3D/packages/docs/src/.vuepress/_bulletin.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: _bulletin
|
||||
createTime: 2025/10/02 00:22:16
|
||||
permalink: /astral/ib77r5fd/
|
||||
---
|
||||
::: center
|
||||
|
||||
**QQ 交流群:** [1040320579](https://qm.qq.com/cgi-bin/qm/qr?k=Ewp9bODHFFaY6yphwEzmSe4lv889WbjR&jump_from=webapi&authKey=5gUSKPjhnXjhIy3pudNN/9igLNGxEwnN8yiXEDnEalE9loBQ4lEtVISG8OyXWmx8)
|
||||
|
||||
{width="618" height="616" style="width: 200px"}
|
||||
|
||||
您在使用过程中遇到任何问题,欢迎通过 [issue](https://github.com/mlt131220/Astral3D/issues/new) 反馈。也欢迎加入我们的 QQ 交流群一起讨论。
|
||||
|
||||
> :fire: 4核8G 200兆服务器,仅需49元/月,[点击这里购买](https://www.rainyun.com/Astral3D_)
|
||||
> 专属优惠码:Astral3D
|
||||
:::
|
||||
22
Astral3D/packages/docs/src/.vuepress/client.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { defineClientConfig } from 'vuepress/client'
|
||||
// import RepoCard from 'vuepress-theme-plume/features/RepoCard.vue'
|
||||
// import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
|
||||
// import NpmBadgeGroup from 'vuepress-theme-plume/features/NpmBadgeGroup.vue'
|
||||
// import Swiper from 'vuepress-theme-plume/features/Swiper.vue'
|
||||
|
||||
// import CustomComponent from './theme/components/Custom.vue'
|
||||
|
||||
// import './theme/styles/custom.css'
|
||||
|
||||
export default defineClientConfig({
|
||||
enhance({ app }) {
|
||||
// built-in components
|
||||
// app.component('RepoCard', RepoCard)
|
||||
// app.component('NpmBadge', NpmBadge)
|
||||
// app.component('NpmBadgeGroup', NpmBadgeGroup)
|
||||
// app.component('Swiper', Swiper) // you should install `swiper`
|
||||
|
||||
// your custom components
|
||||
// app.component('CustomComponent', CustomComponent)
|
||||
},
|
||||
})
|
||||
199
Astral3D/packages/docs/src/.vuepress/config.ts
Normal file
@@ -0,0 +1,199 @@
|
||||
import { viteBundler } from '@vuepress/bundler-vite'
|
||||
import { defineUserConfig } from 'vuepress'
|
||||
import { plumeTheme } from 'vuepress-theme-plume'
|
||||
import path from 'node:path'
|
||||
|
||||
export default defineUserConfig({
|
||||
port: 8089,
|
||||
|
||||
base: '/',
|
||||
lang: 'zh-CN',
|
||||
title: 'Astral3D',
|
||||
description: 'Astral3D 文档',
|
||||
|
||||
head: [
|
||||
// 配置站点图标
|
||||
['link', { rel: 'icon', type: 'image/png', href: '/logo64x64.png' }],
|
||||
],
|
||||
|
||||
bundler: viteBundler(),
|
||||
shouldPrefetch: false, // 站点较大,页面数量较多时,不建议启用
|
||||
|
||||
theme: plumeTheme({
|
||||
/* 添加您的部署域名, 有助于 SEO, 生成 sitemap */
|
||||
hostname: 'https://docs.astraljs.com',
|
||||
|
||||
// 公告板
|
||||
bulletin: {
|
||||
lifetime:"session", // 在会话周期内关闭公告后不再显示
|
||||
contentType:"markdown",
|
||||
contentFile: path.join(__dirname, '_bulletin.md'),
|
||||
},
|
||||
|
||||
/* 文档仓库配置,用于 editLink */
|
||||
// docsRepo: '',
|
||||
// docsDir: 'docs',
|
||||
// docsBranch: '',
|
||||
|
||||
/* 页内信息 */
|
||||
// editLink: true,
|
||||
// lastUpdated: true,
|
||||
// contributors: true,
|
||||
// changelog: false,
|
||||
|
||||
/**
|
||||
* 博客
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#blog
|
||||
*/
|
||||
// blog: false, // 禁用博客
|
||||
// blog: {
|
||||
// postList: true, // 是否启用文章列表页
|
||||
// tags: true, // 是否启用标签页
|
||||
// archives: true, // 是否启用归档页
|
||||
// categories: true, // 是否启用分类页
|
||||
// postCover: 'right', // 文章封面位置
|
||||
// pagination: 15, // 每页显示文章数量
|
||||
// },
|
||||
|
||||
/* 博客文章页面链接前缀 */
|
||||
article: '/astral/',
|
||||
|
||||
/**
|
||||
* 编译缓存,加快编译速度
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#cache
|
||||
*/
|
||||
cache: 'filesystem',
|
||||
|
||||
/**
|
||||
* 为 markdown 文件自动添加 frontmatter 配置
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#autofrontmatter
|
||||
*/
|
||||
// autoFrontmatter: {
|
||||
// permalink: true, // 是否生成永久链接
|
||||
// createTime: true, // 是否生成创建时间
|
||||
// title: true, // 是否生成标题
|
||||
// },
|
||||
|
||||
// 文章贡献者
|
||||
contributors: {
|
||||
mode: 'block',
|
||||
},
|
||||
|
||||
plugins: {
|
||||
git: true,
|
||||
|
||||
/**
|
||||
* Shiki 代码高亮
|
||||
* @see https://theme-plume.vuejs.press/config/plugins/code-highlight/
|
||||
*/
|
||||
// shiki: {
|
||||
// // 强烈建议预设代码块高亮语言,插件默认加载所有语言会产生不必要的时间开销
|
||||
// languages: ['shell', 'bash', 'typescript', 'javascript'],
|
||||
// twoslash: true, // 启用 twoslash
|
||||
// whitespace: true, // 启用 空格/Tab 高亮
|
||||
// lineNumbers: true, // 启用行号
|
||||
// },
|
||||
|
||||
/* 本地搜索, 默认启用 */
|
||||
// search: true,
|
||||
|
||||
/**
|
||||
* Algolia DocSearch
|
||||
* 启用此搜索需要将 本地搜索 search 设置为 false
|
||||
* @see https://theme-plume.vuejs.press/config/plugins/search/#algolia-docsearch
|
||||
*/
|
||||
// docsearch: {
|
||||
// appId: '',
|
||||
// apiKey: '',
|
||||
// indexName: '',
|
||||
// },
|
||||
|
||||
/* 文章字数统计、阅读时间,设置为 false 则禁用 */
|
||||
// readingTime: true,
|
||||
|
||||
/**
|
||||
* markdown enhance
|
||||
* @see https://theme-plume.vuejs.press/config/plugins/markdown-enhance/
|
||||
*/
|
||||
// markdownEnhance: {
|
||||
// chartjs: true,
|
||||
// echarts: true,
|
||||
// mermaid: true,
|
||||
// flowchart: true,
|
||||
// },
|
||||
|
||||
/**
|
||||
* markdown power
|
||||
* @see https://theme-plume.vuejs.press/config/plugin/markdown-power/
|
||||
*/
|
||||
// markdownPower: {
|
||||
// pdf: true, // 启用 PDF 嵌入 @[pdf](/xxx.pdf)
|
||||
// caniuse: true, // 启用 caniuse 语法 @[caniuse](feature_name)
|
||||
// plot: true, // 启用隐秘文本语法 !!xxxx!!
|
||||
// bilibili: true, // 启用嵌入 bilibili视频 语法 @[bilibili](bid)
|
||||
// youtube: true, // 启用嵌入 youtube视频 语法 @[youtube](video_id)
|
||||
// artPlayer: true, // 启用嵌入 artPlayer 本地视频 语法 @[artPlayer](url)
|
||||
// audioReader: true, // 启用嵌入音频朗读功能 语法 @[audioReader](url)
|
||||
// icons: true, // 启用内置图标语法 :[icon-name]:
|
||||
// codepen: true, // 启用嵌入 codepen 语法 @[codepen](user/slash)
|
||||
// replit: true, // 启用嵌入 replit 语法 @[replit](user/repl-name)
|
||||
// codeSandbox: true, // 启用嵌入 codeSandbox 语法 @[codeSandbox](id)
|
||||
// jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id)
|
||||
// npmTo: true, // 启用 npm-to 容器 ::: npm-to
|
||||
// demo: true, // 启用 demo 容器 ::: demo
|
||||
// repl: { // 启用 代码演示容器
|
||||
// go: true, // ::: go-repl
|
||||
// rust: true, // ::: rust-repl
|
||||
// kotlin: true, // ::: kotlin-repl
|
||||
// },
|
||||
// imageSize: 'local', // 启用 自动填充 图片宽高属性,避免页面抖动
|
||||
// },
|
||||
|
||||
/**
|
||||
* 在 Markdown 文件中导入其他 markdown 文件内容。
|
||||
* @see https://theme-plume.vuejs.press/guide/markdown/include/
|
||||
*/
|
||||
// markdownInclude: true,
|
||||
|
||||
/**
|
||||
* Markdown 数学公式
|
||||
* @see https://theme-plume.vuejs.press/config/plugins/markdown-math/
|
||||
*/
|
||||
// markdownMath: {
|
||||
// type: 'katex',
|
||||
// },
|
||||
|
||||
/**
|
||||
* 水印
|
||||
* @see https://theme-plume.vuejs.press/guide/features/watermark/
|
||||
*/
|
||||
// watermark: true,
|
||||
|
||||
/**
|
||||
* 评论 comments
|
||||
* @see https://theme-plume.vuejs.press/guide/features/comments/
|
||||
*/
|
||||
comment: {
|
||||
provider: 'Giscus', // "Artalk" | "Giscus" | "Twikoo" | "Waline"
|
||||
comment: true,
|
||||
repo: 'mlt131220/Astral3D-Docs',
|
||||
repoId: 'R_kgDOLuBMGg',
|
||||
category: 'Announcements',
|
||||
categoryId: 'DIC_kwDOLuBMGs4Cero3',
|
||||
mapping: 'pathname',
|
||||
reactionsEnabled: true,
|
||||
inputPosition: 'top',
|
||||
},
|
||||
},
|
||||
|
||||
markdown: {
|
||||
annotation: true,
|
||||
},
|
||||
|
||||
/**
|
||||
* 加密功能
|
||||
* @see https://theme-plume.vuejs.press/guide/features/encryption/
|
||||
*/
|
||||
// encrypt: {},
|
||||
}),
|
||||
})
|
||||
31
Astral3D/packages/docs/src/.vuepress/navbar.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { defineNavbarConfig } from 'vuepress-theme-plume';
|
||||
import { version } from '../../package.json';
|
||||
|
||||
export const navbar = defineNavbarConfig([
|
||||
{
|
||||
text: '指南',
|
||||
icon: 'icon-park-outline:guide-board',
|
||||
link: '/notes/guide/quick-start/介绍.md',
|
||||
},
|
||||
{ text: 'SDK', link: '/notes/sdk/README.md', icon: 'carbon:api' },
|
||||
{ text: '示例', link: 'https://examples.astraljs.com/', icon: 'carbon:carbon-for-ibm-dotcom' },
|
||||
{ text: '推广中心', link: '/notes/promotion/README.md', icon: 'mdi:star-shooting-outline' },
|
||||
{ text: '商务合作', link: '/notes/cooperation/README.md', icon: 'carbon:partnership' },
|
||||
{
|
||||
text: '更多',
|
||||
icon: 'icon-park-outline:more-three',
|
||||
items: [
|
||||
{ text: '常见问题', link: '/notes/more/questions.md', icon: 'wpf:faq' },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: `${version}`,
|
||||
icon: 'codicon:versions',
|
||||
items: [
|
||||
{
|
||||
text: '更新日志',
|
||||
link: '/notes/update/logs/',
|
||||
}
|
||||
],
|
||||
},
|
||||
])
|
||||
187
Astral3D/packages/docs/src/.vuepress/notes.ts
Normal file
@@ -0,0 +1,187 @@
|
||||
import { defineNoteConfig, defineNotesConfig } from 'vuepress-theme-plume'
|
||||
|
||||
const updateNote = defineNoteConfig({
|
||||
dir: 'update/logs',
|
||||
link: '/update',
|
||||
sidebar: [
|
||||
{
|
||||
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',
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
const planNote = defineNoteConfig({
|
||||
dir: 'update/plan',
|
||||
link: '/update/plan',
|
||||
sidebar: 'auto'
|
||||
})
|
||||
|
||||
const guideNote = defineNoteConfig({
|
||||
dir: 'guide',
|
||||
link: '/guide',
|
||||
sidebar: [
|
||||
{
|
||||
text: '快速入门',
|
||||
collapsed: false,
|
||||
prefix: 'quick-start',
|
||||
icon: 'carbon:lightning',
|
||||
items: [
|
||||
'介绍',
|
||||
'安装',
|
||||
'项目结构',
|
||||
'部署'
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '编辑器使用手册',
|
||||
collapsed: false,
|
||||
prefix: 'manual',
|
||||
icon: 'carbon:apps',
|
||||
items: [
|
||||
{
|
||||
text: '首页',
|
||||
collapsed: false,
|
||||
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: false,
|
||||
prefix: 'preview',
|
||||
items: [
|
||||
'界面',
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '插件系统',
|
||||
collapsed: false,
|
||||
prefix: 'plugins',
|
||||
icon: 'carbon:lightning',
|
||||
items: [
|
||||
'入门',
|
||||
'插件开发',
|
||||
{
|
||||
text: '内置插件',
|
||||
collapsed: false,
|
||||
prefix: 'builtin',
|
||||
icon: 'carbon:plug',
|
||||
items: [
|
||||
'glTFHandler'
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
})
|
||||
|
||||
export const notes = defineNotesConfig({
|
||||
dir: 'notes',
|
||||
link: '/',
|
||||
notes: [updateNote, planNote, guideNote],
|
||||
})
|
||||
60
Astral3D/packages/docs/src/.vuepress/plume.config.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { defineThemeConfig } from 'vuepress-theme-plume'
|
||||
import { navbar } from './navbar'
|
||||
import { notes } from './notes'
|
||||
|
||||
/**
|
||||
* @see https://theme-plume.vuejs.press/config/basic/
|
||||
*/
|
||||
export default defineThemeConfig({
|
||||
logo: '/logo64x64.png',
|
||||
|
||||
appearance: true, // 配置 深色模式
|
||||
|
||||
social: [
|
||||
{ icon: 'github', link: 'https://github.com/mlt131220/Astral3D' },
|
||||
],
|
||||
// navbarSocialInclude: ['github'], // 允许显示在导航栏的 social 社交链接
|
||||
// aside: true, // 页内侧边栏, 默认显示在右侧
|
||||
// outline: [2, 3], // 页内大纲, 默认显示 h2, h3
|
||||
|
||||
/**
|
||||
* 文章版权信息
|
||||
* @see https://theme-plume.vuejs.press/guide/features/copyright/
|
||||
*/
|
||||
copyright: true,
|
||||
|
||||
prevPage: true, // 是否启用上一页链接
|
||||
nextPage: true, // 是否启用下一页链接
|
||||
createTime: true, // 是否显示文章创建时间
|
||||
|
||||
/* 站点页脚 */
|
||||
footer: {
|
||||
message: '',
|
||||
copyright: 'Copyright © 2023-present <a target="_blank" href="https://github.com/mlt131220">ErSan <mlt131220@163.com></a>',
|
||||
},
|
||||
|
||||
/**
|
||||
* @see https://theme-plume.vuejs.press/config/basic/#profile
|
||||
*/
|
||||
profile: {
|
||||
avatar: '/logo64x64.png',
|
||||
name: 'Astral3D',
|
||||
description: 'Astral3D 文档',
|
||||
// circle: true,
|
||||
// location: '',
|
||||
// organization: '',
|
||||
},
|
||||
|
||||
// 导航栏配置
|
||||
navbar,
|
||||
|
||||
notes,
|
||||
|
||||
/* 过渡动画 @see https://theme-plume.vuejs.press/config/basic/#transition */
|
||||
// transition: {
|
||||
// page: true, // 启用 页面间跳转过渡动画
|
||||
// postList: true, // 启用 博客文章列表过渡动画
|
||||
// appearance: 'fade', // 启用 深色模式切换过渡动画, 或配置过渡动画类型
|
||||
// },
|
||||
|
||||
})
|
||||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 472 KiB |
|
After Width: | Height: | Size: 32 KiB |
BIN
Astral3D/packages/docs/src/.vuepress/public/images/AliPay.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
Astral3D/packages/docs/src/.vuepress/public/images/WeChatPay.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 4.6 MiB |
|
After Width: | Height: | Size: 335 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 353 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 371 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 209 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 1023 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 711 KiB |
|
After Width: | Height: | Size: 719 KiB |
|
After Width: | Height: | Size: 758 KiB |
BIN
Astral3D/packages/docs/src/.vuepress/public/images/qq_qrcode.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 167 KiB |
BIN
Astral3D/packages/docs/src/.vuepress/public/logo64x64.ico
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Astral3D/packages/docs/src/.vuepress/public/logo64x64.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
const message = ref('Hello World!')
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="my-custom-content">
|
||||
{{ message }}
|
||||
</div>
|
||||
</template>
|
||||
6
Astral3D/packages/docs/src/.vuepress/theme/shim.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
declare module '*.vue' {
|
||||
import type { ComponentOptions } from 'vue'
|
||||
|
||||
const comp: ComponentOptions
|
||||
export default comp
|
||||
}
|
||||
50
Astral3D/packages/docs/src/.vuepress/theme/styles/custom.css
Normal file
@@ -0,0 +1,50 @@
|
||||
:root {
|
||||
/** 主题颜色 */
|
||||
|
||||
/*
|
||||
--vp-c-brand-1: #5086a1;
|
||||
--vp-c-brand-2: #6aa1b7;
|
||||
--vp-c-brand-3: #8cccd5;
|
||||
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
|
||||
*/
|
||||
|
||||
/** 背景颜色 */
|
||||
|
||||
/*
|
||||
--vp-c-bg: #fff;
|
||||
--vp-c-bg-alt: #f6f6f7;
|
||||
--vp-c-bg-elv: #fff;
|
||||
--vp-c-bg-soft: #f6f6f7;
|
||||
*/
|
||||
|
||||
/** 文本颜色 */
|
||||
|
||||
/*
|
||||
--vp-c-text-1: rgba(60, 60, 67);
|
||||
--vp-c-text-2: rgba(60, 60, 67, 0.78);
|
||||
--vp-c-text-3: rgba(60, 60, 67, 0.56);
|
||||
*/
|
||||
}
|
||||
|
||||
/** 深色模式 */
|
||||
[data-theme="dark"] {
|
||||
/*
|
||||
--vp-c-brand-1: #8cccd5;
|
||||
--vp-c-brand-2: #6aa1b7;
|
||||
--vp-c-brand-3: #5086a1;
|
||||
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
|
||||
*/
|
||||
|
||||
/*
|
||||
--vp-c-bg: #1b1b1f;
|
||||
--vp-c-bg-alt: #161618;
|
||||
--vp-c-bg-elv: #202127;
|
||||
--vp-c-bg-soft: #202127;
|
||||
*/
|
||||
|
||||
/*
|
||||
--vp-c-text-1: rgba(255, 255, 245, 0.86);
|
||||
--vp-c-text-2: rgba(235, 235, 245, 0.6);
|
||||
--vp-c-text-3: rgba(235, 235, 245, 0.38);
|
||||
*/
|
||||
}
|
||||
121
Astral3D/packages/docs/src/README.md
Normal file
@@ -0,0 +1,121 @@
|
||||
---
|
||||
pageLayout: home
|
||||
externalLinkIcon: false
|
||||
config:
|
||||
-
|
||||
type: hero
|
||||
full: true
|
||||
background: tint-plate
|
||||
hero:
|
||||
name: Astral 3D Engine
|
||||
tagline: Astral 3D Editor
|
||||
text: 工业孪生3D引擎
|
||||
actions:
|
||||
-
|
||||
theme: brand
|
||||
text: 快速入门 -->
|
||||
link: /guide/6xkx4dnv/
|
||||
-
|
||||
theme: alt
|
||||
text: Demo
|
||||
link: https://editor.astraljs.com/#/
|
||||
-
|
||||
theme: alt
|
||||
text: Github
|
||||
link: https://github.com/mlt131220/Astral3D
|
||||
-
|
||||
type: features
|
||||
features:
|
||||
-
|
||||
title: 最新技术栈
|
||||
icon: 🍡
|
||||
details: 基于Vue3、Vite、TypeScript、Naive UI等最新技术栈开发
|
||||
-
|
||||
title: 基于ThreeJS
|
||||
icon: 🌷
|
||||
details: Three.js 是基于webGL的封装的一个易于使用且轻量级的3D库,是前端开发者研发3D绘图的主要工具
|
||||
-
|
||||
title: 简洁易用
|
||||
icon: 🔅
|
||||
details: 高效进行场景处理,并且提供网络压缩存储功能,在项目中快速读取加载
|
||||
-
|
||||
title: BIM 轻量化引擎
|
||||
icon: 🚀
|
||||
details: 支持上传BIM模型进行轻量化查看,并转化为GLB格式
|
||||
-
|
||||
title: CAD 在线解析
|
||||
icon: 🌈
|
||||
details: 支持CAD图纸在线解析预览
|
||||
-
|
||||
title: 3DTiles
|
||||
icon: 🧱
|
||||
details: 支持3DTiles加载、打包、漫游
|
||||
-
|
||||
title: 插件系统
|
||||
icon: 🏝️
|
||||
details: 编辑器提供了开放的插件系统,内置丰富的插件库,如:glTF处理器、地形生成器、模型转换器等等。
|
||||
-
|
||||
title: 粒子系统
|
||||
icon: 💊
|
||||
details: 内置多种粒子效果,如:烟花、火焰、烟雾、萤火虫等,丰富的配置项可以满足用户各种需求。
|
||||
-
|
||||
title: 动画系统
|
||||
icon: 🎡
|
||||
details: 支持在线编辑动画关键帧,完善的动画编辑器将支撑你的创作。
|
||||
-
|
||||
title: 天气系统
|
||||
icon: 🌤️
|
||||
details: 支持多种天气效果,如:晴天、雾天、雨天、雪天等。
|
||||
-
|
||||
title: 资源中心
|
||||
icon: 🎁
|
||||
details: 模型、材质、粒子、广告牌(Billboard)、HtmlPanel....
|
||||
-
|
||||
title: WebGPU (开发阶段)
|
||||
icon: 🚩
|
||||
details: 更快的计算...
|
||||
-
|
||||
type: image-text
|
||||
title: 工业范
|
||||
description: CAD? BIM? 亦或更多?
|
||||
image: /images/home/industryDark.png
|
||||
width: 600
|
||||
list:
|
||||
-
|
||||
title: CAD
|
||||
description: 支持 <code>.dwg,.dxf</code> 图纸解析预览
|
||||
-
|
||||
title: BIM
|
||||
description: 支持 <code>.rvt,.ifc,.rva</code> 模型轻量化解析
|
||||
-
|
||||
title: Future
|
||||
description: PDMS、VTU
|
||||
-
|
||||
type: custom
|
||||
---
|
||||
|
||||
<script setup>
|
||||
import RepoCard from 'vuepress-theme-plume/features/RepoCard.vue'
|
||||
</script>
|
||||
|
||||
<CardGrid>
|
||||
<RepoCard repo="mlt131220/Astral3D" />
|
||||
<RepoCard repo="mlt131220/Astral3D" provider="gitee" />
|
||||
</CardGrid>
|
||||
|
||||
|
||||
### :zap: 快速开始
|
||||
|
||||
:::code-tabs
|
||||
@tab bash
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mlt131220/Astral3D.git
|
||||
|
||||
cd Astral3D
|
||||
pnpm install
|
||||
pnpm run sdk:build
|
||||
pnpm run editor:dev
|
||||
```
|
||||
|
||||
:::
|
||||
55
Astral3D/packages/docs/src/notes/cooperation/README.md
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: 商务合作
|
||||
createTime: 2025/10/06 21:04:41
|
||||
permalink: /astral/nf8y5syx/
|
||||
---
|
||||
|
||||
# 寻求合作,共创价值
|
||||
|
||||
> 您好!我们是 ==Astral 3D== 开源项目的核心开发团队。
|
||||
> ==Astral 3D Editor== 是一个功能强大的、完全开源的 Web3D 编辑器,致力于为开发者和设计师提供高效、便捷的 3D 场景创作工具。
|
||||
> 我们拥有深厚的 `WebGL、WebGPU、Three.js、Babylon.js、Vue/React` 等全栈开发经验,除了维护核心的开源项目外,我们也承接相关的商业项目,旨在将专业的技术实力转化为您的商业价值。
|
||||
|
||||
## 我们的合作模式
|
||||
|
||||
我们专注于提供高质量的 ==Web 前后端== 技术开发服务,主要合作模式包括:
|
||||
|
||||
* **Web3D 项目外包:**
|
||||
* **产品3D展示:** 将您的产品以交互式3D模型的形式呈现在网页上。
|
||||
* **数据可视化:** 构建复杂的 3D 数据可视化大屏,让数据生动直观。
|
||||
* **虚拟展厅/数字孪生:** 为您的业务打造沉浸式的在线虚拟空间。
|
||||
* **3D场景与游戏开发:** 基于 Web 技术开发轻量级的 3D 互动场景或小游戏。
|
||||
|
||||
* **Web 开发外包:**
|
||||
* **复杂前端页面开发:** 擅长使用 `Vue/React` 等现代框架构建高性能、高交互性的 Web 应用。
|
||||
* **全栈项目开发:** 提供从前端到后端的整套解决方案。
|
||||
|
||||
* **定制化开发与技术咨询:**
|
||||
* 基于我们的开源编辑器进行二次开发,为您量身定制专属功能。
|
||||
* 提供 `Web3D` 相关的技术咨询、方案设计和性能优化服务。
|
||||
|
||||
* **更多的合作可能性?**
|
||||
* 专业团队,为您提供所需。
|
||||
|
||||
## 为什么选择我们?
|
||||
|
||||
* **核心团队,技术保障:** 您将直接与开源项目的核心开发者沟通,我们对 ==Web3D 技术/ Web前后端== 有深入的理解和丰富的实战经验。
|
||||
* **开源基础,降本增效:** 基于我们成熟的开源编辑器/其他产品,可以为您快速搭建项目原型,显著缩短开发周期,降低开发成本。
|
||||
* **代码质量,值得信赖:** 开源意味着我们的代码经过了社区的广泛检验,我们始终坚持高标准的编码规范和交付质量。
|
||||
* **专注高效,沟通直接:** 我们是纯粹的技术团队,沟通直接高效,致力于用最合适的技术方案解决您的实际问题。
|
||||
|
||||
## 联系方式
|
||||
|
||||
如果您有项目需求或合作意向,欢迎添加我的微信进行深入沟通。请在好友申请中备注“**商务合作**”或“**您的公司/项目名**”,以便我能快速通过并了解您的需求。
|
||||
|
||||
<div style="display:flex;justify-content: center;align-items: center;flex-direction: column">
|
||||
|
||||
| 商务微信 |
|
||||
|:--------------------------------------------------------------:|
|
||||
| {width="300" height="300"} |
|
||||
|
||||
微信号:**mahaibing130802**
|
||||
|
||||
</div>
|
||||
|
||||
我们期待通过精湛的技术,助力您的业务在==数字化浪潮==中脱颖而出。
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 动画编辑器
|
||||
createTime: 2025/03/31 19:50:56
|
||||
permalink: /guide/5s7acuj0/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 日志
|
||||
createTime: 2025/03/31 20:03:00
|
||||
permalink: /guide/0q1bxrub/
|
||||
---
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
title: 资源中心
|
||||
createTime: 2025/03/31 19:51:33
|
||||
permalink: /guide/dju4ekca/
|
||||
---
|
||||
|
||||
::: demo-wrapper img no-padding
|
||||
<ImageCard
|
||||
image="/images/manual/editor/extras/resource.png"
|
||||
title="资源中心"
|
||||
author="ErSan"
|
||||
date="2025/04/17"
|
||||
/>
|
||||
:::
|
||||
|
||||
## 简要说明
|
||||
在扩展栏左上角下拉菜单中可将扩展面板切换到资源中心模块。<br />
|
||||
资源共分为==模型、材质、粒子、广告牌、Html面板、灯光、相机==。<br />
|
||||
编辑器已内置大多通用资源,也可在扩展栏右上角切换资源来源:==内置资源/公共资源==。
|
||||
|
||||
**主要亮点:**
|
||||
- **资源分类清晰**:支持多种资源类型,方便用户快速查找和使用。
|
||||
- **资源来源灵活**:可切换内置资源和公共资源,满足不同场景需求。
|
||||
- **高效管理**:支持资源的快速预览、搜索和分类管理。
|
||||
- **扩展性强**:用户可自定义资源并上传到公共资源库。
|
||||
|
||||
## 功能说明
|
||||
- **资源搜索**:按名称模糊搜索已选择分类下的资源。
|
||||
- **模型**:内置多种类型的模型,用户可快速预览模型并拖拽到场景中使用。
|
||||
- **材质**:提供丰富的材质库,用户可实时预览材质效果并应用至模型。
|
||||
- **粒子**:内置多种粒子效果模板,支持参数调整和自定义粒子效果创建。
|
||||
- **广告牌**:支持图片和文字广告牌的快速创建,适用于场景标注和装饰。
|
||||
- **Html面板**:允许嵌入自定义HTML内容,支持动态交互和样式调整。
|
||||
- **灯光**:提供多种灯光类型(如点光源、聚光灯等),支持实时调整光照参数。
|
||||
- **相机**:内置透视相机与正交相机,满足不同场景需求。
|
||||
|
||||
### 资源搜索
|
||||
搜索框位于扩展栏顶部中间。
|
||||
输入搜索内容,将根据当前所选取资源类型进行模糊查询。
|
||||
|
||||
### 模型
|
||||
如本页首图,内置了多种类型的模型,用户可通过==拖拽/双击==方式将模型添加到场景中。
|
||||
- ==拖拽==:模型将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:模型将放置在场景中心
|
||||
|
||||
### 材质
|
||||
内置了多类型的PBR材质、Shader材质,用户可通过==拖拽/双击==方式将材质应用到模型上; <br />
|
||||
成功应用的材质可在 右侧边栏-[材质](/guide/l1df4723/) 进行参数配置及修改。
|
||||
- ==右键==:预览材质
|
||||
- ==拖拽==:材质将应用至鼠标放开位置选取到的模型上
|
||||
- ==双击==:材质将应用至所选取的模型上
|
||||
|
||||
**注意**:材质只能应用至Mesh节点,不能应用于Group、广告牌、粒子、Html面板等节点。即材质只能应用于本身就包含材质属性的模型节点。
|
||||
|
||||
|
||||
### 粒子
|
||||
内置火焰、烟雾、萤火虫等常见粒子效果模板,用户可通过==拖拽/双击==方式将粒子添加到场景中; <br />
|
||||
成功添加的粒子可在 右侧边栏-[粒子](/guide/siz46vj0/) 调整粒子发射器参数及粒子行为。
|
||||
- ==拖拽==:粒子将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:粒子将放置在场景中心
|
||||
|
||||
|
||||
### 广告牌
|
||||
内置图标、文本广告牌,用户可通过==拖拽/双击==方式将广告牌添加到场景中; <br />
|
||||
成功添加的广告牌可在 右侧边栏-[广告牌](/guide/18al65zg/) 进行参数配置及修改。
|
||||
- ==拖拽==:广告牌将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:广告牌将放置在场景中心
|
||||
|
||||
### Html面板
|
||||
内置多个Html面板模板,用户可通过==拖拽/双击==方式将Html面板添加到场景中; <br />
|
||||
该功能允许用户在场景中嵌入HTML内容,如视频播放器、交互式表单、数据图表等,支持动态更新; <br />
|
||||
成功添加的Html面板可在 右侧边栏-[Html面板](/guide/kk5cv2ij/) 进行参数配置及内容修改。
|
||||
- ==拖拽==:Html面板将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:Html面板将放置在场景中心
|
||||
|
||||
|
||||
### 灯光
|
||||
内置==环境光、平行光、半球光、点光源、聚光灯==五种灯光类型,用户可通过==拖拽/双击==方式将灯光添加到场景中; <br />
|
||||
成功添加的灯光(选中后)可在 右侧边栏-[对象](/guide/2xlh6nrf/) 进行参数配置及修改。
|
||||
- ==拖拽==:灯光将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:灯光将放置在场景中心
|
||||
|
||||
### 相机
|
||||
内置==透视相机、正交相机==,用户可通过==拖拽/双击==方式将相机添加到场景中; <br />
|
||||
相机添加后可在[3D视口](/guide/jkg3yahd/)左上角进行主相机切换;<br />
|
||||
成功添加的相机(选中后)可在 右侧边栏-[对象](/guide/2xlh6nrf/) 进行参数配置及修改。
|
||||
- ==拖拽==:相机将放置在鼠标放开的屏幕位置
|
||||
- ==双击==:相机将放置在场景中心
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
title: BIM轻量化
|
||||
createTime: 2025/03/31 19:48:15
|
||||
permalink: /guide/rf1xgf4z/
|
||||
---
|
||||
|
||||
<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>
|
||||
|
||||
## 简要说明
|
||||
通过编辑器的BIM轻量化功能,您可以将复杂的BIM工程文件(如`.rvt`)转换为轻量化的`.glTF`文件。
|
||||
转换过程中保留了BIM构件的属性信息,同时对模型进行了压缩优化,方便在Web端进行高效解析与展示。
|
||||
|
||||
**主要亮点:**
|
||||
- 支持BIM文件的轻量化转换,优化模型大小。
|
||||
- 保留构件属性,便于后续操作与分析。
|
||||
- 界面设计与[CAD解析预览](/guide/u1631nwk/)类似,操作直观易用。
|
||||
|
||||
## 功能说明
|
||||
- **模型列表**:展示用户上传转换的所有BIM模型。
|
||||
- **上传模型**:点击顶部==历史记录==右侧的==上传按钮==,会打开模型上传界面。
|
||||
- **历史记录**:点击顶部==历史记录==按钮,会弹出历史上传记录列表。
|
||||
|
||||
### 模型列表
|
||||
- **功能描述**:展示用户上传并转换成功的所有BIM模型。
|
||||
- **操作方式**:
|
||||
如本页面首图,列表以网格形式展示;
|
||||
从列表中直接==拖动==相应模型到中间的三维视口 或 ==双击==该模型,都可加载并渲染对应模型。
|
||||
|
||||
### 上传模型
|
||||
<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>
|
||||
|
||||
- **支持格式**:`.rvt、.rfa`
|
||||
- **转换方式**:
|
||||
- 文件会在上传后通过WebSocket发起轻量化转换请求。
|
||||
- 转换结果通过WebSocket消息返回,并加载渲染展示。
|
||||
- **转换配置**:
|
||||
- 极致轻量化:模型会在转换过程中执行==网格优化、材质贴图压缩并转换格式为WebP、网格实例化、网格合并==等模型优化操作,以确保输出的BIM轻量化模型是最小体积及最小渲染损耗的glTF模型。过程中可能执行的具体优化项可参考[glTF处理器](/guide/plugin/builtin/jo87cfk0/)章节;
|
||||
- 导出属性:生成的glTF模型中是否包含构件属性;
|
||||
- 转换视图:一个BIM文件中可能会包含多个3D视图,如果用户有确切的转换视图目标,可选择`按名称`并输入视图名称以转换;否则将自动以`默认3D视图`为目标转换;
|
||||
-视觉样式:此设置影响最终输出的模型材质。`着色`模式基本不包含任何材质贴图,以纯色材质方式输出;`真实`模式会包含用户建模时的材质贴图,输出材质更真实;
|
||||
- 坐标参考:一般情况下,一个BIM工程模型会由多工程师完成,便会存在多个单体BIM文件。此设置会决定最终输出模型与笛卡尔坐标系原点的相对位置信息。关于==原点、项目基点、测量点==的详细说明,可以参考这篇文章:[详解Revit坐标系](https://zhuanlan.zhihu.com/p/220113797)
|
||||
|
||||
### 历史记录
|
||||
::: demo-wrapper img no-padding
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/bimHistory.png"
|
||||
title="历史记录"
|
||||
author="ErSan"
|
||||
date="2025/04/15"
|
||||
/>
|
||||
:::
|
||||
|
||||
- **功能描述**:展示用户之前上传的所有BIM模型记录,方便快速查找和重新加载。
|
||||
- **操作方式**:点击顶部==历史记录==按钮,弹出历史上传记录列表。
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: CAD解析预览
|
||||
createTime: 2025/03/31 19:49:44
|
||||
permalink: /guide/u1631nwk/
|
||||
---
|
||||
|
||||
<div style="display:flex;justify-content:center;">
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/cad.png"
|
||||
title="CAD"
|
||||
description="编辑器支持用户上传CAD图纸(.dwg、.dxf)进行解析预览"
|
||||
width="300"
|
||||
author="ErSan"
|
||||
date="2025/04/15"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## 简要说明
|
||||
通过编辑器的CAD解析预览功能,您可以轻松上传并查看多种格式的CAD图纸。<br />
|
||||
无论是`.dwg`还是`.dxf`,都能快速解析并在三维视口中直观展示。<br />
|
||||
这一功能不仅提升了图纸管理的效率,还为三维设计和协作提供了极大的便利。<br />
|
||||
|
||||
**主要亮点:**
|
||||
- 支持多种图纸格式,满足不同需求。
|
||||
- 即时解析与预览,操作简单高效。
|
||||
- 历史记录功能,方便快速查找和重新加载。
|
||||
|
||||
让您的设计流程更加流畅,体验前所未有的便捷与高效!
|
||||
|
||||
## 功能说明
|
||||
- **图纸列表**:展示用户上传并解析成功的所有图纸。
|
||||
- **上传图纸**:点击顶部==历史记录==右侧的==上传按钮==,会打开图纸上传界面。
|
||||
- **历史记录**:点击顶部==历史记录==按钮,会弹出历史上传记录列表。
|
||||
|
||||
### 图纸列表
|
||||
- **功能描述**:展示用户上传并解析成功的所有图纸。
|
||||
- **操作方式**:
|
||||
如本页面首图,列表以网格形式展示;
|
||||
从列表中直接==拖动==相应图纸到中间的三维视口 或 ==双击==该图纸,都可加载并渲染对应图纸。
|
||||
|
||||
### 上传图纸
|
||||
::: demo-wrapper img no-padding
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/cadUpload.png"
|
||||
title="上传图纸"
|
||||
author="ErSan"
|
||||
date="2025/04/15"
|
||||
/>
|
||||
:::
|
||||
|
||||
- **支持格式**:`.dwg、.dxf、.png、.jpg(jpeg)`
|
||||
- **解析方式**:
|
||||
- `.dwg`格式图纸由于无法在前端直接解析,会在上传后通过WebSocket发起图纸解析请求。
|
||||
- 解析结果通过WebSocket消息返回,并加载渲染展示。
|
||||
- 如果`.dwg`图纸中包含缩略图,会自动解析为封面图,在`图纸列表`中展示。
|
||||
|
||||
### 历史记录
|
||||
::: demo-wrapper img no-padding
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/cadHistory.png"
|
||||
title="历史记录"
|
||||
author="ErSan"
|
||||
date="2025/04/15"
|
||||
/>
|
||||
:::
|
||||
|
||||
- **功能描述**:展示用户之前上传的所有图纸记录,方便快速查找和重新加载。
|
||||
- **操作方式**:点击顶部==历史记录==按钮,弹出历史上传记录列表。
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: 场景树
|
||||
createTime: 2025/03/31 19:58:06
|
||||
permalink: /guide/rzqb0h0l/
|
||||
---
|
||||
|
||||
<CardGrid>
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/sceneTree.png"
|
||||
title="场景树"
|
||||
description="场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象"
|
||||
author="ErSan"
|
||||
date="2025/04/14"
|
||||
/>
|
||||
<ImageCard
|
||||
image="/images/manual/editor/leftSidebar/sceneTreeContextMenu.png"
|
||||
title="场景节点右键菜单"
|
||||
description="聚焦、删除、拷贝"
|
||||
author="ErSan"
|
||||
date="2025/04/14"
|
||||
/>
|
||||
</CardGrid>
|
||||
|
||||
|
||||
## 简要说明
|
||||
场景树是 Astral3D 编辑器中用于管理场景中所有对象的工具。它以树状结构展示场景中的层级关系,便于用户快速定位和操作对象。
|
||||
|
||||
## 功能说明
|
||||
- **节点搜索**:顶部搜索栏用于快速查找节点,模糊查询到的节点父级会自动展开,并在改节点下添加下划线。
|
||||
- **层级管理**:通过拖拽操作,可以调整对象的父子关系。
|
||||
- **对象选择**:点击场景树中的对象名称,可以在场景中选中对应的对象(不会自动聚焦)。
|
||||
- **聚焦对象**:右键菜单中提供聚焦选项,用以在视口中定位模型(更推荐使用快捷键,默认是`F`)。
|
||||
- **删除对象**:右键菜单中提供删除选项,方便移除不需要的对象(更推荐使用快捷键,默认是`Del`)。
|
||||
- **拷贝对象**:右键菜单中提供拷贝选项,方便快速复制对象(同[顶栏](/guide/f7smai4w/)基础操作区中的拷贝)。
|
||||
<!-- - **对象隐藏/显示**:通过点击对象名称旁的图标,可以快速隐藏或显示对象。
|
||||
- **重命名**:双击对象名称可以对其进行重命名。 -->
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: Html面板
|
||||
createTime: 2025/04/17 17:03:07
|
||||
permalink: /guide/kk5cv2ij/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 几何
|
||||
createTime: 2025/03/31 20:06:40
|
||||
permalink: /guide/nct00cif/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 动画
|
||||
createTime: 2025/03/31 20:07:33
|
||||
permalink: /guide/g3kxptm0/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 历史记录
|
||||
createTime: 2025/03/31 20:05:25
|
||||
permalink: /guide/ae7ufigr/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 后期处理
|
||||
createTime: 2025/03/31 20:04:44
|
||||
permalink: /guide/l8hd921o/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 场景图纸
|
||||
createTime: 2025/03/31 20:05:40
|
||||
permalink: /guide/ta6draim/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 场景配置
|
||||
createTime: 2025/03/31 20:04:17
|
||||
permalink: /guide/pnmbue0k/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 天气
|
||||
createTime: 2025/03/31 20:05:08
|
||||
permalink: /guide/fn9xwbkf/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 对象
|
||||
createTime: 2025/03/31 20:06:07
|
||||
permalink: /guide/2xlh6nrf/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 广告牌
|
||||
createTime: 2025/04/17 17:11:18
|
||||
permalink: /guide/18al65zg/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 材质
|
||||
createTime: 2025/03/31 20:07:10
|
||||
permalink: /guide/l1df4723/
|
||||
---
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: 渲染器配置
|
||||
createTime: 2025/03/31 20:04:34
|
||||
permalink: /guide/crvssx6j/
|
||||
---
|
||||