2012-12-02 32 views
3

我想成立一​​個float1.0如果一個矢量等於彼此,0.0如果向量不等於GLSL投布爾浮動

if(v1 == v2) floatVal = 1.0 ; 
else floatVal = 0.0 ; 

但它不會是「更快」或優化只是爲了設置

floatVal = (v1 == v2) ; 

但它不起作用。你不能隱式(或明確地)將float轉換爲bool?有沒有辦法做到這一點,或者我必須使用if語句分支?

回答

10

你沒嘗試「浮動(布爾)」功能?

GLSLangSpec.Full.1.20.8.pdf 5.4.1節說,你可以做所有這些轉換。

謝謝。

+2

這仍然在GLSL 4.3,同樣的部分有效,行爲如下:「當一個構造函數用於一個布爾值轉換爲任何 整數或浮點數類型,假的是轉換爲0或0.0,並將true轉換爲1或1.0。「 – Vandroiy

5

CuriousChettai的權利。只需編寫:

floatVal = float(v1 == v2); 

如果您指定的值可能會丟失精度,GLSL會給您一個編譯錯誤。所以,你可以做這樣的事情:

float f = 3;  // works 
int i = 3.0;  // compiler-error 
int j = int(3.0); // works