在OpenGL ES 2.0顶点着色器中生成顶点

时间:2016-01-27 12:22:23

标签: opengl-es-2.0 vertex-shader

我正在尝试绘制一个带有三个顶点a,b,c的三角形。通常,我会将这三个顶点坐标放在一个数组中,并将其作为属性传递给我的顶点着色器。

但是,是否可以在顶点着色器本身内生成这些顶点坐标,而不是作为属性传递(即,对应顶点位置的每个顶点坐标值)。如果是,那么支持它的任何示例程序?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以在顶点着色器中创建变量并将其传递给片段着色器。一个例子:

顶点着色器

precision highp float;

uniform float u_time;
uniform float u_textureSize;
uniform mat4  u_mvpMatrix;                   

attribute vec4 a_position;

// This will be passed into the fragment shader.
varying vec2 v_textureCoordinate0;

void main()                                 
{
    // Create texture coordinate
    v_textureCoordinate0 = a_position.xy / u_textureSize;

    gl_Position = u_mvpMatrix * a_position;
}                                             

片段着色器

precision mediump float;

uniform float   u_time;
uniform float   u_pixel_amount;
uniform sampler2D u_texture0;   

// Interpolated texture coordinate per fragment.
varying vec2 v_textureCoordinate0;

void main(void)
{       
    vec2 size = vec2( 1.0 / u_pixel_amount, 1.0 / u_pixel_amount);    
    vec2 uv = v_textureCoordinate0 - mod(v_textureCoordinate0,size);    
    gl_FragColor = texture2D( u_texture0, uv );    
    gl_FragColor.a=1.0;
}

如何看,在顶点着色器中创建了名为 v_textureCoordinate0 的2D矢量,其内插值用于片段着色器。

我希望它可以帮到你。