Я использую геометрию для отображения миллионов точек по цезию. Но когда я увеличиваю или меняю статус камеры. это происходит, чтобы иметь муар. я попытался изменить float32array на float64array и установить точность highp float в glsl как в vs, так и в fs. все еще не работает. как решить эту проблему?
вот мой результат рендеринга:
рендер результат1
рендеринг результат *
вот мой код:
createPoints: function (option) {
if (!option) return;
var color = option.color ? option.color : Cesium.Color.WHITE
var data = Array.isArray(option.data) ? option.data : {}
if(data.length==0)return null;
var size = isNaN(option.size)?'1.0':parseFloat(option.size).toFixed(1);
var cartesians = Cesium.Cartesian3.fromDegreesArray(data);
var postionsTemp = [];
// var colorsTemp = [];
var indicesTesm = [];
for (var i = 0; i < cartesians.length; i++) {
postionsTemp.push(cartesians[i].x);
postionsTemp.push(cartesians[i].y);
postionsTemp.push(cartesians[i].z);
// colorsTemp.push(color.red);
// colorsTemp.push(color.green);
// colorsTemp.push(color.blue);
// colorsTemp.push(color.alpha);
}
var positions = new Float64Array(postionsTemp);
// var colors = new Float32Array(colorsTemp);
var config = {
attributes: {
position: new Cesium.GeometryAttribute({
componentDatatype: Cesium.ComponentDatatype.DOUBLE,
componentsPerAttribute: 3,
values: positions
})
},
boundingSphere: Cesium.BoundingSphere.fromVertices(positions),
primitiveType: Cesium.PrimitiveType.POINTS,
};
// config.attributes.color = new Cesium.GeometryAttribute({
// componentDatatype: Cesium.ComponentDatatype.FLOAT,
// componentsPerAttribute: 4,
// values: colors
// });
var geometry = new Cesium.GeometryInstance({
id: option.id ? option.id : new Date().getTime(),
geometry:
new Cesium.Geometry(config)
});
var primitive = new Cesium.Primitive({
geometryInstances: [geometry],
appearance: new Cesium.Appearance({
renderState: {
// blending: Cesium.BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,
// depthTest: { enabled: true },
// depthMask: true
},
vertexShaderSource:
`precision highp float;
attribute vec3 position3DHigh;
attribute vec3 position3DLow;
varying vec4 v_color;
attribute float batchId;
void main()
{
vec4 p = czm_computePosition();
v_color =vec4(`+color.red+`,`+color.green+`,`+color.blue+`,`+color.alpha+`);
p = czm_modelViewProjectionRelativeToEye * p;
gl_Position = p;
gl_PointSize=`+ size + `;` + `
}
`,
fragmentShaderSource:
`
precision highp float;
varying vec4 v_color;
void main()
{
float d = distance(gl_PointCoord, vec2(0.5,0.5));
if(d < 0.5){
gl_FragColor = v_color;
}else{
discard;
}
}
`
})
});
window._cesium.scene.primitives.add(primitive);
return primitive;
}