首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL/GLKit中透视源的透视变换

问OpenGL/GLKit中透视源的透视变换
EN

Stack Overflow用户
提问于 2013-11-23 13:33:40
回答 1查看 471关注 0票数 0

我正在使用OpenGL创建一个简单的正方形网格,我希望这样,当用户点击一个正方形时,它会在Y轴上翻转(我的代码正在工作)。然而,由于透视原点/消失点在屏幕的中心,旋转看起来并不像应该的那样相对于正方形的中心。

下面是所有的广场旋转0.5弧度(约30度)的图片。中心广场是正确旋转的,但是,我希望其他所有的方块都有相对于其中心点的透视,而不是屏幕的中心点(目前它们看起来是被剪裁的,我不想这样):

​

​

下面是如何创建投影和视图矩阵(适用于所有正方形):

代码语言:javascript
复制
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);

下面是我如何为每个正方形创建一个模型矩阵:

代码语言:javascript
复制
GLKMatrix4 modelMatrix = GLKMatrix4MakeTranslation(tile.x, tile.y, 0);
modelMatrix = GLKMatrix4RotateY(modelMatrix, 0.5f);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 08:43:16

在玩完这个之后,我最终看到了CSS3转换是如何实现的,以及W3C提供了关于如何计算透视图原点的如下解释:。

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

这很容易应用于OpenGL和GLKit。与其将投影* View * Model相乘(在本例中,我的模型转换为平移和旋转),我发现乘平移*投影*视图*旋转代替了工作,并允许我正确地翻转围绕其中心的方块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20162947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档