OpenGL ES:在着色器中定义三角形颜色?

OpenGL ES: define triangles color in shader?

我正在使用 OpenGL ES 2.0 制作 Android 游戏,我有一个关于最佳策略的问题:

我想要一个由多个三角形组成的平面(地面)(就像一个棋盘,每个案例都是 2 个三角形),并且我希望每个三角形都有一种颜色,该颜色将根据其每一帧进行更新到我的 "light" 的距离(可能使用三角形的中心)。但是我不想要带插值的常规照明,整个三角形必须是相同的颜色。

所以我想知道哪种策略最好:

我担心第一个解决方案可能性能不佳,例如,如果我有 1000 个三角形必须每帧更新。

我希望我的问题不会太乱,如果有必要我会尝试说明。

谢谢!

编辑:

我尝试实施第二种解决方案,我有一个看起来像这样的片段着色器:

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...)

我认为使用一个顶点缓冲区会更好。在 pi3d 中,默认安排是通过顶点、顶点+法线、顶点+法线+texture_uv,所以我想在我想做一些非标准着色的地方使用 'spare' 值。

我意识到这可能是外部代码 (python) 需要费力才能完成,但我做了一些缓冲区信息传递 https://github.com/pi3d/pi3d_demos/blob/develop/SpriteMulti.py

您是否已经有了一些要修改的代码,或者您是从头开始?

编辑-为了更清楚,我将传递两个额外的浮点值,表示每个元素的中心,这些值将在顶点着色器中用于计算与光的距离(均匀),该距离将作为变化传递到片段着色器。