PBR metallic-roughness 工作流:一份描述结构体、五张贴图槽位、三种透明模式——从 Default 出发两行代码得到可用的材质。
xge3dMaterialDefault() 返回初始化好 glTF metallic/roughness 因子与恒等 UV 变换的描述结构体,改需要的字段即可:
xge3d_material_desc_t md = xge3dMaterialDefault();
md.metallic = 0.0f; md.roughness = 1.0f; // 哑光地表
md.base_color[0] = .31f; md.base_color[1] = .44f; md.base_color[2] = .17f;
xge3d_material *pMaterial;
xge3dMaterialCreate(&md, &pMaterial);
xge3dNodeSetMaterial(pScene, tNode, pMaterial);maps[XGE3D_MAP_*] 共五槽:BASE_COLOR、METALLIC_ROUGHNESS、NORMAL、OCCLUSION、EMISSIVE。每个绑定携带纹理指针、texcoord 通道(0/1)、offset/scale/rotation UV 变换。纹理创建时显式声明 sRGB——颜色图填 1,法线/MR/遮蔽数据填 0:
xge3d_texture_desc_t td = { &tImage, 1, { 0 } }; // sRGB=1
xge3d_texture *pTex;
xge3dTextureCreate(&td, &pTex);
md.maps[XGE3D_MAP_BASE_COLOR].texture = pTex;不想换整份材质时,xge3dNodeSetColor(scene, node, rgba) 可以对节点叠加纯色 tint;xge3dMaterialGetDesc 回读描述(贴图为借用指针,不要释放或修改)。