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

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

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

2012-09-06 11:16:45|  分类: Objective-C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

十一、着色器顶点变换矩阵

在上述着色器代码中,是直接使用:

gl_Position = position;

也就是说,顶点位置没有经过任何变换,直接使用它的原始数据(所以它的图像也被显示为一个矩形)。

 

1、引入变换矩阵

修改顶点着色器代码:


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

添加了一个统一的矩阵变量“modelViewProjectionMatrix”(模型、视图、投影矩阵,是这三个变换矩阵合并后(乘法),得到一个单个的矩阵)。将来,要在主程序中将矩阵值传入。



2、传入矩阵值

在“update”方法中,追加下面的代码:

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

查询到“modelViewProjectionMatrix”变量à计算合并矩阵à传给着色器。

传入着色器的值是modelViewProjectionMatrix.m,注意后面的“m”,它表示是一维数组形式的矩阵。


3、再次渲染

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

因为,“Effect”的变换矩阵与“着色器”的渲染结果相同,所以,显示为两个完全重合的正方形。


4、偏离屏幕中心

为了更便于观察,下面将“着色器”渲染的正方形偏离一下。

修改代码:


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

在合并矩阵之前,先把“modelViewMatrix”做一个平移(1.0,1.0,-1.0)。

结果为:


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

注意到两个图像的颜色略有差别,这是因为“Effect”内置的着色器使用了光源。而自定义的着色器没有光效代码,它完全照搬了纹理的“原色”。

 

另外,后面那个正方形变小了,是因为它更远离了“相机”。


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

历史上的今天

评论

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

页脚

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