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

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

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

2012-09-03 16:39:34|  分类: Objective-C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

九、使用自定义的着色器

迄今,例中只是简单地调用了“GLKit”内置的着色程序进行渲染。但是,在某些情况下,可能需要使用自己的特殊的着色器。

 

1、编写着色程序

一个着色器由两个部分构成(可以是两个文件,也可以是硬编码嵌在程序中的两段代码字串)。

它们分别是:顶点着色程序和片段着色程序。

创建两个“Empty”文件,分别命名为“v.shader”和“f.shader”。


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

然后,两个文件分别写入这些代码:

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

2、加载、存储、编译、附着、链接

OpenGL中使用自定义着色器,过程比较繁琐。

首先需要加载这个文件-->把它转换为GLCharUTF8编码)-->保存GUP内存-->编译内存中的字串代码-->附着给“program”对象。

上述过程要进行两次(分别为顶点程序和片段程序)。

最后,将“program链接到当前“Context”,这样才能在OpenGL中发挥作用。

 

为了简化代码,可以写成两个方法,作为公共的加载方法使用:


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

3、开始加载自定义的着色器

在“viewDidLoad”方法里追加以下代码:


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

如何判断着色器是否能正常工作?可以用:

glGetProgramiv(_program, GL_LINK_STATUS, &params);

如果返回的“params”为1,则说明一切正常。

另外,上面代码中“_program”为新添加进去的公共变量


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

4、为着色器提供参数

顶点着色程序需要一个属性参数:position(表示顶点的位置)

 

5、在“glkView”方法后追加


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

渲染结果为:


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

屏幕上出现两个矩形,有图案的是用“effct”渲染的,上面红色的是用“_program”自定义着色器渲染的。

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

历史上的今天

评论

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

页脚

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