• 基于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);
  • 相关阅读:
    《java并发编程实战》读书笔记9--并发程序的测试
    《java并发编程实战》读书笔记8--死锁,性能与可伸缩性,锁粒度锁分解锁分段
    笔试算法题记录1
    _stdcall调用
    通信设备硬件工程师应该具备的基本能力和知识
    PCB产业链、材料、工艺流程详解(1)
    PCB中加入任意LOGO图文说明 精心制作
    开关电源基础知识(一)
    六个框架,一百多条检查项目,保证PCB设计不再出错
    开关电源PCB排版,基本要点分析
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/8978186.html
Copyright © 2020-2023  润新知