【发布时间】:2012-09-02 04:04:29
【问题描述】:
我刚开始使用 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
};
【问题讨论】:
-
如果您能显示您当前正在使用的代码,这可能会对我们有所帮助。
-
有什么理由不能让视口与图像的纵横比相同?
-
我刚刚编辑了我的问题,现在问题转向如何进行计算顶点的数学运算,我不擅长:(
-
我通过缩放顶点解决了这个问题,但我只在数组中使用了 8 个浮点值。你好像有 20 个?
-
您能否详细说明如何缩放顶点?我实际上只使用了 8 个浮点数(它是 4 个顶点),
Z轴的值是多余的,我可以删除它。 Vertex 结构的textureCoor数组是纹理的坐标。
标签: ios opengl-es opengl-es-2.0 textures projection