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;
而且它提供了穩定的黃色顏色,所以我有信心顏色在重繪之間穩定。
任何提示?
現在我覺得很傻。沒有辦法獲得我不需要傳遞的2點信息,即將線條定義爲制服(或一點和長度)? – user2278457 2014-10-05 23:07:50
我不知道你爲什麼要使用制服。正如我所說,一個屬性是好的。您甚至可以在幾何着色器中在GPU上實時生成數據。 – derhass 2014-10-05 23:12:27
我沒有看到讓GPU重新計算重繪顏色的危害。 可能仍然比從CPU傳輸數據更好。 – user2278457 2014-10-05 23:17:34