我使用OpenGL ES只绘制2D形状,我必须创建自己的矩阵并将它们传递给着色器。
我只使用3x3矩阵和2个分量向量。我知道,对于2D,仍然有4x4矩阵和3个分量向量,Z设置为1,但我想知道是否可以保留它。
我让所有的矩阵工作,平移旋转和缩放所有的工作。我所缺少的是一个“投影”矩阵,我所有的位置都在-1到1之间,而且我的形状是变形的,因为我的手机的纵横比不是1。我需要一个矩阵,用正确的比例将我所有的坐标映射到屏幕上。
通常,您会使用一个正交投影矩阵来完成这个映射,但是这些都是4x4。如何使用3x3矩阵进行此映射?如果我不能,有没有办法保持矩阵3x3,并以其他方式映射它?(我可以在没有矩阵的情况下插值坐标,但这不能解决比率问题)
为了澄清,这里是我的顶点着色器,如您所见,我使用的是一个3x3转换矩阵和2个组件向量:
uniform mat3 u_transform_mat;
attribute vec2 a_vert_pos;
attribute vec2 a_vert_uv;
varying vec2 v_vert_uv;
void main()
{
v_vert_uv = a_vert_uv;
gl_Position = vec4(u_transform_mat * vec3(a_vert_pos, 1.0), 1.0);
} 发布于 2014-12-28 22:51:09
在这种情况下,你真正需要做的“投影”矩阵就是比例。
比如说,你有景观屏幕尺寸,你的纵横比是1.5。随着您现在的转换,NDC范围的-1,1将扩大,以适应屏幕的宽度,这意味着,这是一个因子1.5的水平方向相对于垂直方向。
你想要保持比例不变的是把范围- 1.5,1.5的x方向和范围-1,1的y方向到屏幕上。或者在更一般的情况下,-aspect,在x方向的方面。
要将-aspect的方面范围映射为-1,1的NDC范围,您需要将x坐标缩放为(1 /方面)。因此,您的“投影”矩阵是一个只在x方向上缩放的非均匀缩放矩阵:
[ 1.0f / aspectRatio 0.0f 0.0f ]
P = [ 0.0f 1.0f 0.0f ]
[ 0.0f 0.0f 1.0f ]https://stackoverflow.com/questions/27681177
复制相似问题