updateWorldVerts(comp) {
let local = this._local;
let verts = this._renderData.vDatas[0];
let matrix = comp.node._worldMatrix;
/**
* @四维矩阵
[
a, c, 0, 0,
b, d, 0, 0,
0, 0, 1, 0,
tx, ty, tz, 1
]
*/
let matrixm = matrix.m,
/**@abcd控制旋转缩放倾斜 */
a = matrixm[0], b = matrixm[1], c = matrixm[4], d = matrixm[5],
/**@tx对应世界坐标x偏移量 @ty对应世界坐标的y偏移量 */
tx = matrixm[12], ty = matrixm[13];
/**@vl本地坐标的left @vr本地坐标的right @vb本地坐标的bottom @vt本地坐标的top */
let vl = local[0], vr = local[2],
vb = local[1], vt = local[3];
let floatsPerVert = this.floatsPerVert;
let vertexOffset = 0;
/**@是否只是平移 */
let justTranslate = a === 1 && b === 0 && c === 0 && d === 1;
/**
* @世界坐标平移公式
* @x = a*px + c*py + tx
* @y = b*px + d*py + ty
*/
if (justTranslate) {
/**@只有平移的世界坐标算法 */
/** @左下角顶点坐标 */
verts[vertexOffset] = vl + tx;
verts[vertexOffset + 1] = vb + ty;
vertexOffset += floatsPerVert;
/** @bottom 右下角顶点坐标 */
verts[vertexOffset] = vr + tx;
verts[vertexOffset + 1] = vb + ty;
vertexOffset += floatsPerVert;
/** @左上角顶点坐标 */
verts[vertexOffset] = vl + tx;
verts[vertexOffset + 1] = vt + ty;
vertexOffset += floatsPerVert;
/** @右上角顶点坐标 */
verts[vertexOffset] = vr + tx;
verts[vertexOffset + 1] = vt + ty;
} else {
/**@存在 @旋转 @缩放 @倾斜 */
let al = a * vl, ar = a * vr,
bl = b * vl, br = b * vr,
cb = c * vb, ct = c * vt,
db = d * vb, dt = d * vt;
/** @左下角顶点坐标 */
verts[vertexOffset] = al + cb + tx;
verts[vertexOffset + 1] = bl + db + ty;
vertexOffset += floatsPerVert;
/** @右下角顶点坐标 */
verts[vertexOffset] = ar + cb + tx;
verts[vertexOffset + 1] = br + db + ty;
vertexOffset += floatsPerVert;
/** @左上角顶点坐标 */
verts[vertexOffset] = al + ct + tx;
verts[vertexOffset + 1] = bl + dt + ty;
vertexOffset += floatsPerVert;
/** @右上角顶点坐标 */
verts[vertexOffset] = ar + ct + tx;
verts[vertexOffset + 1] = br + dt + ty;
}
}
所以,啥问题?
没啥问题,就是分享下代码的理解,希望有理解不到位的大佬们帮忙看下