根据时间内插变化的值(glsl)

问题描述 投票:0回答:1

我的顶点着色器中有一个统一的值,该值可以从0更改为1,而无需插值。但是,我希望随着时间的推移进行插值,但是我不想在Javascript中(从CPU)执行此操作。我希望它在更改时(从某些用户输入发生)从0插值到1(或插值)。

(我确实有一个递增的uTime制服,我想可以用于此问题?]

我希望这足以清楚地说明我的问题。 TIA。

javascript glsl shader
1个回答
0
投票

我想,uTime包含以毫秒为单位的时间。将值除以时间跨度,得到的值在时间跨度中递增1。该值的小数部分连续从0.0变为1.0,并再次从0.0开始。数字的小数部分可以通过fract计算。例如:

fract

[对于[Hermite插值] uniform float uTime; // time in milliseconds void main() { const timespan = 3000.0; // e.g. 3 seconds float w = fract(uTime / timespan); // [...] } ),请另外使用https://en.wikipedia.org/wiki/Hermite_interpolation

smoothstep

使用smoothstep可以达到另一个不错的效果。 uniform float uTime; // time in milliseconds void main() { const timespan = 3000.0; // e.g. 3 seconds float w = smoothstep(0.0, 1.0, frat(uTime / timespan)); // [...] } 根据sin [0.0,2 * PI]中的角度给出一个在-1.0和1.0之间连续变化的值,例如:]

sin
© www.soinside.com 2019 - 2024. All rights reserved.