Shadow Editor Pro 附录

2026-01-04 超腾开源 59 次阅读 0 次点赞
本文档详细介绍了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)

发表评论

昵称:加载中...

暂无评论,快来发表第一条评论吧!