Cesium对多个多边形进行图片贴图,每个多边形大小不一样,该怎么设置repeat值?

发布于 2023-09-01 23:32:12

通过Primitive加载多个面对象,每个面对象的大小不一样,设置贴图时会有的拉伸,该怎么样设置repeat值,才能保证贴图不被拉伸呢?
222.png

查看更多

关注者
0
被浏览
1.4k
1 个回答
地虎降天龙
地虎降天龙 图形社区官方人员 2023-09-03
也许宇宙中最反直觉的真理是,你给别人的越多,你得到的也越多。

研究的也不是很深,尝试着看剖析问题看看,有翻了之前的文章看了下:
Fabric 材质 上
Fabric 材质 下
本来想尝试看看 repeat的回调的函数,结果发现没有好的解决方案。
只能尝试更改默认的着色器代码:

let appear = new Cesium.MaterialAppearance({
                flat :true ,
                material: new Cesium.Material({
                        translucent:false,
                        fabric : {
                            type :`Image`,
                            uniforms : {
                                image:`./static/images/symbol/0301.png`
                            }
                        },
                    }),
                vertexShaderSource://重点更改顶点着色器
                    `
                        // GLSL 300 语法,顶点着色器
                        in vec3 position3DHigh;
                        in vec3 position3DLow;
                        in vec3 normal;
                        in vec2 st;
                        in float batchId;
                        out vec3 v_positionEC;
                        out vec3 v_normalEC;
                        out vec2 v_st;
                        void main() {
                          vec4 p = czm_computePosition();
                          v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates
                          v_normalEC = czm_normal * normal;                         // normal in eye coordinates
                          v_st = st;
                          gl_Position = czm_modelViewProjectionRelativeToEye * p;
                        }
                    `
                });
//appear.fragmentShaderSource 片元着色器
//appear.vertexShaderSource 顶点着色器
        
let primitive = new Cesium.Primitive({
    geometryInstances: instances,
    appearance: appear
});

下面是说明:
image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览