import { GLTF_APPEARANCE_PNG } from "../test-fixtures/gltf-appearance-fixtures"; import { encodeBinaryFbxFixture, fbxBinaryFixtureProperty as property, type FbxBinaryFixtureNode, } from "./fbx-binary-test-fixture-builder"; export function createBinaryFbxAppearanceFixture(): Uint8Array { const geometry: FbxBinaryFixtureNode = { children: [ { name: "Vertices", properties: [property.float64Array([0, 0, 0, 1, 0, 0, 0, 1, 0])], }, { name: "PolygonVertexIndex", properties: [property.int32Array([0, 1, -3])], }, { children: [ { name: "Version", properties: [property.int32(101)] }, { name: "Name", properties: [property.string("UVChannel_1")] }, { name: "MappingInformationType", properties: [property.string("ByPolygonVertex")], }, { name: "ReferenceInformationType", properties: [property.string("IndexToDirect")], }, { name: "UV", properties: [property.float64Array([0, 0, 1, 0, 0, 1])], }, { name: "UVIndex", properties: [property.int32Array([0, 1, 2])] }, ], name: "LayerElementUV", properties: [property.int32(0)], }, ], name: "Geometry", properties: [ property.int64(1), property.string("Geometry::Painted"), property.string("Mesh"), ], }; const model: FbxBinaryFixtureNode = { name: "Model", properties: [ property.int64(2), property.string("Model::Painted"), property.string("Mesh"), ], }; const material: FbxBinaryFixtureNode = { children: [ { name: "Version", properties: [property.int32(102)] }, { name: "ShadingModel", properties: [property.string("Phong")] }, { name: "MultiLayer", properties: [property.int32(0)] }, { children: [{ name: "P", properties: [ property.string("DiffuseColor"), property.string("Color"), property.string(""), property.string("A"), property.float64(0.2), property.float64(0.3), property.float64(0.4), ], }], name: "Properties70", }, ], name: "Material", properties: [ property.int64(3), property.string("Material::Paint"), property.string(""), ], }; const texture: FbxBinaryFixtureNode = { children: [ { name: "Type", properties: [property.string("TextureVideoClip")] }, { name: "Version", properties: [property.int32(202)] }, { name: "TextureName", properties: [property.string("Texture::Diffuse")] }, { name: "Media", properties: [property.string("Video::Diffuse")] }, { name: "FileName", properties: [property.string("embedded.png")] }, { name: "RelativeFilename", properties: [property.string("embedded.png")] }, ], name: "Texture", properties: [ property.int64(4), property.string("Texture::Diffuse"), property.string(""), ], }; const video: FbxBinaryFixtureNode = { children: [ { name: "Type", properties: [property.string("Clip")] }, { name: "Filename", properties: [property.string("embedded.png")] }, { name: "RelativeFilename", properties: [property.string("embedded.png")] }, { name: "Content", properties: [property.raw(GLTF_APPEARANCE_PNG)] }, ], name: "Video", properties: [ property.int64(5), property.string("Video::Diffuse"), property.string("Clip"), ], }; const connection = ( relationship: "OO" | "OP", from: number, to: number, propertyName?: string, ): FbxBinaryFixtureNode => ({ name: "C", properties: [ property.string(relationship), property.int64(from), property.int64(to), ...(propertyName ? [property.string(propertyName)] : []), ], }); return encodeBinaryFbxFixture([ { children: [geometry, model, material, texture, video], name: "Objects", }, { children: [ connection("OO", 1, 2), connection("OO", 3, 2), connection("OP", 4, 3, "DiffuseColor"), connection("OO", 5, 4), connection("OO", 2, 0), ], name: "Connections", }, ]); }