将页面沿边缘旋转180度

Rotating a page 180 degrees along its edge

本文关键字:旋转 180度 边缘      更新时间:2023-09-26

我试图通过:

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上找不到做逆的方法。(我知道它是相反的,但找不到相关文档)

我想它也可以是透视矩阵…

您可以围绕点p旋转对象(在本例中,是沿着其边缘上的点的页面),首先将矩阵平移-p,然后进行旋转,最后将矩阵平移p。从视觉上看,您移动对象使旋转点位于原点,然后旋转对象,最后将其放回到原来的位置。

mat4.translate(mvMatrix, vec3.negate(edgePoint, tmpVec));
mat4.rotate(mvMatrix, turnAngle, [0, 1, 0]);
mat4.translate(mvMatrix, edgePoint);