2016-01-27 332 views
0

我想绘制三个顶点a,b,c的三角形。通常,我会将这三个顶点坐标放在一个数组中,并将其作为属性传递给我的顶点着色器。在OpenGL ES 2.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; 
} 

你怎么能看到,矢量2D命名v_textureCoordinate0在顶点着色器和它的创建内插值在片段着色器中使用。

我希望它能帮助你。

+0

对不起,但我想要的是在顶点着色器中生成a_textureCoordinate0,而不是将其作为属性传递 –

+0

您也可以使用内置变量或常量来确定v_textureCoordinate0的值。我更新示例代码。 – xcesco

+0

我的实现似乎正在工作,将很快粘贴代码。 –