基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

1、基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示

  在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样

//设置方式1
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA);
//设置方式2
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);

  从遥感影像数据中提取出像素数据,可将其中的R、G、B三通道依次赋值给OpenGL的像素缓冲区对象 (PBO,Pixel Buffer Object)所指定的像素数据内存的R、G、B三通道。下面是测试用的产生像素数据的测试代码,实际遥感影像显示中该段代码会被CUDA核函数取代,用于从遥感影像数据文件中提取真正的像素数据。

//创建红色的纹理像素数据
void CRSQuickLookView::CreateTexturePixel()
{
    int aSwathLengthDownsampled = 1024 * 3 * 512;
    pPixelData =new unsigned char[aSwathLengthDownsampled];
    ZeroMemory(pPixelData,aSwathLengthDownsampled);
    for (int i = 0; i < 512; i++)
    {
        for (int j = 0; j < 1024; j++)
        {
            int offset=i*1024*3+j*3;
            pPixelData[offset] = 255;//红色
            pPixelData[offset + 1] = 0;
            pPixelData[offset + 2] = 0;
        }
    }
}

  绘制时的代码:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

  函数glTexImage2D()中的GL_RGB设置一定要与CreateTexturePixel()函数中像素域严格保持一致,否则显示的图像会呈现花块状。

2、基于VC++ MFC SDI+CUDA+OpenGL组合的遥感影像显示

  在该组合方案下,初始化时按照下面的方式完成OpenGL参数的设置:

static PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,           //标志
        PFD_TYPE_RGBA,           //颜色模式
        24,                                   //颜色位数
        0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0,
        32,                                  //深度位数
        0,
        0,
        PFD_MAIN_PLANE,
        0,
        0, 0, 0
    };

  事实证明在MFC SDI中结构体PIXELFORMATDESCRIPTOR的字段iPixelType中设置为PFD_TYPE_RGBA,包含Alpha通道,而后续绘制纹理时指定纹理的像素域为GL_RGBA或者GL_RGB,均可以得到同样的绘制结果,与是否包含Alpha通道无关,也与前面的结构体中的iPixelType字段的设置值无关,即绘制纹理时采用下面两种代码形式,均可得到一样的效果。唯一的要求是:函数glTexImage2D()中的GL_RGB设置一定要与CreateTexturePixel()函数中像素域严格保持一致,否则显示的图像会呈现花块状。

//方式1
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
//方式2
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

原文地址:https://www.cnblogs.com/rainbow70626/p/8978186.html

时间: 2024-11-06 02:03:26

基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!的相关文章

C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然后让客户预览,下面来看一下基于Office和WPS的两种解决方案.  一.基于Office的解决方案(推荐使用这种方式) 正如标题所说,基于Office就是要求服务器上面要安装的有Office.我们通过C#代码来调用COM接口,实现将Word转换成PDF.下面来看一下具体实现,首先引用Microso

VC模拟鼠标的两种方式(SendMessage、mouse_event)

鼠标模拟的常用方案,包括发送鼠标事件消息和使用mouse_event系统函数,发送鼠标消息的例子如下: pWnd->SendMessage(WM_RBUTTONDOWN,0,(y<<16)|x); 这种方法不需要窗体在前端,甚至最小化也可以使用,但是此方法并不是在所有场合有效,特别是对于不响应鼠标消息的程序更是如此.在这种情况下,可以尝试使用mouse_event函数.首先给出mouse_event函数的原型: VOID mouse_event(           DWORD dwFl

17,基于scrapy-redis两种形式的分布式爬虫

redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url.(多台机器无法共享同一个调度器) 其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储.(多台机器无法共享同一个管道) 2.基于scrapy-redis组件的分布式爬虫 - scrapy-redis组件中为我们封装好了可以被多台机器共享的调度器和管道,我们可以直

VC++环境下单文档SDI与OpenGL多视图分割窗口的实现-类似3DMAX的主界面

本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面.首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话框.单文档或多文档下实现多视图分割窗口的原理是一致的.本文检索了众多相关论文,发现了几篇写的非常细致的论文.在此向相关作者表示感谢.下面给出龚勋的论文原文,大家可以仔细阅读和学习.相信一定能够做出来想要的效果的.但是文中对于全局变量的定义和初始化在VC++2015环境下编译不通过.经过排查,发现这些

VC++ WIN32 sdk实现按钮自绘详解.

网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application. 然后建立我们的资源文件首先新建一个对话框资源,资源ID改为IDD_MAIN_DLG 然后在其上新建一个按钮控件资源ID改为IDC_ODBUTTON,此按钮的styles中必须选中owenerdraw属性. 然后将其保存为.rc的资源文件.并将其导入我们的工程.同理新建一个

VC++ WIN32 sdk实现按钮自绘详解 之二.

网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application. 然后建立我们的资源文件首先新建一个对话框资源,资源ID改为IDD_MAIN_DLG 然后在其上新建一个按钮控件资源ID改为IDC_ODBUTTON,此按钮的styles中必须选中owenerdraw属性. 然后将其保存为.rc的资源文件.并将其导入我们的工程.同理新建一个

VC++ Win32项目使用MFC类

项目属性  ->  配置属性  ->  常规  ->  MFC的使用:在共享 DLL 中使用 MFC. 项目属性  ->  配置属性  ->  C/C++  ->  代码生成  ->  运行库:多线程 DLL (/MD). stdafx.h  -> //#include <windows.h>#include <afx.h> VC++ Win32项目使用MFC类 原文地址:https://www.cnblogs.com/dailyco

VC下加载JPG/GIF/PNG图片的两种方法

转载自:http://blog.sina.com.cn/s/blog_6582aa410100huil.html 仅管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用 到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用API OleLoadPicture来加载JPG.GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明) OleLoadPicture函数实际上创建了一个IP

vc++加载透明png图片方法——GDI+和CImage两种

vc++加载透明png图片方法——GDI+和CImage两种 在加载png时遇到了麻烦,后来用了两个方法解决了.一个是用GDI+,另外就是用vs.net MFC自带的CImage. 先看看GDI+的方法 方法1: 1.GDI+画透明图层(alpha)的png图片 stdafx加入如下: #include <comdef.h>//初始化一下com口 #include "GdiPlus.h" using namespace Gdiplus; #pragma comment(li