165 lines
6.1 KiB
Markdown
165 lines
6.1 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 加载设置 |
|
||
|
|
| `virtual Containers::String SaveToJSON() const` | 保存为 JSON 字符串 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## TextureImportSettings
|
||
|
|
|
||
|
|
纹理导入设置,继承自 `ImportSettings`。
|
||
|
|
|
||
|
|
**头文件**: `XCEngine/Resources/TextureImportSettings.h`
|
||
|
|
|
||
|
|
### 枚举类型
|
||
|
|
|
||
|
|
#### 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`
|
||
|
|
|
||
|
|
### 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(RHI::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](./resources-iloader.md) - 资源加载器
|
||
|
|
- [ResourceManager](./resources-resourcemanager.md) - 资源管理器
|