我正在使用基於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被鼠標指針爲float(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)的剩餘一個問題
感謝您的回覆。我其實有點工作。角度的計算在着色器中通過trig - 計算從當前粒子位置到鼠標pos(作爲球體的中心)的一條線,並移向與該線相交的球體上的點。令人驚歎的煤渣代碼工作BTW。我發現煤渣的工作環境要比openframeworks更清潔。但正如我剛剛說的,剛開始使用OpenGL – thepaperboy
酷,那麼你應該在這裏發佈你的着色器作爲你的問題的答案(它甚至可能是部分工作)。我完全有興趣查看/測試使用球座標的方法。 – num3ric