对用OpenGL ES 2.0实现OpenGL ES 1.1的顶点着色器的研究

对用OpenGL ES 2.0实现OpenGL ES 1.1的顶点着色器的研究

       想要彻底研究OpenGL ES 2.0与前一代OpenGL的区别,还是要费很大一番精力的。最近在仔细研读《OpenGL ES 2.0 Programming Guide》,虽然这本书最早出版日期是2008年,距今已经7年了,而著作的日期或许还要早上半年到1年,但是目前OpenGL ES 2.0是主流三维开发框架,因此这本书的知识直到现在,依然受用。

       OpenGL ES 2.0是桌面版OpenGL 2.0的一个子集,它清除了一些冗余并且难以实现的API,只保留简单的部分,这样让硬件实现变得容易起来。而OpenGL ES 2.0对于上层的开发者来说,几乎没有什么变化,只要会写着色器,会玩转OpenGL 2.0,那么我想OpenGL ES 2.0自然也不在话下。

       在OpenGL ES 1.1或者是OpenGL 1.5及以下中,光照和变换(T&L)部分是通过固定渲染管线来操作的,也就是说,相关数据结构已经填好,只需要自己填充主要的部分就好了。但是到了OpenGL ES 2.0,由于去掉了固定渲染管线,开发者需要自己设计渲染框架,一切渲染的手法都由开发者来完成,这虽然提高了要求,但是增加了自由度,开发者可以利用知识写出精简的渲染方法出来。

       而通过OpenGL ES 2.0模拟出OpenGL ES 1.1的渲染管线也是可以的,《OpenGL ES 2.0 Programming Guide》一书中就使用顶点着色器实现了相关的方法。最近我在研究这样的着色器,为了以后备忘参考,将该着色器贴出来,并且附上我的部分注释。

//******************************************************************
//
// OpenGL ES 2.0 vertex shader that implements the following
// OpenGL ES 1.1 fixed function pipeline
//
// - compute lighting equation for up to eight directional/point/
// - spot lights
// - transform position to clip coordinates
// - texture coordinate transforms for up to two texture coordinates
// - compute fog factor
// - compute user clip plane dot product (stored as v_ucp_factor)
//
//******************************************************************
#define NUM_TEXTURES 2
#define GLI_FOG_MODE_LINEAR 0
#define GLI_FOG_MODE_EXP 1
#define GLI_FOG_MODE_EXP2 2
struct light// 光源的结构体
{
    vec4 position; // light position for a point/spot light or
    // normalized dir. for a directional light
    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
    vec3 spot_direction;
    vec3 attenuation_factors;
    float spot_exponent;
    float spot_cutoff_angle;
    bool comput
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值