2014-10-05 54 views
0

我想繪製一個2維線有兩種顏色之間的平滑漸變。我的應用程序允許我單擊並拖動,線段的第一個點是第一個點擊點,線的第二個點在鼠標光標位置之後。奇怪的OpenGL片段着色器行爲與gl_PointCoord

我使用glDrawArrays(GL_LINES, 0, points.size());繪製線條,points是一個2索引的點數組。

線繪製精細,點擊和拖動來移動工程行,但我有我的片段着色器解釋的行爲:

uniform vec4 color1; //Color at p1 
uniform vec4 color2; //Color at p2 

out vec4 fragColor;  
void main() 
{ 
    //Average the fragment positions 
    float weight = (gl_PointCoord.s + gl_PointCoord.t) * 0.5f; 

    //Weight the first and second color 
    fragColor = (color1 * weight) + (color2 * (1.0f - weight)); 
} 

color1是紅色的,color2是綠色的。

當我拖動我的線時,它會在完全呈紅色,完全呈綠色,我渴望的漸變或在每個屏幕上重新繪製紅色和綠色的某種固體混合物之間跳動。

我懷疑我使用gl_PointCoord錯誤,但他們在shader.I我不能檢查值試圖在我的着色器中的以下內容:

fragColor = (color1 + color2) * 0.5f; 

而且它提供了穩定的黃色顏色,所以我有信心顏色在重繪之間穩定。

任何提示?

回答

3

gl_PointCoord僅定義爲原始。使用它與GL_LINES只是未定義的行爲,永遠不會工作。

如果你想要一個平滑的漸變,你應該添加一個weight屬性到你的線頂點,並分別設置爲0或1的開始和結束點。

+0

現在我覺得很傻。沒有辦法獲得我不需要傳遞的2點信息,即將線條定義爲制服(或一點和長度)? – user2278457 2014-10-05 23:07:50

+0

我不知道你爲什麼要使用制服。正如我所說,一個屬性是好的。您甚至可以在幾何着色器中在GPU上實時生成數據。 – derhass 2014-10-05 23:12:27

+0

我沒有看到讓GPU重新計算重繪顏色的危害。 可能仍然比從CPU傳輸數據更好。 – user2278457 2014-10-05 23:17:34

相關問題