【发布时间】:2016-05-04 09:34:45
【问题描述】:
我正在尝试绘制一个具有三个顶点 a、b、c 的三角形。通常,我会将这三个顶点坐标放在一个数组中,并将其作为属性传递给我的顶点着色器。
但是,是否可以在顶点着色器本身内生成这些顶点坐标,而不是作为属性传递(即对应顶点位置的每个顶点坐标值)。如果是,是否有任何示例程序支持它?
谢谢。
【问题讨论】:
标签: opengl-es-2.0 vertex-shader
我正在尝试绘制一个具有三个顶点 a、b、c 的三角形。通常,我会将这三个顶点坐标放在一个数组中,并将其作为属性传递给我的顶点着色器。
但是,是否可以在顶点着色器本身内生成这些顶点坐标,而不是作为属性传递(即对应顶点位置的每个顶点坐标值)。如果是,是否有任何示例程序支持它?
谢谢。
【问题讨论】:
标签: opengl-es-2.0 vertex-shader
您可以在顶点着色器中创建变量并将其传递给片段着色器。一个例子:
顶点着色器
高精度高浮点; 统一浮动u_time; 统一浮动 u_textureSize; 统一 mat4 u_mvpMatrix; 属性 vec4 a_position; // 这将被传递到片段着色器中。 变化 vec2 v_textureCoordinate0; 无效的主要() { // 创建纹理坐标 v_textureCoordinate0 = a_position.xy / u_textureSize; gl_Position = u_mvpMatrix * a_position; }还有片段着色器:
精度 mediump 浮点数; 统一浮动u_time; 统一浮动 u_pixel_amount; 统一的sampler2D u_texture0; // 每个片段的插值纹理坐标。 变化 vec2 v_textureCoordinate0; 无效主要(无效) { vec2 大小 = 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 是在顶点着色器中创建的,它的插值是在片段着色器中使用的。
希望对你有帮助。
【讨论】: