2012-06-08 105 views
1

我有一個用兩個三角形做成的正方形。 左上角應該是紅色的,右下角應該是藍色的。現在我想要一個從左上角到右下角的線性漸變。OpenGL ES - android - 帶兩個三角形的方形 - 線性漸變?

我不想在右上角和左下角選擇顏色。我試圖給alpha 0,但這不起作用。我看到了黑色。

 float vertices[] = 
    { 
     -1.0f, -1.0f, 
     1.0f, -1.0f, 
     -1.0f, 1.0f, 
     1.0f, 1.0f 
    }; 

    byte maxColor=(byte)255; 

    byte colors[] = 
    { 
     maxColor,  0,  0, maxColor, 
     0,    0,  0,  0, 
     0,    0,maxColor, maxColor, 
     0,    0,  0,  0 
    }; 

    byte indices[] = 
    { 
     0, 3, 1, 
     0, 2, 3 
    }; 

有沒有人有一個想法如何做到這一點?

編輯:

我已經解決了不同的問題。我用從上到下的漸變填充廣場。然後我把這個方格轉過45度,並將它縮小一點。

感謝您的答案。

+0

你是否啓用了alpha混合? http://www.opengl.org/archives/resources/faq/technical/transparency.htm – Nobody

+0

你真的想要那些無色的邊緣融合(是透明的),否則改變alpha是沒有意義的?或者你只是想讓他們從線性漸變中自動獲取顏色,而不需要指定顏色? –

+0

我希望他們從線性漸變中自動獲取顏色,而不需要指定顏色。是的,啓用alpha混合。 – user1405328

回答

0

好吧,如果你想在四邊形上得到一個線性漸變,其他兩條邊從插值中自動獲得它們的顏色,那麼不要惹上alpha,它通常只用於透明效果。

不幸的是,您不能只爲某些頂點指定顏色併爲其他頂點自動插值。光柵化器不僅神奇地使用線性漸變,而且還使用來自其他基元的信息。它只是插入原始圖元(單個三角形)頂點的顏色。所以你需要給你的其他頂點一些顏色。

但在你的情況下,這很容易。你的頂點實際上是沿着「梯度」兩個半方式,從而你可以自己只是做插值,給他們正確的顏色,你的情況(128, 0, 128)(+ -1,但誰在乎):

byte colors[] = 
{ 
    255, 0, 0, 255, 
    128, 0, 0, 255, 
     0, 0, 255, 255, 
    128, 0, 128, 255 
}; 

光柵化器獨立插入各個三角形的事實可能會引入一些偏離純梯度的插值僞影(儘管在您的情況下可能不會)。在這種情況下,如果四邊形的對角線(兩個三角形之間的邊界)沿着漸變或通過漸變,則可能會有所不同。

+0

這看起來不錯。字節顏色[] = { 255,0,0,255, 128,0,128,255, ,0,0,255,255, 128,0,128,255, }但是,什麼是,當我使用隨機顏色。是這樣,我必須拿走一半。 + -1? – user1405328

+0

@ user1405328嗯,你有線性漸變,你的角落在漸變的中途,所以它們的值是兩個終點顏色的50-50插值。當然這相對於投影到漸變線上的角落頂點的位置而變化。 –