将页面沿其边缘旋转180度

时间:2011-11-23 19:52:15

标签: javascript 3d webgl

我试图通过以下方式实现这一目标:

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

我当时认为它也可能是透视矩阵......

1 个答案:

答案 0 :(得分:0)

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

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