Sprite simple assembler中updateWorldVerts解惑

请教下如题中该函数的计算是怎样得来的,查了网络和文心,但没怎么明白,感谢大佬

updateWorldVerts (sprite: Sprite, chunk: StaticVBChunk) {

    const renderData = sprite.renderData!;
    const vData = chunk.vb;

    const dataList: IRenderData[] = renderData.data;
    const node = sprite.node;
    const m = node.worldMatrix;

    const m00 = m.m00; const m01 = m.m01; const m02 = m.m02; const m03 = m.m03;
    const m04 = m.m04; const m05 = m.m05; const m06 = m.m06; const m07 = m.m07;
    const m12 = m.m12; const m13 = m.m13; const m14 = m.m14; const m15 = m.m15;

    const stride = renderData.floatStride;
    let offset = 0;
    const length = dataList.length;
    for (let i = 0; i < length; ++i) {
        const curData = dataList[i];
        const x = curData.x;
        const y = curData.y;
        let rhw = m03 * x + m07 * y + m15;
        rhw = rhw ? 1 / rhw : 1;

        offset = i * stride;
        vData[offset + 0] = (m00 * x + m04 * y + m12) * rhw;
        vData[offset + 1] = (m01 * x + m05 * y + m13) * rhw;
        vData[offset + 2] = (m02 * x + m06 * y + m14) * rhw;
    }
}, 这个rhw是什么意思

应该是齐次坐标的w值,后面顶点坐标乘以它的倒数就是类似透视除法,齐次坐标w等于1的时候才是一个普通的坐标

矩阵+齐次坐标。好好学习下webgl编程指南。再看这个就很简单了