【发布时间】:2010-07-22 17:03:15
【问题描述】:
我正在开发一些 C++ 代码,可以在两个图像之间做一些花哨的 3D 过渡效果,我认为 OpenGL 是最好的选择。
我从一个 DIB 部分开始并为 OpenGL 设置它,然后从输入图像创建两个纹理。
然后对于每一帧,我只绘制两个带有相应图像纹理的 OpenGL 四边形。 然后将 DIB 内容保存到文件中。
例如,一种效果是将两个四边形(在 3d 空间中)定位为两个广告牌,一个在另一个前面(遮挡它),然后将相机向上、向前和向下俯冲,这样您就可以看到第二个.
我的输入图像是 1024x768 左右,当四边形覆盖大部分视图时,渲染需要很长时间(100 毫秒)。如果相机很远,它会加快速度。
我尝试将每个图像四边形渲染为数百个单独的图块,但它只需要相同的时间,似乎它取决于可见纹理像素的数量。
我认为 OpenGL 每秒可以处理无数个多边形。我在这里有什么遗漏吗?
使用其他方法会更好吗?
提前谢谢...
编辑:
对于 DIB 版本,GL 字符串显示为:
供应商:微软公司 版本:1.1.0 渲染器:GDI 通用
屏幕版本显示: 供应商:ATI Technologies Inc. 版本:3.2.9756 兼容性配置文件上下文 渲染器:ATI Mobility Radeon HD 3400 系列
所以我想我将不得不使用 FBO,对于如何将渲染数据从 FBO 获取到 DIB 上,我有点困惑,是否有任何指针(双关语)?
【问题讨论】:
-
您在什么硬件/软件上运行它?听起来像是填充率/内存带宽问题。
-
我在笔记本电脑上进行测试,Core2 Duo 2.6 ghz,Windows 7 x64,显示适配器是 ATI Radeon 3400 系列,具有 256 MB VRAM 我刚刚编写了一个基于 GLUT 的测试应用程序来在屏幕上绘制类似的东西,并且它在可忽略的时间内渲染每一帧。问题是为什么它在 DIB 上表现如此糟糕......
-
在您从 DIB 获得的上下文中仔细检查 OpenGL 版本/供应商。您可能遇到了软件渲染路径。
-
是的,很可能是软件路径。