OpenGL ES 灯光,想说爱你并不是很容易的事

OpenGL ES 灯光,想说爱你并不是很容易的事

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。



头疼!!!坚持把这个总结写完吧,要不,明天又得重新疏理一会儿思路才能开始工作......噢,忘了明天要去看病,明天没的总结分享给大家喽~


最近在重建 OpenGL ES 的工程,把公共部分和Obj重复的部分拆分开,老罗兄弟原有代码的架构已经不能满足需要,但新建也都是基于老罗兄弟的代码做适当增减,核心还是源于老罗兄弟博客,在此表示感谢。

以下代码是绘制的基本结构,在其中可以执行相应的着色器操作,包括顶点缓存、灯光、纹理、矩阵变换:

- (void)glesRender {
    
    // 清除背景颜色
    glClearColor(0.0f, 1.0f, 0.0f, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    // 设置视口
    glViewport(0, 0, self.frame.size.width, self.frame.size.height);
    
    // 准备顶点及纹理缓冲区、灯光及转换矩阵,绘制图形到桢缓冲区
    
    
    // 显示桢缓冲内容
    [_glesContext presentRenderbuffer:GL_RENDERBUFFER];
}

暂时考虑将矩阵变换也作为公共部分,毕竟现在研究的阶段,还没这个必要去深入,只要能各方查看,缩放、平移即可。

那么上面代码中空注释(其实注释本身就是一种伪代码,伪代码与UML这种设计各有千秋,也是设计的一种,所以我总是先写出来伪代码,再去填实际语言代码)部分就应该是:

1、纹理缓存的建立,备用;

2、根据一系列...直到按纹理分组的面来建立顶点缓存;

3、灯光,暂时obj中没有,不过后续考虑ASE,故而留出接口,以备后续扩展;灯光就没什么缓存了,直接弄到着色器中去计算;

以上内容,看似简单,不过对我来说,可是花了很久时间,边研究边总结出来的,哪些相同,哪些不同,哪些公用,哪些私用......


上面提到的1和2基本问题不大,问题是3中所说的灯光,一是暂时还不了解灯光的类型如何在OpenGL ES中处理,二是灯光与纹理的复合使用,之前测试无灯光确完全能显示贴图。


经近期的多方搜集,发现灯光的三种类型:平行光源(太阳)、点光源(灯泡)、投射光源(射灯)需要了解一些理论知识,才能看得懂那些个计算。

另外考虑到,是否纹理贴图与灯光作用和没有灯光作用,只是一种“整景”的方式呢?!

也就是说本来是大白天的,为了要效果,所以整个黑屋子放上灯光,如果把窗帘打开,太阳光一照进来,灯光就完全不起作用了,就把这种整景效果给弄没了呢?

姑且当作,灯光不是为了照亮,而是为了照出不亮的效果部分,与现实正好相反呢?!现实的灯光是为了把黑暗照亮要照亮的部分。

或者从另一个角来说,透明度如果基色是白色,那么透明是从白往不透明状态转换;如果基色是黑色,那么透明度就是从黑往不透明状态转换。


现在真正的了解了,上学是为了什么了!不是为了学到有用的东西,而是为了能学会有用东西的东西;不是为了速度,而是为了加速度;速度是技校的事情,加速度则是大学的事情。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值