繁体   English   中英

在OpenGL / GLKit中使用透视原点进行透视变换

[英]Perspective transform with perspective origin in OpenGL/GLKit

我正在使用OpenGL创建一个简单的正方形网格,我希望它能使用户在正方形上点击时在Y轴上翻转(我的代码正在工作)。 但是,由于透视图的原点/消失点位于屏幕的中心,因此旋转似乎并没有相对于正方形的中心。

下面是所有以0.5弧度(约30度)旋转的正方形的图像。 中心正方形已正确旋转,但是我希望所有其他正方形具有相对于其中心点而不是屏幕中心点的透视图(当前它们看起来是透明的,我不希望这样):

在此处输入图片说明

这是我创建投影和视图矩阵(适用于所有正方形)的方法:

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);

经过研究之后,我最终看了如何实现CSS3转换, W3C提供了以下关于应如何计算透视图起源的说明

  1. 从身份矩阵开始。
  2. 通过计算的透视图原点的X和Y值进行翻译
  3. 乘以将从Perspective()转换函数获得的矩阵,其中长度由Perspective属性的值提供
  4. 通过取反的透视图原点的X和Y值进行翻译

这相当容易应用于OpenGL和GLKit。 与其乘以Projection * View *模型(在这种情况下,我的模型变换是平移和旋转),我发现乘以Translation * Projection * View * Rotation可以完成工作,并允许我围绕其中心正确翻转正方形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM