Chapter 215 · 3D 图形

材质

PBR metallic-roughness 工作流:一份描述结构体、五张贴图槽位、三种透明模式——从 Default 出发两行代码得到可用的材质。

215

从默认值开始

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;

透明与双面

  • alpha_mode:OPAQUE / MASK(alpha_cutoff 硬裁剪)/ BLEND(排序透明)。
  • double_sided:双面渲染,配合法线翻转适合植被卡片。
  • unlit:跳过光照,直接输出基色——海面、UI 板块常用(岛屿示例的海面就是 unlit 材质)。

不想换整份材质时,xge3dNodeSetColor(scene, node, rgba) 可以对节点叠加纯色 tint;xge3dMaterialGetDesc 回读描述(贴图为借用指针,不要释放或修改)。