【发布时间】:2015-04-24 08:34:37
【问题描述】:
我正在使用 OpenGL ES 2.0 制作一款 Android 游戏,我有一个问题是什么是最佳策略:
我希望有一个由多个三角形组成的平面(地面)(如棋盘,每种情况为 2 个三角形),并且我希望每个三角形都有一种颜色,该颜色将根据其到我的“光”(可能使用三角形的中心)。但我不想要带有插值的常规照明,整个三角形必须是相同的颜色。
所以我想知道哪种策略最好:
- 为每个三角形创建一个 Java 类,在运行时更新其颜色,然后使用基本片段着色器绘制一个三角形,并将颜色作为统一传递,
- 仍然有一个 Triangle 类,但它会将参数传递给着色器(到灯光的距离等...),因此可以在着色器中确定颜色,
- 或一次绘制所有三角形,使用巨大的顶点缓冲区和“绘制顺序”缓冲区,但在这种情况下,我不知道是否可以在片段着色器中设置三角形中心位置。
如果我有 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...)
【问题讨论】:
标签: android opengl-es opengl-es-2.0 shader