格式转换
打破 3D 资产在不同软件与平台间的流通壁垒。支持 GLB、FBX、OBJ、USDZ 等多种行业标准格式的互转。特别针对 Web、移动端 AR 和 3D 打印场景进行了格式兼容性优化。
典型应用场景
- AR 体验适配:一键导出 iOS 原生支持的
usdz格式,实现 AR 快速预览 - 引擎集成:将模型转换为
fbx格式,保留动画与材质信息,无缝对接 Unity 或 Unreal
本页使用的 API 参考 POST /3d_models/conversions
3D 模型传入方式
模型参数同样支持三种传入格式:
- 前置任务结果:将文生模型或图生模型任务返回的
asset_path直接使用,实现无缝串联 - Base64 编码:传入
.glb文件内容的 base64 字符串(不含data:前缀) - 公网 URL:传入可公开访问的
.glb或其他支持格式文件链接
基础示例
bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/conversions' \
-H 'Authorization: Bearer $V2FUN_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"input_model": "models/example.glb",
"output_format": "string"
}'javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/conversions', {
method: 'POST',
headers: {
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input_model": "models/example.glb",
"output_format": "string"
}),
});
const data = await response.json();python
import requests
resp = requests.post(
'https://api.v2fun.ai/api/v1/3d_models/conversions',
headers={
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
json={
"input_model": "models/example.glb",
"output_format": "string"
},
)
print(resp.json())java
import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"models/example.glb\",\"output_format\":\"string\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/conversions"))
.header("Authorization", "Bearer $V2FUN_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());核心用例
主流格式覆盖
支持导出为 obj, fbx, glb, stl, usdz 等,满足全平台分发需求。轮询任务状态至 COMPLETED 后,metadata[].downloads 中包含可直接下载的文件地址。
output_format: obj · ply · stl · fbx · glb · usdz · 3mf
bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/conversions' \
-H 'Authorization: Bearer $V2FUN_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
"output_format": "fbx"
}'javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/conversions', {
method: 'POST',
headers: {
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
"output_format": "fbx"
}),
});
const data = await response.json();python
import requests
resp = requests.post(
'https://api.v2fun.ai/api/v1/3d_models/conversions',
headers={
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
json={
"input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
"output_format": "fbx"
},
)
print(resp.json())java
import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"https://asset.v2fun.ai/upload/retex-input-cat.glb\",\"output_format\":\"fbx\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/conversions"))
.header("Authorization", "Bearer $V2FUN_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());json
{
"task_uuid": "<task_uuid>",
"task_type": "<task_type>",
"model": "<model>",
"status": "<taskstatus>",
"created_at": 0,
"completed_at": 0,
"result": []
}获取任务结果
json
{
"status": "COMPLETED",
"task_uuid": "7bae217c-3029-48c6-b45e-2e013a4b9769",
"metadata": [
{
"model_id": "76cbd40f-b20a-40ea-85fd-c9fdf5ce6ca8",
"downloads": [
{
"asset_path": "models/76cbd40f-b20a-40ea-85fd-c9fdf5ce6ca8.fbx",
"download_url": "https://asset.v2fun.ai/upload/convert-result-cat.fbx"
}
]
}
]
}