提问人:wandugu 提问时间:10/15/2023 最后编辑:Rabbid76wandugu 更新时间:10/21/2023 访问量:32
在材质着色器中使用 GradientTexture 进行阵列传输的挑战
Challenges in Using GradientTexture for Array Transmission in Material Shader
问:
我最初打算使用统一的数组变量,单位为 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 中接收数组数据类型。有什么建议吗?
答: 暂无答案
评论