【问题标题】:Draw GL_TRIANGLE_STRIP based on centre point and size根据中心点和大小绘制 GL_TRIANGLE_STRIP
【发布时间】:2014-10-24 02:35:52
【问题描述】:

我在 OpenGL ES 2.0 中渲染 TRIANGLE_STRIPS。我想知道,是否可以修改顶点着色器,而不是为其提供 4 个纹理顶点,而是只给它一个代表 TRIANGLE_STRIP 中心的顶点,并带有纹理宽度和高度的参数?

假设我的纹理顶点是:

GLfloat textureVertices[] = {
    x, y
}; 

可以修改顶点着色器以使用texSize 统一,这将代表 TRIANGLE_STRIP 的宽度/高度? :

attribute highp vec4 position;
attribute lowp vec4 inputPointCoordinate;
uniform mat4 MVP;
uniform lowp vec4 vertexColor;
uniform float texSize;

varying lowp vec2 textureCoordinate;
varying lowp vec4 color;

void main()
{
    gl_Position = MVP*position;
    textureCoordinate = inputPointCoordinate.xy;
    color = vertexColor;
}

【问题讨论】:

    标签: opengl-es opengl-es-2.0 vertex-shader


    【解决方案1】:

    不,至少不在顶点着色器中。您需要在顶点着色器中获取具有不同属性值的 3 个不同点,以便您可以在片段着色器中接收插值的坐标。

    您实际上可以做的是将一个中心传递给顶点着色器,该着色器与与顶点坐标相同的矩阵相乘。除此之外,您还需要某种半径(或纹理尺寸向量),如果矩阵也包含比例,则可能需要对其进行缩放。然后您可以获取这两个值并将它们传递给片段着色器(使用可变)。在片段着色器中,您需要根据这两个参数和片段位置计算纹理坐标。

    一个类似的过程用于仅使用 2 个三角形(一个正方形)绘制一个非常漂亮的圆形或球体,但我不建议您这样做,因为您只会损失性能,而且工作量很大...

    【讨论】:

    • 您知道有关如何执行此操作的任何教程吗?我一直在寻找任何成功。或者您可以提供一些示例代码?
    • 试试看这篇文章:stackoverflow.com/questions/11452729/… 虽然这里没有考虑矩阵,但你应该能够轻松处理这个......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多