m0_52441527 2023-02-06 17:41 采纳率: 0%
浏览 35

vite-plugin-cesium版方法实3dtiles渐变效果导致viewer.scene.pick方法报错

问题遇到的现象和发生背景

使用vite-plugin-cesium版方法实现了3dtiles渐变效果(https://blog.csdn.net/qq_42425561/article/details/127617840?spm=1001.2014.3001.5501

遇到的现象和发生背景,请写出第一个错误信息

但是在后续调用viewer.scene.pick方法时出现的报错

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
tile.tileVisible.addEventListener(function (res) {
                    let content = res.content;
                    let featuresLength = content.featuresLength;
                    for (let i = 0; i < featuresLength; i += 2) {
                        let feature = content.getFeature(i);
                        let model = feature.content._model;
                        if (model && model._pipelineResources) {
                            let program = model._pipelineResources[1];
                            const color = `vec4(0,187.5/255.,1.,1.)`;
                            program._fragmentShaderSource.sources[0] = `
                                uniform vec2 model_iblFactor;
                                uniform mat3 model_iblReferenceFrameMatrix;
                                uniform float model_luminanceAtZenith;
                                uniform float u_metallicFactor;
                                uniform float u_roughnessFactor;
                                uniform int model_featuresLength;
                                uniform sampler2D model_batchTexture;
                                uniform vec4 model_textureStep;
                                vec4 model_textureDimensions = vec4(1.0);
                                uniform float model_colorBlend;
                                uniform bool model_commandTranslucent;
                                uniform sampler2D model_pickTexture;
                                in vec3 v_positionWC;
                                in vec3 v_positionEC;
                                in vec3 v_normalEC;
                                in vec3 v_positionMC;
                                in float v_featureId_0;
                                struct SelectedFeature
                                {
                                    int id;
                                    vec2 st;
                                    vec4 color;
                                };
                                struct FeatureIds
                                {
                                    int featureId_0;
                                };
                                vec2 computeSt(float featureId)
                                {
                                    float stepX = model_textureStep.x;
                                    float centerX = model_textureStep.y;

                                    #ifdef MULTILINE_BATCH_TEXTURE
                                    float stepY = model_textureStep.z;
                                    float centerY = model_textureStep.w;

                                    float xId = mod(featureId, model_textureDimensions.x); 
                                    float yId = floor(featureId / model_textureDimensions.x);
                                    
                                    return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
                                    #else
                                    return vec2(centerX + (featureId * stepX), 0.5);
                                    #endif
                                }
                                void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds)
                                {   
                                    int featureId = featureIds.SELECTED_FEATURE_ID;
                                    if (featureId < model_featuresLength)
                                    {
                                        vec2 featureSt = computeSt(float(featureId));

                                        feature.id = featureId;
                                        feature.st = featureSt;
                                        feature.color = texture(model_batchTexture, featureSt);
                                    }
                                    else
                                    {
                                        feature.id = model_featuresLength + 1;
                                        feature.st = vec2(0.0);
                                        feature.color = vec4(1.0);
                                    }

                                    #ifdef HAS_NULL_FEATURE_ID
                                    if (featureId == model_nullFeatureId) {
                                        feature.id = featureId;
                                        feature.st = vec2(0.0);
                                        feature.color = vec4(1.0);
                                    }
                                    #endif
                                }
                                SelectedFeature selectedFeature;
                                out vec4 vFragColor;
                                void main(){
                                    vec4 position = czm_inverseModelView * vec4(v_positionEC,1.);//获取模型的世界坐标
                                    float buildMaxHeight = 150.0;//建筑群最高高度 配渐变色
                                    float buildMaxLightHeight = 300.0;//建筑群光圈运动最大高度
                                    vFragColor = ${color};//赋予基础底色
                                    vFragColor *= vec4(vec3(position.y / buildMaxHeight ), 1.0);//根据楼层高度比例渲染渐变色
                                    float time = abs(fract(czm_frameNumber / 360.0)-0.5)*2.;//动画频率 约束在(0,1) 更改频率修改360.0
                                    float diffuse = step(0.005, abs(clamp(position.y / buildMaxLightHeight, 0.0, 1.0) - time));//根据帧数变化,光圈颜色白色,由底部朝上一丢丢(0.05)开始逐渐上移显现.
                                    vFragColor.rgb += vFragColor.rgb * (1.0 - diffuse );//单纯叠加颜色 感兴趣的可以mix混合下
                                }
                            `;
                        }
                    }
                });

运行结果及详细报错内容

渲染效果没有问题,但是一旦调用viewer.scene.pick方法就会报错,导致地图的点击事件无法使用,但只要把该图层隐藏就能够正常调用viewer.scene.pick方法

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-02-09 10:14
    关注

    你把报错截图发给我看一下

    评论

报告相同问题?

问题事件

  • 创建了问题 2月6日

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序