在几何着色器中将点转换为Triangle_strip,如何传递UV

时间:2014-12-18 13:23:10

标签: opengl

我目前正在尝试将点传递给自定义编写的精灵批处理器,现在我已经拥有它,所以点得到位置并使用尺寸来创建四边形的三角形条带。我的问题是,如果几何着色器获得单个点,那么如何将纹理坐标传递给片段着色器?

我也试图考虑纹理锯齿,因此纹理坐标可能不总是0到1

1 个答案:

答案 0 :(得分:2)

那么,你发出4个独特的顶点吗?只需在几何着色器中为您发出的每个角分配[ 0.0 1.0 ]范围内的不同坐标,其中(0,0)是左下方的图片和(1,1)是右上角。

考虑以下几何着色器:

#version 330

layout (points) in;
layout (triangle_strip, max_vertices = 4) out;

out vec2 tex_coord;

void main (void) {
  const vec2 coordinates [] = vec2 [] (vec2 (0.0f, 0.0f),
                                       vec2 (1.0f, 0.0f),
                                       vec2 (1.0f, 1.0f),
                                       vec2 (0.0f, 1.0f));

  for (int i = 0; i < 4; i++) {
    gl_Position = gl_in [0].gl_Position + vec4 (coordinates [i], 0.0f, 0.0f);
    tex_coord   =                               coordinates [i];
    EmitVertex ();
  }
}