0

我刚刚开始使用 OpenGL ES 2.0,我设法绘制了一个 256x256 的图像并填充了整个视口(大小为 320x460)。图像被缩放,如下图所示,但这不是我们想要的,我想要的是从指定的 2D 坐标以原始大小绘制图像,例如从坐标 (10, 10) 到坐标 (266, 266) ,看起来我需要某种投影,但我对投影知之甚少,也不知道如何开始。

任何建议将不胜感激。

编辑

我刚刚找到了这个,现在我知道这是因为我指定的顶点填充了整个视口。现在我的问题是如何将图像映射到纹理坐标系?如何计算4 个顶点中的每一个的坐标XY坐标,以便图像可以正好适合纹理表面而不被缩放?

编辑2

非常感谢@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
};

在此处输入图像描述

4

1 回答 1

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),这将保持图像缩放并绘制在左上角.

于 2012-09-12T04:45:44.683 回答