2011-11-23 105 views
0

我试图完成这个有:旋转页沿其边缘180度

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

您可以在此情况下,绕点P的对象( ,沿它的边上的一个点的页面)首先通过-p翻译矩阵,然后进行旋转,最后将矩阵翻译为p。在视觉上,您移动物体以便旋转点位于原点,然后旋转物体,最后将其放回原位。

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