GPU ベースのパーティクル システムを使用しています。1024*1024 テクスチャの RGB 値として x、y、z 位置を渡すことによって計算された 100 万個のパーティクルがあります。速度についても同じことが行われています。
それらを任意の点から球上の点に移動させようとしています。
計算に使用している現在のシェーダーは、あるポイントから別のポイントに直接移動しています。
現在、質量または速度のテクスチャは使用していません。
// 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) から角度を計算することは問題のままです