Shadow Editor Pro 附录
本文档详细介绍了Shadow Editor Pro的各项参考信息。主要内容包括:支持超过40种3D模型格式,其中GLTF/GLB为WebGL标准格式,推荐优先使用;支持多种贴图格式(如JPEG、PNG、HDR等)并提供了针对不同用途的格式选择建议;列出了完整的快捷键列表,涵盖文件操作、编辑、视图控制、工具切换等常用功能;提供了脚本API参考,包括全局对象、生命周期函数、事件处理及常用代码示例,方便用户通过JavaScript进行扩展和交互。此外,文档还包含了系统要求、更新日志和术语表等辅助信息。
本章提供详细的参考信息,包括支持的文件格式、快捷键、脚本API等。
支持的模型格式
Shadow Editor Pro 支持 40+ 种 3D 模型格式,以下按字母顺序列出:
| 格式名称 | 扩展名 | 说明 | 推荐度 |
|---|---|---|---|
| 3D Studio | .3ds |
经典 3D 模型格式,旧项目常用 | ⭐⭐ |
| 3D Manufacturing | .3mf |
3D 打印格式,微软提出 | ⭐⭐ |
| Additive Manufacturing | .amf |
增材制造文件格式 | ⭐ |
| Assimp | .assimp |
开放资产导入库格式 | ⭐ |
| Away3D | .awd |
Away3D 引擎格式 | ⭐ |
| Babylon.js | .babylon |
Babylon.js 引擎格式 | ⭐⭐ |
| Babylon Mesh Data | .babylonmeshdata |
Babylon.js 网格数据 | ⭐ |
| BVH Animation | .bvh |
人体动作捕捉格式 | ⭐⭐⭐ |
| Compressed Triangle Mesh | .ctm |
压缩三角网格格式 | ⭐ |
| Collada | .dae |
数字资产交换格式,Sony 格式 | ⭐⭐⭐ |
| Draco | .drc |
Google Draco 压缩格式 | ⭐⭐⭐ |
| Autodesk FBX | .fbx |
Autodesk Filmbox 格式,支持动画 | ⭐⭐⭐⭐ |
| G-Code | .gcode |
3D 打印机指令格式 | ⭐ |
| GLTF | .gltf |
Khronos GL Transmission Format,WebGL 标准 | ⭐⭐⭐⭐⭐ |
| GLTF Binary | .glb |
GLTF 二进制格式,单文件 | ⭐⭐⭐⭐⭐ |
| Three.js JSON | .js, .json |
Three.js 原生格式 | ⭐⭐⭐⭐ |
| Google Earth KMZ | .kmz |
Google Earth 压缩格式 | ⭐⭐ |
| Quake MD2 | .md2 |
雷神之锤 2 游戏格式 | ⭐⭐ |
| Medical Image | .nrrd |
医学图像格式 | ⭐ |
| Wavefront OBJ | .obj |
通用 3D 模型格式,最常用 | ⭐⭐⭐⭐ |
| Point Cloud Data | .pcd |
点云数据格式 | ⭐⭐ |
| Protein Data Bank | .pdb |
三维分子结构格式 | ⭐ |
| PlayCanvas | .playcanvas |
PlayCanvas 引擎格式 | ⭐⭐ |
| Stanford PLY | .ply |
斯坦福大学 3D 格式 | ⭐⭐⭐ |
| MikuMikuDance PMD | .pmd |
MMD 模型格式(旧版) | ⭐⭐⭐ |
| MikuMikuDance PMX | .pmx |
MMD 模型格式(新版) | ⭐⭐⭐⭐ |
| PRWM | .prwm |
Progressive Raster Wave Mesh | ⭐ |
| Sea3D | .sea3d |
Sea3D 引擎格式 | ⭐ |
| 3D Systems STL | .stl |
3D 打印常用格式 | ⭐⭐⭐⭐ |
| VRM | .vrm |
虚拟现实模型格式 | ⭐⭐⭐⭐ |
| VRML | .vrml, .wrl |
虚拟现实建模语言 | ⭐⭐ |
| Visualization Toolkit | .vtk |
VTK 三维格式 | ⭐⭐ |
| DirectX X | .x |
微软 3D 格式 | ⭐⭐ |
推荐使用格式
最佳选择:GLTF/GLB
- ✅ WebGL 标准,兼容性最好
- ✅ 文件小,加载快
- ✅ 支持材质、动画、骨骼
- ✅ GLB 是单文件格式,不会丢失资源
- ✅ 支持 Draco 压缩
其他推荐:
- FBX: 支持动画,Autodesk 生态
- OBJ: 通用性强,简单场景
- GLB: 单文件 GLTF,推荐使用
格式选择建议
| 使用场景 | 推荐格式 | 原因 |
|---|---|---|
| WebGL/WebGPU | GLTF/GLB | 标准,性能好 |
| 3D 打印 | STL/3MF | 专为打印设计 |
| 动画制作 | FBX/GLTF | 支持骨骼动画 |
| 3D 漫游 | FBX/GLTF | 支持复杂模型 |
| 简单模型 | OBJ | 通用,简单 |
| MMD 角色 | PMX | MMD 专用 |
| 压缩要求高 | GLB+Draco | 压缩率高 |
支持的贴图格式
图片贴图
| 格式 | 扩展名 | 特点 | 推荐度 |
|---|---|---|---|
| JPEG | .jpg, .jpeg |
有损压缩,文件小 | ⭐⭐⭐⭐⭐ |
| PNG | .png |
无损压缩,支持透明 | ⭐⭐⭐⭐⭐ |
| GIF | .gif |
支持动画,256色 | ⭐⭐⭐ |
| WebP | .webp |
新格式,压缩率高 | ⭐⭐⭐⭐ |
| BMP | .bmp |
无压缩,文件大 | ⭐⭐ |
HDR 贴图
| 格式 | 扩展名 | 特点 | 推荐度 |
|---|---|---|---|
| Radiance HDR | .hdr |
高动态范围图像 | ⭐⭐⭐⭐⭐ |
| OpenEXR | .exr |
电影工业标准 | ⭐⭐⭐⭐ |
视频贴图
| 格式 | 扩展名 | 特点 | 推荐度 |
|---|---|---|---|
| MP4 | .mp4 |
通用,压缩率高 | ⭐⭐⭐⭐⭐ |
| WebM | .webm |
开源,免版税 | ⭐⭐⭐⭐ |
天空盒贴图
天空盒需要 6 张图片,文件名命名规则:
| 方向 | 文件名后缀 | 说明 |
|---|---|---|
| X 轴正向 | _px 或 _right |
右面 |
| X 轴负向 | _nx 或 _left |
左面 |
| Y 轴正向 | _py 或 _top |
上面 |
| Y 轴负向 | _ny 或 _bottom |
下面 |
| Z 轴正向 | _pz 或 _front |
前面 |
| Z 轴负向 | _nz 或 _back |
后面 |
示例:skybox_px.jpg, skybox_nx.jpg, skybox_py.jpg, …
贴图选择建议
| 用途 | 推荐格式 | 原因 |
|---|---|---|
| 漫反射贴图 | JPG | 文件小,质量好 |
| 法线贴图 | PNG | 无损,精度高 |
| 透明贴图 | PNG | 支持 alpha 通道 |
| 环境光遮蔽 | PNG | 灰度图,精度重要 |
| 发光贴图 | JPG | 颜色丰富,文件小 |
| 光照贴图 | JPG | 不需要透明 |
| 天空盒 | JPG | 文件小,质量好 |
| HDR 贴图 | HDR | 高动态范围 |
| 视频贴图 | MP4 | 兼容性好,压缩率高 |
快捷键列表
文件操作
| 快捷键 | 功能 |
|---|---|
Ctrl + N |
新建场景 |
Ctrl + O |
打开场景 |
Ctrl + S |
保存场景 |
Ctrl + Shift + S |
场景另存为 |
Ctrl + P |
截图 |
编辑操作
| 快捷键 | 功能 |
|---|---|
Ctrl + Z |
撤销 |
Ctrl + Y |
重做 |
Ctrl + Shift + Z |
重做(备用) |
Ctrl + C |
复制 |
Ctrl + V |
粘贴 |
Ctrl + X |
剪切 |
Ctrl + D |
复制选中的对象 |
Delete |
删除选中对象 |
Backspace |
删除选中对象 |
选择操作
| 快捷键 | 功能 |
|---|---|
Ctrl + A |
全选 |
Ctrl + D |
取消选择 |
Ctrl + I |
反选 |
Shift + 点击 |
多选 |
Esc |
取消选择 |
视图操作
| 快捷键 | 功能 |
|---|---|
F |
聚焦到选中对象 |
Home |
重置视角 |
F1 |
透视图 |
F2 |
正视图 |
F3 |
顶视图 |
F4 |
侧视图 |
F5 |
播放场景 |
Esc |
停止播放 |
Tab |
切换视口 |
工具切换
| 快捷键 | 功能 |
|---|---|
Q |
选择工具 |
W |
移动工具 |
E |
旋转工具 |
R |
缩放工具 |
T |
选择工具(备用) |
窗口和面板
| 快捷键 | 功能 |
|---|---|
Ctrl + 1 |
显示/隐藏层级面板 |
Ctrl + 2 |
显示/隐藏属性面板 |
Ctrl + 3 |
显示/隐藏资源面板 |
Ctrl + 4 |
显示/隐藏脚本面板 |
Ctrl + 5 |
显示/隐藏历史面板 |
Space |
隐藏/显示所有面板 |
开发者工具
| 快捷键 | 功能 |
|---|---|
F12 |
打开开发者工具 |
Ctrl + Shift + I |
打开开发者工具 |
Ctrl + Shift + J |
打开控制台 |
Ctrl + Shift + C |
元素检查器 |
其他快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + F |
搜索对象 |
Ctrl + G |
组合选中的对象 |
Ctrl + Shift + G |
取消组合 |
Ctrl + Alt + F |
查找并替换 |
Ctrl + L |
显示/隐藏网格 |
Ctrl + H |
显示/隐藏帮助器 |
脚本 API 参考
全局对象
app
播放器应用实例,提供播放器相关功能。
app
属性:
camera: 相机对象scene: 场景对象renderer: 渲染器对象controls: 控制器对象
THREE
Three.js 全局对象,提供所有 Three.js 功能。
THREE
常用类:
THREE.Scene: 场景类THREE.Mesh: 网格类THREE.BoxGeometry: 盒子几何体THREE.MeshStandardMaterial: 标准材质
scene
当前场景对象。
scene
常用方法:
add(object): 添加对象到场景remove(object): 从场景移除对象getObjectByName(name): 通过名称获取对象traverse(callback): 遍历场景所有对象
camera
当前相机对象。
camera
常用属性:
position: 相机位置rotation: 相机旋转fov: 视野角度
renderer
当前渲染器对象。
renderer
常用方法:
render(scene, camera): 渲染场景setSize(width, height): 设置渲染尺寸
脚本生命周期函数
init()
初始化函数,场景加载时调用一次。
function init() {
console.log('场景初始化')
}
用途:
- 初始化变量
- 创建对象
- 设置事件监听
update(delta)
每帧更新函数,在每一帧渲染前调用。
function update(delta) {
// delta: 帧间隔时间(秒)
console.log('帧时间:', delta)
}
用途:
- 更新动画
- 移动对象
- 检测碰撞
- 更新UI
resize()
窗口大小改变时调用。
function resize() {
// 更新相机比例
camera.aspect = window.innerWidth / window.innerHeight
camera.updateProjectionMatrix()
renderer.setSize(window.innerWidth, window.innerHeight)
}
dispose()
场景销毁时调用一次,用于清理资源。
function dispose() {
console.log('场景销毁')
// 清理资源
if (myMesh) {
myMesh.geometry.dispose()
myMesh.material.dispose()
}
}
事件处理函数
onClick(event)
鼠标点击事件。
function onClick(event) {
console.log('点击对象:', event.object)
console.log('点击位置:', event.point)
}
event 对象属性:
object: 被点击的对象point: 世界坐标中的点击点distance: 相机到点击点的距离
onMouseDown(event)
鼠标按下事件。
function onMouseDown(event) {
console.log('鼠标按下:', event.button)
}
event 对象属性:
button: 鼠标按钮(0=左键, 1=中键, 2=右键)altKey: Alt键是否按下ctrlKey: Ctrl键是否按下shiftKey: Shift键是否按下
onMouseMove(event)
鼠标移动事件。
function onMouseMove(event) {
console.log('鼠标位置:', event.point)
}
onMouseUp(event)
鼠标松开事件。
function onMouseUp(event) {
console.log('鼠标松开')
}
常用代码示例
创建并添加对象
function init() {
// 创建几何体
const geometry = new THREE.BoxGeometry(1, 1, 1)
// 创建材质
const material = new THREE.MeshStandardMaterial({
color: 0x00ff00
})
// 创建网格
const cube = new THREE.Mesh(geometry, material)
cube.name = '正方体'
cube.position.set(0, 1, 0)
// 添加到场景
scene.add(cube)
}
旋转对象
function update(delta) {
const cube = scene.getObjectByName('正方体')
if (cube) {
cube.rotation.x += delta
cube.rotation.y += delta * 0.5
}
}
移动对象
function update(delta) {
const speed = 5 // 移动速度
const cube = scene.getObjectByName('正方体')
if (cube) {
cube.position.x += delta * speed
}
}
改变颜色
function onClick(event) {
if (event.object.material) {
// 改变为红色
event.object.material.color.setHex(0xff0000)
}
}
检测碰撞
function update(delta) {
const box1 = scene.getObjectByName('盒子1')
const box2 = scene.getObjectByName('盒子2')
if (box1 && box2) {
// 简单的距离检测
const distance = box1.position.distanceTo(box2.position)
if (distance < 2) {
console.log('碰撞!')
}
}
}
键盘控制
function init() {
document.addEventListener('keydown', onKeyDown)
}
function onKeyDown(event) {
const cube = scene.getObjectByName('正方体')
if (!cube) return
const speed = 0.1
switch (event.key) {
case 'ArrowUp':
cube.position.z -= speed
break
case 'ArrowDown':
cube.position.z += speed
break
case 'ArrowLeft':
cube.position.x -= speed
break
case 'ArrowRight':
cube.position.x += speed
break
}
}
创建动画
let animationTime = 0
function update(delta) {
animationTime += delta
const cube = scene.getObjectByName('正方体')
if (cube) {
// 上下浮动
cube.position.y = 1 + Math.sin(animationTime * 2) * 0.5
}
}
加载外部模型
function init() {
const loader = new THREE.GLTFLoader()
loader.load(
'/models/car.glb',
function (gltf) {
const model = gltf.scene
model.name = '汽车'
scene.add(model)
},
function (xhr) {
console.log('加载进度:', (xhr.loaded / xhr.total) * 100 + '%')
},
function (error) {
console.error('加载失败:', error)
}
)
}
Three.js 常用类参考
Vector3(三维向量)
const vector = new THREE.Vector3(1, 2, 3)
// 常用方法
vector.length() // 计算长度
vector.distanceTo(v) // 计算到另一个向量的距离
vector.normalize() // 归一化
vector.add(v) // 向量加法
vector.sub(v) // 向量减法
vector.multiplyScalar(scalar) // 向量乘标量
Euler(欧拉角)
const euler = new THREE.Euler(0, 0, 0, 'XYZ')
// 常用方法
euler.set(x, y, z, order) // 设置欧拉角
Quaternion(四元数)
const quaternion = new THREE.Quaternion()
// 常用方法
quaternion.setFromEuler(euler) // 从欧拉角设置
quaternion.setFromAxisAngle(axis, angle) // 从轴和角度设置
Color(颜色)
const color = new THREE.Color(0xff0000)
// 常用方法
color.setHex(0x00ff00) // 设置十六进制颜色
color.setRGB(1, 0, 0) // 设置RGB值
color.set('red') // 设置CSS颜色
color.getHex() // 获取十六进制值
技术规格
系统要求
- 操作系统: Windows 10/11, Linux, macOS
- 处理器: Intel Core i5 或同等性能以上
- 内存: 最少 8GB,推荐 16GB
- 显卡: 支持 OpenGL 3.3 及以上
- 存储空间: 最少 2GB 可用空间
- 显示器: 1920x1080 或更高分辨率
支持的浏览器
- Chrome 90+
- Firefox 88+
- Edge 90+
- Safari 14+
支持的 Three.js 版本
- Three.js r166
支持的 WebGL 版本
- WebGL 1.0
- WebGL 2.0
- WebGPU(实验性)
更新日志
v0.0.1 (2024-10-19)
新增功能
- 🎉 首个商业版本发布
- ✨ 完整的3D场景编辑功能
- ✨ 支持 40+ 种模型格式
- ✨ 支持 20+ 种材质类型
- ✨ 完整的资源管理系统
- ✨ 场景历史版本管理
- ✨ 撤销/重做功能
- ✨ Monaco 代码编辑器
- ✨ JavaScript 脚本系统
- ✨ 补间动画支持
- ✨ 骨骼动画支持
- ✨ MMD 动画支持
- ✨ 后期处理系统
- ✨ 物理引擎集成
- ✨ 数据可视化功能
- ✨ VR 支持实验
- ✨ 场景发布功能
已知问题
- WebGPU 功能仍在开发中
- 某些模型格式可能不完全支持
- 大型场景性能可能需要优化
术语表
- 3D: 三维
- API: 应用程序接口
- CDN: 内容分发网络
- CSS: 层叠样式表
- FPS: 每秒帧数
- GLTF: GL Transmission Format
- GUI: 图形用户界面
- HTML: 超文本标记语言
- JSON: JavaScript 对象表示法
- LOD: 细节级别
- MMD: MikuMikuDance
- OBJ: Wavefront Object
- PBR: 基于物理的渲染
- VR: 虚拟现实
- WebGL: Web 图形库
- WYSIWYG: 所见即所得
下一步
本文由人工编写,AI优化,转载请注明原文地址: Shadow Editor Pro 附录
推荐阅读
评论 (0)
发表评论
昵称:加载中...
暂无评论,快来发表第一条评论吧!