2012-05-09 43 views
1

我有一個非常簡單的問題,但我因爲無法找到解決方案而將我的大腦撞在牆上。使用其他浮標的翻轉浮標

我在嵌入式系統中使用着色器處理器,並且由於片段着色器性能不佳而無法使用條件。

我有兩個浮體,既可以是0或1。

欲反轉第一浮子的值,如果第二浮子是1

基本上

if(floatA==1.0) 
    { 
     if(floatB==1.0) 
     { 
      floatB=0.0; 
     } 
     else 
     { 
      floatB=1.0; 
     } 
    } 

- 只是沒有條件,但數學x..X

任何想法? :d

+0

你不應該以這種嚴格的方式來比較浮游物,因爲它們不能保證它們因爲缺乏精確度而保持一定的值。 – djmj

+1

@djmj這通常只是錯誤的。在任何不精確的數學運算後(這可能是這種情況,但是誰知道),它們不能保證保持這樣的值。但將浮點數與精確值(確保可表示,甚至保證是某些操作的結果,肯定是0)進行比較本身並不是一個壞主意。我寧願考慮教條式的*不要比較浮動* - 方法缺乏對基礎浮點表示的理解。 –

+1

@ChristianRau知道這一點,正如你所說的「是誰知道的」,該代碼段沒有人知道爲什麼我會這麼說。如果我閱讀這樣的代碼片段,我假設代碼之前的所有內容。如果將顯示完整的頂點和片段着色器代碼,我的評論可能會不同。仍然投票了你的詳細評論。 – djmj

回答

3

如何:

floatB = (floatA * (1 - floatB)) + ((1 - floatA) * floatB)

如果floatA爲1,則floatB = 1-floatB,否則如果floatA是零,則floatB = floatB;

+0

當我看到您的解決方案時,即將編輯我的答案! –

+1

+1請注意,使用GLSL之類的着色語言時,甚至可以使用內建函數來進行混合('mix(floatB,1.0-floatB,floatA)'),甚至可能比手寫函數更快。 –