嘟先生学WebGL 嘟先生学WebGL
首页
Threejs
在线案例
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 方法论
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档

嘟嘟MD

全栈践行者
首页
Threejs
在线案例
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 方法论
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
  • Threejs干货系列

  • Threejs 疑难杂症

  • Threejs 案例源码

  • Threejs shader系列

    • Shaders实现一个简单渐变
  • 其他前端笔记

  • Threejs
  • Threejs shader系列
嘟嘟MD
2020-06-26

Shaders实现一个简单渐变

# 前言

今天分享一个用 Shader 实现的渐变色例子,很简单,用途很广。

# 在线预览

# 解析

首先生成一个矩形平面,设置2个颜色color1和color2,然后设置渐变强度power,在材质那边引入,最关键的 transparent:true 这个属性要设置。

function initBox() {
    var uniforms = {
        color1: {
            value: new THREE.Color('#0eb3ff')
        },
        color2: {
            value: new THREE.Color('#0eb3ff')
        },
        power: {
            value: 2.0
        },
    };
    var material = new THREE.ShaderMaterial({
        uniforms: uniforms,
        vertexShader: document.getElementById('vertexShader').textContent,
        fragmentShader: document.getElementById('fragmentShader').textContent,
        side:THREE.DoubleSide,
        transparent:true
    })

    var geometry = new THREE.PlaneGeometry(200, 100);
    mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

然后顶点着色器和片元着色器也设置一下

<script id="vertexShader" type="x-shader/x-vertex">
  varying vec2 vUv;
	void main()
	{
		vUv = uv;
		gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
	}
</script>
    
<script id="fragmentShader" type="x-shader/x-vertex">
  varying vec2 vUv;
  uniform vec3 color1; //渐变1
  uniform vec3 color2; //渐变2
  uniform float power;  //透明范围
  void main( void ) {
    //第一种写法
    vec3 aColor =(1.0-vUv.y)*(color1-color2)+color2;
    //第二种写法
    //vec3 aColor  = mix(color1,color2,vUv.y);
    //第三种写法
    //vec3 aColor =(1.0-vUv.y)*color1+color2*vUv.y;
    float alp =pow((1.0-vUv.y),power);
    gl_FragColor =vec4(aColor,alp);
  }
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#Shader
Threejs实现酷炫3D地球
《JavaScript教程》笔记

← Threejs实现酷炫3D地球 《JavaScript教程》笔记→

最近更新
01
Threejs 3D 酷炫地球在线预览
02
Threejs 3D 动态换肤和拆分
03
Threejs 3D 人体扫描
更多文章>
Theme by Vdoing | Copyright © 2021-2023 闽ICP备17006673号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×