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