如何在Win32上使用大纹理加速屏幕外OpenGL渲染?

rep*_*vsd 1 c++ opengl winapi

我正在开发一些C++代码,可以在两个图像之间做一些奇特的3D过渡效果,我认为OpenGL是最好的选择.

我从一个DIB部分开始并为OpenGL设置它,我从输入图像创建两个纹理.

然后,对于每个帧,我只绘制两个OpenGL四边形,并使用相应的图像纹理.然后将DIB内容保存到文件中.

例如,一个效果是将两个四边形(在3d空间中)定位为两个广告牌,一个在另一个前面(遮挡它),然后向上,向前和向下俯冲摄像机,以便您可以看到第二个.

我的输入图像是1024x768左右,当四边形覆盖大部分视图时,渲染(100毫秒)需要很长时间.如果相机很远,它会加速.

我尝试将每个图像四边形渲染为数百个单独的图块,但它只需要相同的时间,它似乎取决于可见纹理像素的数量.

我假设OpenGL可以在一秒钟内完成数以万计的多边形.这里有什么我想念的吗?

使用其他方法会更好吗?

提前致谢...

编辑:

GL字符串显示为DIB版本:

供应商:Microsoft Corporation版本:1.1.0 Renderer:GDI Generic

屏幕版本显示:供应商:ATI Technologies Inc.版本:3.2.9756兼容性配置文件上下文渲染器:ATI Mobility Radeon HD 3400系列

所以我想我将不得不使用FBO,我有点困惑如何将渲染数据从FBO输出到DIB,任何指针(双关语意图)?

Jer*_*fin 5

听起来像渲染到DIB正在迫使渲染在软件中发生.我将渲染到帧缓冲区对象,然后从生成的纹理中提取数据.Gamedev.net有一个相当不错的教程.

但请记住,图形硬件主要面向在屏幕上绘图.捕获渲染数据通常会比显示它更慢,即使你确实让硬件进行渲染 - 尽管它应该比软件渲染快得多.

编辑:DominikGöddeke有一个教程,其中包含用于将纹理数据读回CPU地址空间的代码.