我强烈建议阅读“Learning webGL”中的教程。
对于四边形的每个顶点,您发送其“UV 坐标”。UV 坐标是 vec2 数据,它告诉纹理的哪个部分与顶点绑定。
例如,(0,0) uv 代表纹理的左上角,而 (0.3, 0.4) 代表纹理上对应于纹理 30% 宽度和 40% 高度的位置。
在 GLSL 着色器中,有一个特殊的函数——texture2D,用法如下:
uniform sampler2D uTexture;
varying vec2 vUV;
void main()
vec4 color_from_texture = texture2D ( uTexture, vUV );
gl_FragColor = color_from_texture;
}
这称为采样纹理,您可以通过调用 texture2D 函数在某个位置从纹理中读取数据。
因此对于四边形,顶点的位置为 (x1, y1), (x2, y1), (x1, y2), (x2, y2),它们对应的 UV 坐标为 (0.0, 0.0), (1.0, 0,0 ), (0.0, 1.0), (1.0, 1.0)。请注意我们是如何通过从一个点到另一个点完全定义 UV 坐标来拉伸纹理的。
顶点着色器看起来像这样:
attribute vec2 aUV;
attribute vec2 aVertexPos;
varying vec2 vUV;
void main() {
vUV = aUv;
gl_Position = vec4( aVertexPos, 1.0); // maybe modelViewMatrix * projMatrix * vec4(aVertexPos, 1.0)
}
着色器将在组合一个三角形的顶点之间插入 UV 坐标,因此每个片段都会从 UV 中获得自己的插值值,从而对不同的纹理数据进行采样。
仔细阅读这个,然后,创建四边形应该很容易:
http ://learningwebgl.com/blog/?p=507
希望这可以帮助。
现场示例:http ://abstract-algorithm.com/quad.html