根据中心点和大小绘制GL_TRIANGLE_STRIP

时间:2014-10-24 02:35:52

标签: opengl-es opengl-es-2.0 vertex-shader

我在OpenGL ES 2.0中呈现TRIANGLE_STRIPS。我想知道,是否有可能修改顶点着色器,使得它只给它一个顶点代表TRIANGLE_STRIP的中心,而不是为它提供4个纹理顶点,其中一个参数用于纹理宽度和高度?

假设我的纹理顶点是:

GLfloat textureVertices[] = {
    x, y
}; 

是否可以修改顶点着色器以使用texSize制服,这将代表TRIANGLE_STRIP的宽度/高度? :

attribute highp vec4 position;
attribute lowp vec4 inputPointCoordinate;
uniform mat4 MVP;
uniform lowp vec4 vertexColor;
uniform float texSize;

varying lowp vec2 textureCoordinate;
varying lowp vec4 color;

void main()
{
    gl_Position = MVP*position;
    textureCoordinate = inputPointCoordinate.xy;
    color = vertexColor;
}

1 个答案:

答案 0 :(得分:1)

不,至少不在顶点着色器中。您需要使用不同的属性值获取顶点着色器中的3个不同点,以便您可以在片段着色器中接收插值的坐标。

您实际可以做的是将中心传递到顶点着色器,该着色器与顶点坐标相同的矩阵相乘。除此之外,您还需要某种半径(或纹理尺寸矢量),如果矩阵也包含比例,则可能需要缩放。然后,您可以获取这两个值并将它们传递给片段着色器(使用变化)。在片段着色器中,您需要根据这两个参数和片段位置计算纹理坐标。

一个类似的程序用于绘制一个非常漂亮的圆或球体,只使用2个三角形(正方形),但我不建议你这样做,因为你只会失去性能加上它是相当多的工作......