在OpenGL中加载图像以用于GIS应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在OpenGL中加载图像以用于GIS应用程序相关的知识,希望对你有一定的参考价值。

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

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

我是OpenGL的新手,我相信该应用程序仅限于1.1次调用。

答案

在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

以上是关于在OpenGL中加载图像以用于GIS应用程序的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在图像中加载纹理并将边框设置为图像 Unity

从 jar 中加载图像以用于 Swing HTML

OpenGL - 在一个函数中加载多个纹理

OpenGL-在一个函数中加载多重纹理

使用 DevIL 在 C++ OpenGL 中加载纹理

无法在 JavaFX 中加载图像