首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于OpenGL在内存DC绘制的有关问题

2012-12-31 
关于OpenGL在内存DC绘制的问题先上代码:BITMAPINFObmimemset(&bmi, 0, sizeof(BITMAPINFO))bmi.bmiHeade

关于OpenGL在内存DC绘制的问题
先上代码:


   BITMAPINFO    bmi;
   memset(&bmi, 0, sizeof(BITMAPINFO));
   bmi.bmiHeader.biSize          = sizeof(BITMAPINFOHEADER);
   bmi.bmiHeader.biWidth         = 150;
   bmi.bmiHeader.biHeight        = 150;
   bmi.bmiHeader.biPlanes        = 1;
   bmi.bmiHeader.biBitCount      = 32;
   bmi.bmiHeader.biCompression   = BI_RGB;

   HBITMAP hDIB = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, (DWORD)0);
   HDC hMem = CreateCompatibleDC(NULL);
   SelectObject(hMem, hDIB);
   BITMAP bm;
   ::GetObject(hDIB, sizeof(bm), &bm);
   unsigned int* m_pBitmap = static_cast<unsigned int*>(bm.bmBits);
   memset(m_pBitmap,255,150*150*4);

   PIXELFORMATDESCRIPTOR pfd;
   /* set the pixel format for the DC */
   ZeroMemory(&pfd, sizeof(pfd));

   pfd.nSize = sizeof(pfd);
   pfd.nVersion = 1;
   pfd.dwFlags = PFD_DRAW_TO_BITMAP |PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
   pfd.iPixelType = PFD_TYPE_RGBA;
   pfd.iLayerType = PFD_MAIN_PLANE;

   int iFormat = ChoosePixelFormat(hMem, &pfd);

   SetPixelFormat(hMem, iFormat, &pfd);

   /* create and enable the render context (RC) */
   HGLRC hRC = wglCreateContext(hMem);
   if (hRC == 0) std::cout<<"OpenGL resource context creation failed";
   wglMakeCurrent(hMem, hRC);

   glClearColor( 1.0f, 0.0f, 0.0f, 1.0f );
   glClear(GL_COLOR_BUFFER_BIT);

   glFinish();



请教大家,小弟我刚接触OPENGL,我想在内存中绘制含有Alpha通道的HBITMAP,但是我设置glClearColor( 1.0f, 0.0f, 0.0f, 1.0f );然后清空图区的时候(glClear(GL_COLOR_BUFFER_BIT)),m_pBitmap中的Alpha通道却为0,不知道这是为什么?无论我在glClearColor中alpha设置成多少,glClear之后,alpha通道都为0,请问怎样才能保留Alpha的值?
[解决办法]
没人来  顶下...
[解决办法]
饿。。。好像研究DirectX 的人比OpenGL人多。。。
OGRE也不错。。封装了OpenGL和DirectX 开发方便。。

热点排行