博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!...
阅读量:5115 次
发布时间:2019-06-13

本文共 2031 字,大约阅读时间需要 6 分钟。

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

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

//设置方式1glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA);//设置方式2glutInitDisplayMode (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()函数中像素域严格保持一致,否则显示的图像会呈现花块状。

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

 

转载于:https://www.cnblogs.com/rainbow70626/p/8978186.html

你可能感兴趣的文章
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
伪类与超链接
查看>>
centos 7 redis-4.0.11 主从
查看>>
博弈论 从懵逼到入门 详解
查看>>
永远的动漫,梦想在,就有远方
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
慵懒中长大的人,只会挨生活留下的耳光
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>