javascript - 如何在 PIXI.JS 的过滤器或片段着色器中更新时间统一?
问题描述
我在一个基本上将整个容器设置为红色的图像精灵上使用了 PIXI.JS 中的片段着色器或过滤器。通过time
制服将所有内容设置为黑色,而不是在红色和黑色之间更改颜色。关于为什么它没有按预期更新的任何提示?
谢谢!
import * as PIXI from 'pixi.js';
// Variables
const width = window.innerWidth, height = window.innerHeight;
let uniforms = {
time: {
type: 'f',
value: 0
}
};
// Fragment shader
const frag = /*glsl*/`
precision mediump float;
uniform float time;
void main() {
float t = sin(time);
gl_FragColor = vec4(t, 0.0, 0.0, 1.0);
}
`;
// Create renderer
const renderer = new PIXI.Renderer({
width,
height
});
const stage = new PIXI.Container();
// Add renderer to DOM
document.body.appendChild(renderer.view);
// Create image sprite from texture
const texture = PIXI.Texture.from('path-to-image');
const image = new PIXI.Sprite(texture);
image.position.set(width / 2, height / 2);
image.scale.set(0.5);
image.anchor.set(0.5, 0.5);
// Add sprite to stage/scene
stage.addChild(image);
// Create ticker
const ticker = new PIXI.Ticker();
ticker.add(animate);
ticker.start();
// Animates renderer
function animate() {
filter.uniforms.time.value += 1/60;
renderer.render(stage);
}
// Create filter that adds fragment shader
let filter = new PIXI.Filter(null, frag, uniforms);
image.filters = [ filter ];
解决方案
1.5 年后我遇到了这个确切的问题。
对我来说,解决方案是不将制服设置为对象。似乎 PIXI 在这里即时处理了一些转换。尝试替换以下
let uniforms = {
time: {
type: 'f',
value: 0
}
};
简单地
let uniforms = {
time: 0 // or 0.0
};
推荐阅读
- python - 如何收集和排序来自多进程的日志输出
- javascript - 如何在 JavaScript 中使用 Google Picker 下载 Google Sheet?
- pandas - 如何开发功能
- c# - 无法访问某些机器上的用户 Exchange 邮箱
- android - 使用 Room DB 自定义 OnConflictStrategy
- r - 仅在 RStudio 中启动时无法加载共享对象
- arrays - 如何在 TypeScript 中直接在数组中声明多个变量
- python - 哪个 dtype 是正确的以防止 numpy.arange() 获得错误的长度?
- azure - 能否将 Azure Monitor 警报保留期延长 30 天以上?
- python-2.7 - 无法在 Python 中的单个数据流作业中动态(使用运行时值提供程序)午餐多个流式管道(N 到 N 管道)