我的顶点着色器中有一个统一的值,该值可以从0更改为1,而无需插值。但是,我希望随着时间的推移进行插值,但是我不想在Javascript中(从CPU)执行此操作。我希望它在更改时(从某些用户输入发生)从0插值到1(或插值)。
(我确实有一个递增的uTime
制服,我想可以用于此问题?]
我希望这足以清楚地说明我的问题。 TIA。
我想,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