【问题标题】:Generating Vertices in OpenGL ES 2.0 Vertex Shader在 OpenGL ES 2.0 顶点着色器中生成顶点
【发布时间】:2016-05-04 09:34:45
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: opengl-es-2.0 vertex-shader


    【解决方案1】:

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

    顶点着色器

    高精度高浮点; 统一浮动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 是在顶点着色器中创建的,它的插值是在片段着色器中使用的。

    希望对你有帮助。

    【讨论】:

    • 抱歉,我想要的是在顶点着色器中生成 a_textureCoordinate0 而不是将其作为属性传递
    • 您也可以使用内置变量或常量来确定 v_textureCoordinate0 的值。我更新示例代码。
    • 我的实现现在似乎正在运行,很快就会粘贴代码。
    • 您有没有机会在@udayshukla 某处发布您的sn-p?我也对这个问题感兴趣..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多