原理
-
- 各个点的坐标减去x0, y0坐标, 平移到(0,0)处
-
- 各个点的坐标除以宽高, 占据第一象限(0,1)
-
- 各个点的坐标诚2, 再减去1, 铺满[-1,1]坐标

实现(只实现2维, 3维处理z轴即可)
attribute vec2 a_Position;
uniform float u_WidthDiff;
uniform float u_HeightDiff;
uniform float u_X0;
uniform float u_Y0;
void main() {
float XPosition = (a_Position.x - u_WidthDiff)
float YPosition = (a_Position.y - u_HeightDiff)
gl_Position = vec4(XPosition, YPosition, 0.0, 1.0);
}
...// vertexes: 顶点坐标数组(左下到右上)
const minX = vertexes[0]
const maxX = vertexes[vertexes.length - 2]
const minY = vertexes[1]
const maxY = vertexes[vertexes.length - 1]
const newVertexes = vertexes.map((item, index) => {
if (index % 2 === 0) {
return (item - minX) / (maxX - minX) * 2 - 1
} else {
return (item - minY) / (maxY - minY) * 2 - 1
}
}