已知的旋转公式
x’ = x * cos -y * sin
y’ = x * sin + y * cos
以图片为例,会计算图片四个角的点然后旋转
fillBuffers (sprite, renderer) {
let matrix = node._worldMatrix,
a = matrix.m00, b = matrix.m01, c = matrix.m04, d = matrix.m05,
tx = matrix.m12, ty = matrix.m13;
// buffer data may be realloc, need get reference after request.
let vbuf = buffer._vData;
let data0 = data[0], data3 = data[3],
vl = data0.x, vr = data3.x,
vb = data0.y, vt = data3.y;
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;
// left bottom
vbuf[vertexOffset] = al + cb + tx;
vbuf[vertexOffset + 1] = bl + db + ty;
// right bottom
vbuf[vertexOffset + 5] = ar + cb + tx;
vbuf[vertexOffset + 6] = br + db + ty;
// left top
vbuf[vertexOffset + 10] = al + ct + tx;
vbuf[vertexOffset + 11] = bl + dt + ty;
// right top
vbuf[vertexOffset + 15] = ar + ct + tx;
vbuf[vertexOffset + 16] = br + dt + ty;
}
m00 = cos, m01 = -sin, m04 = sin, m05 = cos
左下角点旋转后的坐标为:
vbuf[vertexOffset] = al + cb + tx = a * vl + c * vb + tx = m00 * vl + m04 * vb + tx = cos * x + sin * y + ty;
vbuf[vertexOffset + 1] = bl + db + ty = b * vl + d * vb + ty = m02 * vl + m05 * vb + ty = -sin * x + cos * y + ty;
明显和公式对不上。
是我那里没考虑到,求大佬解惑。