mirror of https://gitee.com/antv-l7/antv-l7
feat(polygon-layer): 支持多个平行光源配置
This commit is contained in:
parent
f8269ee35b
commit
32cdcf83f3
|
@ -69,24 +69,24 @@ scene.on('loaded', () => {
|
||||||
.source(data)
|
.source(data)
|
||||||
.shape('extrude')
|
.shape('extrude')
|
||||||
.active({fill:'red'})
|
.active({fill:'red'})
|
||||||
// .style({
|
.style({
|
||||||
// lights: [
|
lights: [
|
||||||
// {
|
{
|
||||||
// type: 'directional',
|
type: 'directional',
|
||||||
// direction: [ 1, -10.5, 12 ],
|
direction: [ 1, 10.5, 12 ],
|
||||||
// ambient: [ 0.2, 0.2, 0.2 ],
|
ambient: [ 0.2, 0.2, 0.2 ],
|
||||||
// diffuse: 'red',
|
diffuse: 'red',
|
||||||
// specular: [ 0.1, 0.1, 0.1 ]
|
specular: [ 0.1, 0.1, 0.1 ]
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// type: 'directional',
|
type: 'directional',
|
||||||
// direction: [ 1, 10.5, 12 ],
|
direction: [ 1, -10.5, 12 ],
|
||||||
// ambient: [ 0.2, 0.2, 0.2 ],
|
ambient: [ 0.2, 0.2, 0.2 ],
|
||||||
// diffuse: 'green',
|
diffuse: 'green',
|
||||||
// specular: [ 0.1, 0.1, 0.1 ]
|
specular: [ 0.1, 0.1, 0.1 ]
|
||||||
// },
|
},
|
||||||
// ]
|
]
|
||||||
// })
|
})
|
||||||
.size('floor',[10,2000])
|
.size('floor',[10,2000])
|
||||||
.color('rgba(242,246,250,0.96)')
|
.color('rgba(242,246,250,0.96)')
|
||||||
.render();
|
.render();
|
||||||
|
|
|
@ -1,33 +1,15 @@
|
||||||
import Material from './material';
|
import Material from './material';
|
||||||
import { getModule } from '../../util/shaderModule';
|
import { getModule, wrapUniforms } from '../../util/shaderModule';
|
||||||
export default class PolygonMaterial extends Material {
|
import merge from '@antv/util/lib/deep-mix';
|
||||||
getDefaultParameters() {
|
|
||||||
return {
|
|
||||||
uniforms: {
|
|
||||||
u_opacity: { value: 1.0 },
|
|
||||||
u_time: { value: 0 },
|
|
||||||
u_zoom: { value: 0 },
|
|
||||||
u_baseColor: { value: [ 1.0, 0, 0, 1.0 ] },
|
|
||||||
u_brightColor: { value: [ 1.0, 0, 0, 1.0 ] },
|
|
||||||
u_windowColor: { value: [ 1.0, 0, 0, 1.0 ] },
|
|
||||||
u_near: { value: 0.0 },
|
|
||||||
u_far: { value: 1.0 },
|
|
||||||
u_activeId: { value: 0 },
|
|
||||||
u_activeColor: { value: [ 1.0, 0, 0, 1.0 ] }
|
|
||||||
},
|
|
||||||
defines: {
|
|
||||||
|
|
||||||
}
|
export default class PolygonMaterial extends Material {
|
||||||
};
|
|
||||||
}
|
|
||||||
constructor(_uniforms, _defines, parameters) {
|
constructor(_uniforms, _defines, parameters) {
|
||||||
super(parameters);
|
super(parameters);
|
||||||
const { uniforms, defines } = this.getDefaultParameters();
|
const { vs, fs, uniforms } = getModule('polygon');
|
||||||
this.uniforms = Object.assign(uniforms, this.setUniform(_uniforms));
|
this.uniforms = wrapUniforms(merge(uniforms, _uniforms));
|
||||||
this.type = 'PolygonMaterial';
|
this.type = 'PolygonMaterial';
|
||||||
this.defines = Object.assign(defines, _defines);
|
this.defines = _defines;
|
||||||
|
|
||||||
const { vs, fs } = getModule('polygon');
|
|
||||||
this.vertexShader = vs;
|
this.vertexShader = vs;
|
||||||
this.fragmentShader = fs;
|
this.fragmentShader = fs;
|
||||||
this.transparent = true;
|
this.transparent = true;
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
precision highp float;
|
precision highp float;
|
||||||
|
|
||||||
uniform vec4 u_baseColor;
|
uniform vec4 u_baseColor : [ 1.0, 0, 0, 1.0 ];
|
||||||
uniform vec4 u_brightColor;
|
uniform vec4 u_brightColor : [ 1.0, 0, 0, 1.0 ];
|
||||||
uniform vec4 u_windowColor;
|
uniform vec4 u_windowColor : [ 1.0, 0, 0, 1.0 ];
|
||||||
uniform float u_zoom;
|
uniform float u_zoom : 0;
|
||||||
uniform float u_time;
|
uniform float u_time : 0;
|
||||||
uniform float u_near;
|
uniform float u_near : 0;
|
||||||
uniform float u_far;
|
uniform float u_far : 1;
|
||||||
|
|
||||||
#ifdef ANIMATE
|
#ifdef ANIMATE
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
|
|
@ -14,7 +14,7 @@ varying vec2 v_texCoord;
|
||||||
|
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
|
||||||
uniform float u_zoom;
|
uniform float u_zoom : 0;
|
||||||
uniform float u_opacity : 1.0;
|
uniform float u_opacity : 1.0;
|
||||||
uniform float u_activeId : 0;
|
uniform float u_activeId : 0;
|
||||||
uniform vec4 u_activeColor : [1.0, 0.0, 0.0, 1.0];
|
uniform vec4 u_activeColor : [1.0, 0.0, 0.0, 1.0];
|
||||||
|
|
|
@ -12,6 +12,8 @@ uniform int u_num_of_spot_lights : 0;
|
||||||
#define MAX_NUM_OF_DIRECTIONAL_LIGHTS 3
|
#define MAX_NUM_OF_DIRECTIONAL_LIGHTS 3
|
||||||
#define MAX_NUM_OF_SPOT_LIGHTS 3
|
#define MAX_NUM_OF_SPOT_LIGHTS 3
|
||||||
|
|
||||||
|
#pragma include "common"
|
||||||
|
|
||||||
struct DirectionalLight {
|
struct DirectionalLight {
|
||||||
vec3 direction;
|
vec3 direction;
|
||||||
vec3 ambient;
|
vec3 ambient;
|
||||||
|
@ -37,7 +39,7 @@ uniform DirectionalLight u_directional_lights[MAX_NUM_OF_DIRECTIONAL_LIGHTS];
|
||||||
uniform SpotLight u_spot_lights[MAX_NUM_OF_SPOT_LIGHTS];
|
uniform SpotLight u_spot_lights[MAX_NUM_OF_SPOT_LIGHTS];
|
||||||
|
|
||||||
vec3 calc_directional_light(DirectionalLight light, vec3 normal, vec3 viewDir) {
|
vec3 calc_directional_light(DirectionalLight light, vec3 normal, vec3 viewDir) {
|
||||||
vec3 lightDir = normalize(-light.direction);
|
vec3 lightDir = normalize(light.direction);
|
||||||
// diffuse shading
|
// diffuse shading
|
||||||
float diff = max(dot(normal, lightDir), 0.0);
|
float diff = max(dot(normal, lightDir), 0.0);
|
||||||
// Blinn-Phong specular shading
|
// Blinn-Phong specular shading
|
||||||
|
|
Loading…
Reference in New Issue