diff --git a/demos/taxi.html b/demos/taxi.html index dc2edc621e..8b89708488 100644 --- a/demos/taxi.html +++ b/demos/taxi.html @@ -55,7 +55,23 @@ scene.on('loaded', () => { baseColor:'rgb(16,16,16)', windowColor:'rgb(30,60,89)', //brightColor:'rgb(155,217,255)' - brightColor:'rgb(255,176,38)' + brightColor:'rgb(255,176,38)', + lights: [ + { + type: 'directional', + direction: [ 1, 10.5, 12 ], + ambient: [ 0.2, 0.2, 0.2 ], + diffuse: 'red', + specular: [ 0.1, 0.1, 0.1 ] + }, + { + type: 'directional', + direction: [ 1, -10.5, 12 ], + ambient: [ 0.2, 0.2, 0.2 ], + diffuse: 'green', + specular: [ 0.1, 0.1, 0.1 ] + }, + ] }) .render(); diff --git a/src/geom/shader/polygon_frag.glsl b/src/geom/shader/polygon_frag.glsl index 0bc49f7142..8f1780ce9a 100644 --- a/src/geom/shader/polygon_frag.glsl +++ b/src/geom/shader/polygon_frag.glsl @@ -100,7 +100,7 @@ void main() { // if(head ==1.0) { // 顶部亮线 // color = brightColor; // } - color = v_color.rgb; + color = color * v_color.rgb; vec3 foggedColor = fog(color,fogColor,depth); diff --git a/src/layer/render/point/drawFill.js b/src/layer/render/point/drawFill.js index a6ec26dc49..cc2fcf741e 100644 --- a/src/layer/render/point/drawFill.js +++ b/src/layer/render/point/drawFill.js @@ -9,6 +9,7 @@ import * as THREE from '../../../core/three'; import * as PointBuffer from '../../../geom/buffer/point/index'; import DrawStroke from './drawStroke'; import PolygonMaterial from '../../../geom/material/polygonMaterial'; +import { generateLightingUniforms } from '../../../util/shaderModule'; export default function DrawFill(layerData, layer) { const style = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); @@ -34,9 +35,11 @@ export default function DrawFill(layerData, layer) { const material = new PolygonMaterial({ u_opacity: style.opacity, u_activeColor: activeOption.fill, - u_zoom: layer.scene.getZoom() + u_zoom: layer.scene.getZoom(), + ...generateLightingUniforms(style.lights) }, { - SHAPE: true + SHAPE: true, + LIGHTING: true }); material.setDefinesvalue('SHAPE', true); material.depthTest = false; diff --git a/src/layer/render/polygon/drawAnimate.js b/src/layer/render/polygon/drawAnimate.js index b8eed2ab34..beae138076 100644 --- a/src/layer/render/polygon/drawAnimate.js +++ b/src/layer/render/polygon/drawAnimate.js @@ -1,6 +1,8 @@ import * as THREE from '../../../core/three'; import PolygonBuffer from '../../../geom/buffer/polygon'; import PolygonMaterial from '../../../geom/material/polygonMaterial'; +import { generateLightingUniforms } from '../../../util/shaderModule'; + export default function DrawAnimate(layerData, layer) { const style = layer.get('styleOptions'); const { near, far } = layer.map.getCameraState(); @@ -9,7 +11,7 @@ export default function DrawAnimate(layerData, layer) { shape: 'extrude', layerData }); - const { opacity, baseColor, brightColor, windowColor } = style; + const { opacity, baseColor, brightColor, windowColor, lights } = style; const geometry = new THREE.BufferGeometry(); geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); @@ -23,9 +25,11 @@ export default function DrawAnimate(layerData, layer) { u_brightColor: brightColor, u_windowColor: windowColor, u_near: near, - u_far: far + u_far: far, + ...generateLightingUniforms(lights) }, { SHAPE: false, + LIGHTING: true, ANIMATE: true }); const fillPolygonMesh = new THREE.Mesh(geometry, material);