2013-11-23 37 views
0

我使用OpenGL创建了一个简单的正方形网格,我希望这样当用户点击一个正方形时,它会翻转(我有此代码工作) Y轴。但是因为透视原点/消失点位于屏幕的中心,所以旋转看起来不像原来的平面中心那样。透视变换透视原点在OpenGL/GLKit

下面是所有正方形旋转0.5弧度(约30度)的图像。中央广场是正确的旋转,但我希望所有其他广场有他们的观点相对于他们的中心点,而不是屏幕的中心点(目前他们看起来变成了,我不想):

enter image description here

下面是如何创建的投影&视图矩阵(适用于所有的平方):

float aspect = fabsf(self.view.bounds.size.width/self.view.bounds.size.height); 
_projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f); 
_viewMatrix = GLKMatrix4MakeTranslation(0, 0, -5); 

这里就是我如何创建一个模型矩阵为每平方:

GLKMatrix4 modelMatrix = GLKMatrix4MakeTranslation(tile.x, tile.y, 0); 
modelMatrix = GLKMatrix4RotateY(modelMatrix, 0.5f); 

回答

0

这种玩弄后,我终于结束了寻找如何CSS3变换来实现,并W3C provides the following explanation of how perspective-origin should be computed

  1. 开始与单位矩阵。
  2. 翻译由其中长度是由立体属性的值提供
  3. 翻译透视-原点
  4. 乘以会从这个角度可以得到矩阵()变换函数,所计算的X和Y值通过透视起源的否定计算的X和Y值

这是很容易适用于OpenGL和GLKit。而不是乘以投影*视图*模型(在这种情况下,我的模型转换是平移和旋转),我发现乘法Translation * Projection * View * Rotation可以完成这项工作,并允许我正确地翻转中心周围的方块。