注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

从零开始构建IOS的OpenGL应用(六)  

2012-08-27 10:51:28|  分类: Objective-C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

六、正确显示正方形外观

 

默认,“Effect”的投影矩阵是一个单位矩阵,它不做任何变换,将场景(-1-1-1)到(111)的立文体范围的物体,投射到屏幕的X-11Y-11。因此,当屏幕本身是非正方形时,正方形的物体将被拉伸,从而显示为矩形。

实际上,默认的“Effect”模型视图矩阵也是一个单位矩阵。

透视投影中的观察点位于原点(000),并沿着Z轴的负方向进行观察,就像是从屏幕内部看进去。

 

1、修改投影矩阵

为了正确显示,需要修改投影矩阵。在“update”方法中添加下面的代码:

从零开始构建IOS的OpenGL应用(六) - mississi - mississi的博客
 

首先计算出屏幕的纵横比(aspect),然后缩放单位矩阵的Y轴,强制将Y轴的单位刻度与X轴保持一致。

 

2、渲染观察效果

从零开始构建IOS的OpenGL应用(六) - mississi - mississi的博客
 

3、使用透视投影矩阵

把单位矩阵做拉伸,本质上仍然是一个正交投影。要模拟人眼观察世界的效果,则必须使用透视投影。

把上面的代码做一些修改:

从零开始构建IOS的OpenGL应用(六) - mississi - mississi的博客
 

使用GLKit自带的方法创建出一个透视矩阵,视角、纵横比、近平面、远平面。

渲染效果如下:

从零开始构建IOS的OpenGL应用(六) - mississi - mississi的博客
 

4、修改模型视图矩阵

上图看起来感觉像一个正方形,但似乎左右两边没显示完整。

原因是,正方形与透视视点距离太近。

有两个方法解决这个问题:一是修改原始的顶点数据(Z轴值),使之透视视点;二是通过所谓的“模型视图矩阵”,将正方形“变换”到远一点的位置。

 

添加以下代码:

从零开始构建IOS的OpenGL应用(六) - mississi - mississi的博客
 

这样,同样再次显出一个精确的正方形。


  评论这张
 
阅读(4393)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017