Skip to content

Vertex Shader 的输入值

参数列表

Vertex Shader 输入值都在 SurfacesStandardVertexIntermediate 结构体中,作为函数参数传入。

Vertex Shader 输入值类型使用时需要开启的宏含义
positionvec4N/A本地坐标
normalvec3N/A本地法线
tangentvec4CC_SURFACES_USE_TANGENT_SPACE本地切线和镜像法线标记
colorvec4CC_SURFACES_USE_VERTEX_COLOR顶点颜色
texCoordvec2N/AUV0
texCoord1vec2CC_SURFACES_USE_SECOND_UVUV1
clipPosvec4N/A投影坐标
worldPosvec3N/A世界坐标
worldNormalvec4N/A世界法线和双面材质标记
worldTangentvec3CC_SURFACES_USE_TANGENT_SPACE世界切线
worldBinormalvec3CC_SURFACES_USE_TANGENT_SPACE世界副法线

宏开关

当需要使用带有宏开关的输入参数时,需要在 macro-remapping 代码段中开启相应的宏,示例代码如下:

glsl
CCProgram macro-remapping %{
    ...
    //使用第二套 UV
    #define CC_SURFACES_USE_SECOND_UV 1
    //使用世界副法线
    #define CC_SURFACES_USE_TANGENT_SPACE 1
    ...
}

使用示例

在任何带 SurfacesStandardVertexIntermediate 参数的函数中,都可以直接访问到相关参数,以 SurfacesVertexModifyWorldPos 函数为例:

glsl
#define CC_SURFACES_VERTEX_MODIFY_WORLD_POS
vec3 SurfacesVertexModifyWorldPos(in SurfacesStandardVertexIntermediate In)
{
    vec3 worldPos = In.worldPos;
    worldPos.x += sin(cc_time.x * worldPos.z);
    worldPos.y += cos(cc_time.x * worldPos.z);
    return worldPos;
}