标签:scale 2021SC deltaTime Claygl vec3 SDUSC array 每秒 out
一、Particle.js
Particle.prototype.update
Particle.prototype.update = function(deltaTime) {
if (this.velocity) {
vec3.scaleAndAdd(this.position.array, this.position.array, this.velocity.array, deltaTime);
}
if (this.angularVelocity) {
vec3.scaleAndAdd(this.rotation.array, this.rotation.array, this.angularVelocity.array, deltaTime);
}
};
(1)deltaTime介绍
如上述代码可见,函数参数有“deltaTime”,称为增量时间。这一概念十分重要故而先说明其含义。delta(即Δ),常用来表示前后变化差距,而deltaTime则是代表了每一帧间时间的差距。
影视游戏中的渲染是按帧进行的。
当物体每秒移动30米,即30m/s,若以30帧每秒运行,则每帧的位移为一米;当其以60帧每秒运行时,若是仍按照每帧位移一米,则结果变成60m/s,这是显然错误的。
故需要deltaTime,其可以理解为完成上一帧所需时间或是说两帧之间的间隔时间。所以将速度(每秒移动的距离)乘以deltaTime(两帧间隔时间),获得的便是每帧移动的距离(m/帧)。这样只需要获取当前deltaTime,便可以正常渲染画面,而不用担心因为帧率不同而导致结果不同。
(2)更新速度
vec3.scaleAndAdd = function(out, a, b, scale) {
out[0] = a[0] + (b[0] * scale);
out[1] = a[1] + (b[1] * scale);
out[2] = a[2] + (b[2] * scale);
return out;
};
通过以上函数更新速度和角速度,用3个方向的速度乘以增量时间求得变化距离,求得当前位置,并赋值,返回新的位置数组。
标签:scale,2021SC,deltaTime,Claygl,vec3,SDUSC,array,每秒,out 来源: https://blog.csdn.net/leaf_er/article/details/122160564
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。