2

我目前正在开发一个内部 GIS 应用程序。背景图像通过将图像分解为我猜称为纹素和 mipmapped 的图像在 OpenGL 中加载,然后构建一个显示列表以将每个纹素纹理映射到矩形上。这听起来很标准,但问题是目前对于没有整齐划分为 2^n 像素 x 2^m 像素纹素的图像,剩余部分被丢弃。即使我要捕获剩余部分并以某种方式处理它们,我也无法想象答案是不断测试纹素细分,最终导致在整齐的边界上完全捕获图像?或者是吗?

在某些情况下,我正在加载的图像是 geotiff,我需要将每个像素都包含在我的背景中。我听说 glDrawPixels 很慢。我知道我可以自己测试一下,但我感觉这个领域的人在 opengl 中使用纹理,而不是跟踪像素转储。

我是 OpenGL 的新手,我相信该应用程序将自身限制为 1.1 调用。

4

1 回答 1

3

在 OpenGL 1.1 中处理两个图像的非幂的标准方法是将图像存储在尺寸为最接近的 2 的较大幂的纹理中,然后修改纹理坐标,一些伪代码:

float sMax = image.width / texture.width;
float tMax = image.height / texture.height;

glBegin(GL_QUADS);
glVertex2f(0, 0);
glTexCoord2f(sMax, 0);
glVertex2f(1, 0);
glTexCoord2f(sMax, tMax);
glVertex2f(1, 1);
glTexCoord2f(0, 0);
glVertex2f(0, tMax);
glTexCoord2f(0, 1);
glEnd();

使用更高版本的 OpenGL,或者如果您正在使用扩展,您可以使用矩形纹理:

http://www.opengl.org/registry/specs/ARB/texture_rectangle.txt

于 2010-08-16T19:19:04.960 回答