2
我使用頂點和片段着色器對繪製圓柱體仿冒者進行分子可視化。着色器在屏幕上呈現訂單500.000個圓柱體(債券)。顯然,着色器優化是一個問題。GLSL:確定向量是否爲零
對於每個渲染柱面,我必須確定某個vec3,比如說u是不是零向量。我可能會這樣做:
dot(u,u) != 0.0
(u.x != 0.0) || (u.y != 0.0) || (u.z != 0.0)
any(notEqual(u, vec3(0.0, 0.0, 0.0)))
這樣做的最快方法是什麼?以上的替代解決方案是值得歡迎的。
最好的問候,
的Mads
您是否只關心矢量對於所有組件都不是*** *** * 0.0 *的情況?由於這是浮點運算,因此在很多情況下,如果使用筆和紙進行數學運算,它將完全以** 0.0 **的形式出現,但在着色器中完成時可能爲** +/- 0.0000 ...... 1 **實際上,只有當您想要針對某個特定值測試浮點數時,您才明確地將其設置爲某個值,或者知道數學不會因精度錯誤而受到影響。 –
當我顯示圓柱體時,需要將它旋轉到位,即沿着它的軸線對齊。爲此,我計算u = cross(v,z),其中v是圓柱軸,z是z軸,軸。如果u!= 0,它應該被歸一化,即u = normalize(u)。如果圓柱體(鍵)沿z軸對齊,則u = 0的情況很容易發生。所以我需要檢查u!= 0,並且希望儘可能高效地做到這一點。 – repoman