我正在使用的OpenGL ES 2.0的安卓遊戲,我對什麼是最好的策略問題:OpenGL ES:在着色器中定義三角形顏色?
我想有由多個三角形的平面(地面)(如棋盤,每個案例爲2個三角形),並且我希望每個三角形都有一個顏色,根據它與我的「光線」的距離(可能使用三角形的中心)每幀將更新一個顏色。但我不想用插值法進行常規照明,整個三角形必須是相同的顏色。
所以我想知道它的策略是最好的:
- 對每個三角形在運行時更新它的顏色,然後得出一個基本的片段着色器的三角形的Java類,通過顏色的統一的,
- 仍然有一個三角形類,但它將參數傳遞給着色器(到光線的距離等),所以可以在着色器中確定顏色,或者一次繪製所有三角形,一個巨大的頂點緩衝區和一個「繪製順序」緩衝區,但在這種情況下,我不知道是否有可能使三角形中心點po在片段着色器中選擇。
我擔心第一個解決方案可能會有低性能,如果我有1000個三角形必須每幀更新。
我希望我的問題不是太亂,我會盡力說明它,如果有必要。
謝謝!
編輯:
我tryed執行第二方案,和我有一個看起來像一個片段着色器:
uniform vec4 vMinColor;
uniform vec4 vMaxColor;
uniform vec3 vLightPosition;
uniform vec4 vCenterPosition;
uniform float vLightRadius;
uniform float vNoise;
void main(){
float dist = distance(vLightPosition, vCenterPosition);
if(dist > vLightRadius){
gl_FragColor = vMaxColor;
} else {
vec4 colorDiff = vMaxColor - vMinColor;
float shade = floor(10*dist/LightRadius)/10;
shade = shade + vNoise;
vec4 color = vMinColor + shade*vMaxColor;
gl_FragColor = color;
}
}
我不知道它的工作原理,但。 (其實我敢肯定,當使用glGetUniformLocation傳遞制服時,我得到一個錯誤502)。
嗯...我不知道我真的很明白你的代碼很抱歉^^'我不是那個熟悉python的傢伙,根本不用pi3d。你能告訴我我必須看的線嗎? –
剛剛看到你的「編輯」。我想過類似的東西(據我所知,變化可以從頂點傳遞給片段着色器嗎?),但是我可以計算頂點着色器中三角形的中心嗎?我以爲我只知道當前頂點的知識。 –
羅賓,我會創建一個緩衝區傳遞給gpu與glBufferData()有vx,vy,vz,cx,cy,cz [NB錯誤在我的編輯中我說2個額外的浮動!]其中cx,cy,cz將是三角形的中心(所以會重複3次),中心座標將作爲屬性vec3在頂點着色器中拾取。而且,是的,頂點着色器只能「知道」自己的屬性,並且不能考慮其他頂點進行計算。 – paddyg