【问题标题】:OpenGL rendering (only real-time)?OpenGL渲染(仅实时)?
【发布时间】:2012-05-02 21:43:18
【问题描述】:

我了解您通常在 Blender 或其他一些 3D 建模软件中创建复杂的 3D 模型,然后将其导出为 .obj。这个 .obj 文件被解析到你的程序中,openGL 会渲染它。据我了解,这是实时渲染。

现在我想知道是否有类似预渲染对象的东西。我有点困惑,因为有很多关于实时渲染的文章/视频,但我没有找到任何关于非实时渲染的信息。这样的事情是否存在?由于没有实时渲染,我唯一想到的就是视频。

我想这几乎是一个是或否的问题 :) 但如果它存在,也许有人可以将我指向一些带有解释的网站。

【问题讨论】:

  • 你自己回答了。这是一个视频。实时不是这样的技术。它只是意味着“有时间限制”。我认为人们经常滥用这个短语。

标签: c++ opengl


【解决方案1】:

“实时渲染”意味着帧的生成速度与显示速度一样快。 “非实时渲染”或“离线渲染”是指一次生成一帧,花费尽可能多的时间来获得所需的图像质量,然后将它们组合成电影。可以实时渲染视频游戏质量的视频;然而,像皮克斯电影这样精致的东西必须在离线模式下完成。单个帧仍可能需要数小时的渲染时间!

【讨论】:

    【解决方案2】:

    “预渲染对象”的含义并不完全清楚,但是有些东西称为 VBO 和顶点数组,它们将对象的几何图形存储在 VRAM 中,以便不必使用 glVertex3f() 或类似方法将其加载到渲染管道中每一帧。这称为立即模式。

    使用 VBO 和顶点数组而不是立即模式,因为它们比调用图形驱动程序为每个顶点将数据加载到 VRAM 中要快,因为它们保存在 VRAM 中,比普通 RAM,准备启动到渲染管道。

    here 页面也可能有所帮助。

    【讨论】:

      【解决方案3】:

      没有什么能阻止您渲染到off-screen frame-buffer (i.e., an FBO),然后将其保存到磁盘而不是显示到屏幕上。例如,在 CUDA、OpenCL 等出现之前,GPGPU 技术就是这样工作的。您可以将数据加载为未过滤的浮点纹理,使用 FBO 上的像素着色器执行计算,然后保存结果返回磁盘。

      在我上面发布的链接中,它在概述中声明:

      这个扩展定义了一个简单的从绘图到渲染的接口 除了由 GL 提供给 GL 的缓冲区之外的目的地 窗口系统。

      然后继续陈述,

      通过允许使用可附加帧缓冲区的图像作为渲染 目的地,这个扩展启用了一种“离屏”渲染形式。

      因此,您可以通过在屏幕外渲染一些渲染速度低于 30fps 的场景来获得“非实时”渲染,然后将这些结果保存到可以播放的电影文件或文件序列格式中以后的日子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        相关资源
        最近更新 更多