在材质着色器中使用 GradientTexture 进行阵列传输的挑战

Challenges in Using GradientTexture for Array Transmission in Material Shader

提问人:wandugu 提问时间:10/15/2023 最后编辑:Rabbid76wandugu 更新时间:10/21/2023 访问量:32

问:

我最初打算使用统一的数组变量,单位为 ms。但是,由于制服类型不支持数组类型,因此我求助于使用 来传达数组。我采用了以下方法进行传输,但它无法正确传递数组。我希望分析这背后的原因。gradientTexture

let gradientData = new Float32Array([
    -0.5, -0.5,
    0.5, -0.5
]);

let gradientTexture = new Cesium.Texture({
    context: viewer.scene.context,
    pixelFormat: Cesium.PixelFormat.RG,
    pixelDatatype: Cesium.PixelDatatype.FLOAT,
    flipY: false,
    source: {
        arrayBufferView: gradientData,
        width: 2,
        height: 2,
    }
});

let material = new Cesium.Material({
    fabric: {
        type: 'Flow',
        uniforms: {
            image: './blank.jpg',
            time: 0.0,
            gradientMap: {
                type: 'sampler2D',
                value: gradientTexture
            },
        },
        source: `
        czm_material czm_getMaterial(czm_materialInput materialInput) {
                czm_material material = czm_getDefaultMaterial(materialInput);
                // the value is not correct
                vec2 gradientOri = texture2D(gradientMap, materialInput.st).rg;
                vec2 center = vec2(0.5, 0.5);
                vec2 direction = center - gradientOri;
                float length = length(direction);
                vec2 normalizedDirection = normalize(direction);
                vec2 newCoords = materialInput.st + normalizedDirection * time * 0.05 * length;
                // vec2 newCoords = materialInput.st;
                material.diffuse = texture2D(image, newCoords).rgb;
                return material;
            }
                `
    }
});

我正在寻找一种可行的方法来在 Material Shader 中接收数组数据类型。有什么建议吗?

JavaScript GLSL 着色器 CesiumJS

评论

0赞 Rabbid76 10/16/2023
在问题标题中添加标签是没有意义的。

答: 暂无答案