我正在使用基于 GPU 的粒子系统。通过将 x、y、z 位置作为 1024*1024 纹理上的 rgb 值传递来计算一百万个粒子。他们的速度也是如此。
我试图让它们从任意点移动到球体上的一个点。
我当前用于计算的着色器正在从一个点直接移动到另一个点。
我目前没有使用质量或速度纹理
// float mass = texture2D( posArray, texCoord.st).a;
vec3 p = texture2D( posArray, texCoord.st).rgb;
// vec3 v = texture2D( velArray, texCoord.st).rgb;
// map into 'cinder space'
p = (p * - 1.0) + 0.5;
// vec3 acc = -0.0002*p; // Centripetal force
// vec3 ayAcc = 0.00001*normalize(cross(vec3(0, 1 ,0),p)); // Angular force
// vec3 new_v = v + mass*(acc+ayAcc);
vec3 new_p = p + ((moveToPos - p) / duration);
// map out of 'cinder space'
new_p = (new_p - 0.5) * -1.0;
gl_FragData[0] = vec4(new_p.x, new_p.y, new_p.z, mass);
//gl_FragData[1] = vec4(new_v.x, new_v.y, new_v.z, 1.0);
moveToPos 是作为浮点数的鼠标指针 (0.0f > 1.0f) 坐标系正在从 (0.5,0.5 > -0.5,-0.5) 转换为 (0.0,0.0 > 1.0,1.0)
我对矢量数学以及让我感到困惑的计算完全陌生。我知道我需要使用以下公式:
x=Rsinφcosθ
y=Rsinφsinθ
z=Rcosφ
但是从 moveToPos(xyz) > p(xyz) 计算角度仍然是一个问题