用shader写伪3D

12 篇文章 0 订阅
5 篇文章 0 订阅

用shader写伪3D之一

    用shader写伪3D,其实是件非常棒的事情,如果用用纯3D数学只在fragment shader中实现,那么要经过顶点
    数据模拟、切线空间的计算、投影、遮挡处理、阴影等一系列有点繁琐的问题,但最关键的问题是这是在
    fragment中啊,每个像素都要~~~~亲!你耗得起吗?~~~~~~

  • 说说伪3D

当无法满足于性能时,于是伪3D特效就有了,它的用处在游戏中非常的广;当然伪3D包括伪3D光照、伪3D场景、伪逻辑、伪物理特性等等…………………..

  • 它的优点是:
    (1)代码量可以非常的简洁。
    (2)性能可以无限的提升。
    (3)视觉抽象强。
    (4)用途广,尤其是在游戏和广告中等。
  • 它的缺点:
    (1)没真3D那么数学性强,可以逻辑上的补充。
    (2)后期代码的难以维护。
    (3)可能要大量的用到修改和经验值。
    (4)当然要知道每行运行代码的效果,每个像素的运算的效果。

呵呵,可以哟

其实说白了,优缺点是人为的,自己写出思想来,写出个性来,写出自己的style来,神马都是浮云。
写shader这个东西,如果不多变的换角度去写的话,想实现很炫很复杂的算法,都很难下手。
当然依国情考虑,当下都接受过应试教育的思想,也是很难有什么角度的,所以市面上一切抄袭就来了。


  1. 我们先看一下图
    这里写图片描述
    这是一张没任何模型灯光的图,
    这里写图片描述
    这也是哦,不过你会看到阴影。
  2. 看到看头,很不想看到结尾
    注:这是带有伪动态光照的效果

    那我们还是看看代码吧:
    这是它的代码地址http://www.glslsandbox.com/e#24261.0
    这里写图片描述

// by 834144373 这是qq和twitter
//specular light 取得一个高光名字
#ifdef GL_ES
precision mediump float;
#endif

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

void main( void ) {

    vec2 pos = ( gl_FragCoord.xy / resolution.xy );// + mouse / 4.0;

    pos = pos*2. -vec2(1.); //把远点移到屏幕中间

    pos.y = fract(pos.y*5.); //y轴上下5个格子

    pos.y +=(-0.4+0.4*sin(time)); //伪动态光照y
    pos.x +=(0.2+ 0.3*cos(time)); //伪动态光照x


    float d =1.1 - length(pos); //伪光照效果

    vec3 color = vec3(0.12,0.55,0.4); //基础颜色

    color *= d; //实行伪光照混合效果

    gl_FragColor = vec4(color , 1.0 );

}

哈哈,有盖帘了吧

这很简单吧,这示列代码非常的少,它能显示的效果也可以哟,怎一个伪字了得。
不过伪的原理可以通过一些常见的视觉来模拟。当然要必备各种函数的运用,函数的构造。
发挥得当。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值