我刚刚开始玩OpenGL ES 2.0,我设法绘制了256x256图像并填充了整个视口(大小为320x460)。图像被缩放,如下面的截图所示,但这不是我们想要的,我想要的是从指定的2D坐标绘制原始尺寸的图像,比如从坐标(10,10)到坐标(266,266) ,看起来我需要某种投影,但我不太了解投影,我不知道如何开始。
非常感谢任何建议。
修改
我刚刚找到this,现在我知道这是因为我指定的顶点填满了整个视口。现在我的问题是如何将我的图像映射到纹理坐标系?如何计算4个顶点中每个顶点的X
和Y
坐标,以便图像可以恰好适合纹理表面而不进行缩放?
EDIT2
非常感谢@Slartibartfast,它就是这么简单,我感到非常愚蠢,以至于我在第一时间没有把它弄好。
如果其他人需要这个,以下是我指定从左上角画出那只小可爱驴的顶点:
typedef struct {
float position[2];
float textureCoor[2];
} Vertex;
const Vertex vertices[] = {
{{-1, 1}, {0, 0}},
{{0.6, 1}, {1, 0}},
{{0.6, -0.113}, {1, 1}},
{{-1, -0.113}, {0, 1}},
};
const GLubyte indices[] = {
0, 1, 2,
2, 3, 0
};
答案 0 :(得分:1)
据我所见。如果要将图像精确映射到屏幕,则必须相应地缩放需要指定的顶点。
您在X和Y维度中使用了从-1到1的坐标。现在,它指定了整个屏幕尺寸,您可以在指定视口时访问这些尺寸。 让屏幕尺寸为sw和sh,图像尺寸为tw和th。
由于屏幕(sw)在顶点坐标方面的宽度是2(-1到1),因此图像覆盖的宽度将是2 * tw / sw。同样,身高是2 * th / sh。
现在你可以指定你的顶点从(-1,-1)到(-1 + 2 * tw / sw,-1 + 2 * th / sh),这将保持图像缩放并在左上角。