174 lines
6.4 KiB
Markdown
174 lines
6.4 KiB
Markdown
# ImportSettings
|
||
|
||
**命名空间**: `XCEngine::Resources`
|
||
|
||
**类型**: `class` (abstract)
|
||
|
||
**描述**: 资源导入设置抽象基类,定义资源导入时的配置选项接口。
|
||
|
||
## 概述
|
||
|
||
`ImportSettings` 是所有资源导入设置的抽象基类。它提供了克隆和 JSON 序列化接口,允许不同资源类型定义各自的导入选项。引擎内置了两个具体实现:`TextureImportSettings` 和 `MeshImportSettings`。
|
||
|
||
## 公共方法
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `virtual Core::UniqueRef<ImportSettings> Clone() const = 0` | 克隆一份设置 |
|
||
| `virtual bool LoadFromJSON(const Containers::String& json)` | 从 JSON 加载设置(当前返回 false - stub) |
|
||
| `virtual Containers::String SaveToJSON() const` | 保存为 JSON 字符串(当前返回空字符串 - stub) |
|
||
|
||
---
|
||
|
||
## TextureImportSettings
|
||
|
||
纹理导入设置,继承自 `ImportSettings`。
|
||
|
||
**头文件**: `XCEngine/Resources/TextureImportSettings.h`
|
||
|
||
## 实现说明
|
||
|
||
**注意**: `LoadFromJSON()` 和 `SaveToJSON()` 当前为 stub 实现。
|
||
|
||
### 枚举类型
|
||
|
||
#### MipmapFilter
|
||
|
||
| 值 | 描述 |
|
||
|----|------|
|
||
| `Box` | Box 滤波器 |
|
||
| `Kaiser` | Kaiser 滤波器 |
|
||
|
||
#### CompressionQuality
|
||
|
||
| 值 | 描述 |
|
||
|----|------|
|
||
| `Low` | 低质量 |
|
||
| `Medium` | 中等质量 |
|
||
| `High` | 高质量 |
|
||
| `Ultra` | 超高质量 |
|
||
|
||
### 公共方法
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `void SetTextureType(TextureType type)` | 设置纹理类型 |
|
||
| `TextureType GetTextureType() const` | 获取纹理类型 |
|
||
| `void SetTargetFormat(TextureFormat format)` | 设置目标格式 |
|
||
| `TextureFormat GetTargetFormat() const` | 获取目标格式 |
|
||
| `void SetGenerateMipmaps(bool generate)` | 设置是否生成 Mipmap |
|
||
| `bool GetGenerateMipmaps() const` | 获取是否生成 Mipmap |
|
||
| `void SetMipmapFilter(MipmapFilter filter)` | 设置 Mipmap 滤波器 |
|
||
| `MipmapFilter GetMipmapFilter() const` | 获取 Mipmap 滤波器 |
|
||
| `void SetMaxAnisotropy(Core::uint32 anisotropy)` | 设置最大各向异性级别 |
|
||
| `Core::uint32 GetMaxAnisotropy() const` | 获取最大各向异性级别 |
|
||
| `void SetSRGB(bool srgb)` | 设置是否 sRGB |
|
||
| `bool GetSRGB() const` | 获取 sRGB 设置 |
|
||
| `void SetFlipVertical(bool flip)` | 设置是否垂直翻转 |
|
||
| `bool GetFlipVertical() const` | 获取垂直翻转设置 |
|
||
| `void SetFlipHorizontal(bool flip)` | 设置是否水平翻转 |
|
||
| `bool GetFlipHorizontal() const` | 获取水平翻转设置 |
|
||
| `void SetBorderColor(const Math::Vector3& color)` | 设置边框颜色 |
|
||
| `const Math::Vector3& GetBorderColor() const` | 获取边框颜色 |
|
||
| `void SetCompressionQuality(CompressionQuality quality)` | 设置压缩质量 |
|
||
| `CompressionQuality GetCompressionQuality() const` | 获取压缩质量 |
|
||
| `void SetUseHardwareCompression(bool use)` | 设置是否使用硬件压缩 |
|
||
| `bool GetUseHardwareCompression() const` | 获取硬件压缩设置 |
|
||
| `void SetMaxSize(Core::uint32 size)` | 设置最大纹理尺寸 |
|
||
| `Core::uint32 GetMaxSize() const` | 获取最大纹理尺寸 |
|
||
| `void SetGenerateNormalMap(bool generate)` | 设置是否生成法线贴图 |
|
||
| `bool GetGenerateNormalMap() const` | 获取法线贴图生成设置 |
|
||
| `void SetNormalMapStrength(float strength)` | 设置法线贴图强度 |
|
||
| `float GetNormalMapStrength() const` | 获取法线贴图强度 |
|
||
|
||
---
|
||
|
||
## MeshImportSettings
|
||
|
||
网格导入设置,继承自 `ImportSettings`。
|
||
|
||
**头文件**: `XCEngine/Resources/MeshImportSettings.h`
|
||
|
||
## 实现说明
|
||
|
||
**注意**: `LoadFromJSON()` 和 `SaveToJSON()` 当前为 stub 实现。
|
||
|
||
### MeshImportFlags
|
||
|
||
| 值 | 描述 |
|
||
|----|------|
|
||
| `None` | 无特殊标志 |
|
||
| `FlipUVs` | 翻转 UV 坐标 |
|
||
| `FlipWindingOrder` | 翻转绕序 |
|
||
| `GenerateNormals` | 生成法线 |
|
||
| `GenerateTangents` | 生成切线 |
|
||
| `OptimizeMesh` | 优化网格 |
|
||
| `ImportSkinning` | 导入骨骼蒙皮 |
|
||
| `ImportAnimations` | 导入动画 |
|
||
| `ImportMaterials` | 导入材质 |
|
||
| `ImportCameras` | 导入相机 |
|
||
| `ImportLights` | 导入灯光 |
|
||
|
||
支持位运算组合(`operator|`、`operator&`、`operator~`)。
|
||
|
||
### 公共方法
|
||
|
||
| 方法 | 描述 |
|
||
|------|------|
|
||
| `void SetImportFlags(MeshImportFlags flags)` | 设置导入标志 |
|
||
| `MeshImportFlags GetImportFlags() const` | 获取导入标志 |
|
||
| `void AddImportFlag(MeshImportFlags flag)` | 添加单个导入标志 |
|
||
| `void RemoveImportFlag(MeshImportFlags flag)` | 移除单个导入标志 |
|
||
| `bool HasImportFlag(MeshImportFlags flag) const` | 检查是否包含某标志 |
|
||
| `void SetScale(float scale)` | 设置缩放 |
|
||
| `float GetScale() const` | 获取缩放 |
|
||
| `void SetOffset(const Math::Vector3& offset)` | 设置偏移 |
|
||
| `const Math::Vector3& GetOffset() const` | 获取偏移 |
|
||
| `void SetAxisConversion(bool convert)` | 设置轴转换 |
|
||
| `bool GetAxisConversion() const` | 获取轴转换设置 |
|
||
| `void SetMergeMeshes(bool merge)` | 设置是否合并网格 |
|
||
| `bool GetMergeMeshes() const` | 获取合并网格设置 |
|
||
| `void SetOptimizeThreshold(float threshold)` | 设置优化阈值 |
|
||
| `float GetOptimizeThreshold() const` | 获取优化阈值 |
|
||
| `void SetImportScale(float scale)` | 设置导入缩放 |
|
||
| `float GetImportScale() const` | 获取导入缩放 |
|
||
| `void SetThreshold(float threshold)` | 设置阈值 |
|
||
| `float GetThreshold() const` | 获取阈值 |
|
||
|
||
## 使用示例
|
||
|
||
```cpp
|
||
#include <XCEngine/Resources/TextureImportSettings.h>
|
||
#include <XCEngine/Resources/MeshImportSettings.h>
|
||
|
||
// 纹理导入设置
|
||
TextureImportSettings texSettings;
|
||
texSettings.SetTextureType(TextureType::Texture2D);
|
||
texSettings.SetGenerateMipmaps(true);
|
||
texSettings.SetSRGB(true);
|
||
texSettings.SetCompressionQuality(CompressionQuality::High);
|
||
texSettings.SetMaxAnisotropy(16);
|
||
|
||
// 加载设置
|
||
texSettings.LoadFromJSON(R"({"sRGB":true,"maxAnisotropy":8})");
|
||
|
||
// 保存设置
|
||
Containers::String json = texSettings.SaveToJSON();
|
||
|
||
// 网格导入设置
|
||
MeshImportSettings meshSettings;
|
||
meshSettings.SetImportFlags(MeshImportFlags::FlipUVs | MeshImportFlags::GenerateNormals);
|
||
meshSettings.SetScale(1.0f);
|
||
meshSettings.SetAxisConversion(true);
|
||
|
||
// 使用设置加载资源
|
||
ResourceHandle<Texture> tex = ResourceManager::Get().Load<Texture>("tex.png", &texSettings);
|
||
ResourceHandle<Mesh> mesh = ResourceManager::Get().Load<Mesh>("model.fbx", &meshSettings);
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [IResourceLoader](../iloader/iloader.md) - 资源加载器
|
||
- [ResourceManager](../resource-manager/resource-manager.md) - 资源管理器
|
||
- [Resources 总览](../resources.md) - 返回模块总览
|