mirror of https://gitee.com/antv-l7/antv-l7
fix(raster layer): update raster triangle
This commit is contained in:
parent
9b8d3c8f5d
commit
de276d7512
|
@ -131,7 +131,6 @@ export interface IStyleAttribute extends IStyleAttributeInitializationOptions {
|
|||
|
||||
export type Triangulation = (
|
||||
feature: IEncodeFeature,
|
||||
parserData: IParseDataItem,
|
||||
) => {
|
||||
vertices: number[];
|
||||
indices: number[];
|
||||
|
@ -161,7 +160,6 @@ export interface IStyleAttributeService {
|
|||
createAttributesAndIndices(
|
||||
encodedFeatures: IEncodeFeature[],
|
||||
triangulation: Triangulation,
|
||||
parserData: IParseDataItem[],
|
||||
): {
|
||||
attributes: {
|
||||
[attributeName: string]: IAttribute;
|
||||
|
|
|
@ -167,7 +167,6 @@ export default class StyleAttributeService implements IStyleAttributeService {
|
|||
public createAttributesAndIndices(
|
||||
features: IEncodeFeature[],
|
||||
triangulation: Triangulation,
|
||||
parserData: IParseDataItem[],
|
||||
): {
|
||||
attributes: {
|
||||
[attributeName: string]: IAttribute;
|
||||
|
@ -188,7 +187,7 @@ export default class StyleAttributeService implements IStyleAttributeService {
|
|||
vertices: verticesForCurrentFeature,
|
||||
normals: normalsForCurrentFeature,
|
||||
size: vertexSize,
|
||||
} = triangulation(feature, parserData[featureIdx]);
|
||||
} = triangulation(feature);
|
||||
indices.push(...indicesForCurrentFeature.map((i) => i + verticesNum));
|
||||
vertices.push(...verticesForCurrentFeature);
|
||||
if (normalsForCurrentFeature) {
|
||||
|
|
|
@ -351,7 +351,6 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> implements ILayer {
|
|||
} = this.styleAttributeService.createAttributesAndIndices(
|
||||
this.encodedData,
|
||||
triangulation,
|
||||
parserData,
|
||||
);
|
||||
return createModel({
|
||||
attributes,
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
import { IEncodeFeature, IParseDataItem } from '@l7/core';
|
||||
// @ts-ignore
|
||||
import Martini from '@mapbox/martini';
|
||||
export function RasterTriangulation(
|
||||
feature: IEncodeFeature,
|
||||
parserData: IParseDataItem,
|
||||
) {
|
||||
export function RasterTriangulation(parserData: IParseDataItem) {
|
||||
const { coordinates, data, min, max, width, height } = parserData;
|
||||
const maxlength = Math.max(width, height);
|
||||
const gridSize = Math.pow(2, Math.ceil(Math.log2(maxlength))) + 1;
|
||||
|
|
|
@ -24,8 +24,8 @@ interface IRasterLayerStyleOptions {
|
|||
rampColors: IColorRamp;
|
||||
}
|
||||
|
||||
export default class ImageLayer extends BaseLayer<IRasterLayerStyleOptions> {
|
||||
public name: string = 'RasterLayer';
|
||||
export default class RasterLayer extends BaseLayer<IRasterLayerStyleOptions> {
|
||||
public name: string = 'e';
|
||||
protected texture: ITexture2D;
|
||||
protected colorTexture: ITexture2D;
|
||||
|
||||
|
@ -81,24 +81,48 @@ export default class ImageLayer extends BaseLayer<IRasterLayerStyleOptions> {
|
|||
height: imageData.height,
|
||||
flipY: true,
|
||||
});
|
||||
this.models = [
|
||||
this.buildLayerModel({
|
||||
moduleName: 'Raster',
|
||||
vertexShader: rasterVert,
|
||||
fragmentShader: rasterFrag,
|
||||
triangulation: RasterTriangulation,
|
||||
primitive: gl.TRIANGLES,
|
||||
depth: { enable: false },
|
||||
blend: {
|
||||
enable: true,
|
||||
func: {
|
||||
srcRGB: gl.SRC_ALPHA,
|
||||
srcAlpha: 1,
|
||||
dstRGB: gl.ONE_MINUS_SRC_ALPHA,
|
||||
dstAlpha: 1,
|
||||
},
|
||||
},
|
||||
this.models = [this.buildRasterModel()];
|
||||
}
|
||||
private buildRasterModel() {
|
||||
const source = this.getSource();
|
||||
const sourceFeature = source.data.dataArray[0];
|
||||
const triangulation = RasterTriangulation(sourceFeature);
|
||||
this.shaderModuleService.registerModule('raster', {
|
||||
vs: rasterVert,
|
||||
fs: rasterFrag,
|
||||
});
|
||||
|
||||
const { vs, fs, uniforms } = this.shaderModuleService.getModule('raster');
|
||||
const {
|
||||
createAttribute,
|
||||
createElements,
|
||||
createBuffer,
|
||||
createModel,
|
||||
} = this.rendererService;
|
||||
return createModel({
|
||||
vs,
|
||||
fs,
|
||||
attributes: {
|
||||
a_Position: createAttribute({
|
||||
buffer: createBuffer({
|
||||
data: triangulation.vertices,
|
||||
type: gl.FLOAT,
|
||||
}),
|
||||
size: 2,
|
||||
}),
|
||||
},
|
||||
primitive: gl.TRIANGLES,
|
||||
uniforms: {
|
||||
...uniforms,
|
||||
},
|
||||
depth: {
|
||||
enable: true,
|
||||
},
|
||||
elements: createElements({
|
||||
data: triangulation.indices,
|
||||
type: gl.UNSIGNED_INT,
|
||||
count: triangulation.indices.length,
|
||||
}),
|
||||
];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue