OpenGL离屏渲染

本文详细介绍了如何在Windows环境下使用OpenGL进行离屏渲染,并通过创建窗口绘制句柄、设置像素格式、创建OpenGL绘图环境等步骤实现3D模型的高效绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章来源:

深圳市闻道软件工作室

以前写的程序大多是控制台的,很少接触UI相关的东西。OpenGL这样专门用来做3D处理的API更是觉得相当之高大上。
虽然没有什么概念,但是项目中应用到了OPenGl。而为了提升程序效率,我们想将OpenGL的模型先绘制到位图上,再与其它UI一起绘制到屏幕。经过查阅资料,发现这种方式有个通用的名称,叫做离屏渲染(off-screen)。
经过一整天不断的调试,终于掌握了WINAPI下的OpenGL off-screen的方法步骤。

1、创建WINDOWS绘制句柄

HDC father = GetDC(hwnd);
hdc = CreateCompatibleDC(0);
//pBitmap = CreateCompatibleBitmap(hdc,FACE_WIDTH,FACE_HEIGHT);
BITMAPINFO bmi = {
{ sizeof(BITMAPINFOHEADER), FACE_WIDTH, FACE_HEIGHT, 1, 32, BI_RGB, 0, 0, 0, 0, 0 },
{ 0 }
};
DWORD *pbits; // pointer to bitmap bits
pBitmap = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (void **) &pbits,
0, 0);
SelectObject(hdc,pBitmap);

注意事项:1、必须使用 CreateDIBSection创建位图,CreateCompatibleBitmap创建的位图离屏渲染会失败
2、3D模型的纹理像素不能大于1024*1024K,否则加载纹理会失败
2、转换像素格式
void SetupPixelFormat(HDC hDC) //为设备环境设置像素格式
{
int nPixelFormat; //像素格式变量
static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), //数据结构大小
1, //版本号,总设为1
PFD_DRAW_TO_BITMAP | //支持BITMAP
PFD_SUPPORT_OPENGL,
PFD_TYPE_RGBA, //RGBA颜色模式
32, //32位颜色模式
0, 0, 0, 0, 0, 0, //忽略颜色为,不使用
0, //无alpha缓存
0, //忽略偏移位
0, //无累积缓存
0, 0, 0, 0, //忽略累积位
32, //16位z-buffer(z缓存)大小
0, //无模板缓存
0, //无辅助缓存
PFD_MAIN_PLANE, //主绘制平面
0, //保留的数据项
0, 0, 0 }; //忽略层面掩模
//选择最匹配的像素格式,返回索引值
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
//设置环境设备的像素格式
SetPixelFormat(hDC, nPixelFormat, &pfd);
}
3、创建OpenGL绘图环境
SetupPixelFormat(hdc); //调用像素格式设置函数
hrc = wglCreateContext(hdc); //创建OpenGL绘图环境并创建一个指向OpenGL绘制环境的句柄
wglMakeCurrent(hdc, hrc); //将传递过来的绘制环境设置为OpenGL将要进行绘制的当前绘制

4、渲染

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值