我试图通过以下方式实现这一目标:
mat4.translate(mvMatrix, XYZ);
mat4.rotate(mvMatrix,degToRad(90),[1,0,0]);
mat4.rotate(mvMatrix,-pageTurn,[0,1,0]);
mat4.rotate(mvMatrix,degToRad(-90),[1,0,0]);
mat4.translate(mvMatrix, inverseXYZ);
第一个移动到左上角绘制,第二个垂直于X旋转,第三个实际旋转。它正确地旋转,但它就像绕着“书”的中心轨道而不是保持稳定的边缘。 pageTurn
是由动画更新的弧度角度。我想这可能是我对inverseXYZ
的使用。我在mat4上找不到反向的方法。 (我知道它是相反的,但无法找到相关的文档)
我当时认为它也可能是透视矩阵......
答案 0 :(得分:0)
您可以通过首先将矩阵转换为-p,然后进行旋转,最后通过p转换矩阵,围绕点p(在本例中为沿其边缘上的点的页面)旋转对象。在视觉上,您移动对象以使旋转点位于原点,然后旋转对象,最后将其放回原位。
mat4.translate(mvMatrix, vec3.negate(edgePoint, tmpVec));
mat4.rotate(mvMatrix, turnAngle, [0, 1, 0]);
mat4.translate(mvMatrix, edgePoint);