【问题标题】:Command-Line linux OpenGL processing命令行 linux OpenGL 处理
【发布时间】:2014-02-12 10:02:03
【问题描述】:

我需要构建一个命令行工具,它将 3D 模型作为参数,并输出它的照片,可能会或可能不会被此应用程序处理。该工具将部署在 Linux 上,但我想让它尽可能跨平台。

该程序不应显示任何类型的窗口,或接受除命令行参数之外的任何其他输入。

我想知道,有人会如何处理这个问题?我目前能够在 GLFW 的帮助下在屏幕上显示 3D 模型,它实际上将我的事件处理程序驱动到外围输入,以及我的主循环。但是,如果我想制作一个将输入输出作为文件的命令行程序,我不知道使用 GLFW 是否会对我有所帮助。

有没有人知道如何处理这个问题?

【问题讨论】:

    标签: linux opengl command-line 3d


    【解决方案1】:
    1. 创建不可见/隐藏窗口,
    2. 使用它的 gl 上下文渲染到 FBO 和
    3. 使用 readpixels 将其保存到文件中

    【讨论】:

    • 服务器中不会​​有窗口。不会安装窗口系统。是否需要安装窗口系统才能生成 OpenGL 输出?
    • @csotiriou 你需要一个 openGL 上下文才能用 openGL 做任何事情,可能有一些解决方案可以在没有窗口系统的情况下创建一个上下文,但是用一个更简单
    • @csotiriou:另外,在 Windows(非服务器!)上,您无论如何都没有选择没有窗口系统的选项。所以特殊情况实际上是没有 X 会话的 Linux - 而不是相反。
    • @ratchetfreak:嗯,X 的问题是,只有当 X 服务器在控制台上实际处于活动状态时,OpenGL 渲染才能工作。如果它只是在运行,但它所在的 vt 未激活,则 OpenGL 将无法工作。 Mesa 实际上提供了屏幕外 OpenGL 支持,而无需运行 X 服务器(屏幕外台面)。
    • @datenwolf 那么这就是他所需要的
    【解决方案2】:

    要使 OpenGL 正常工作,您需要一个 OpenGL 上下文。这过去需要某种窗口系统处于活动状态,这可能会为您生成一些可以为其创建上下文的可绘制对象。

    一些 OpenGL 实现,例如 Mesa,实际上允许您为在没有窗口系统的情况下创建的可绘制对象创建 OpenGL 上下文; Mesa 将此称为“屏幕外台面”。使用 Linux 上的 Gallium3D 驱动程序,这甚至可以为您提供 GPU 加速。但通常你最终会使用“softpipe”软件光栅化器。

    有没有人知道如何处理这个问题?

    不要为此使用 OpenGL。 OpenGL 主要用于创建交互式图形;但当然,如果您的目标是复杂数据的可视化,那么 GPU 会更适合。

    使用 NVidia 硬件,您需要为此使用 X 服务器; X 服务器必须在控制台上运行并处于活动状态才能正常工作。带有开源驱动程序和 Mesa 的 AMD 硬件可能会在没有 X 的情况下为您提供屏幕外功能(但我从未尝试过)。

    在 Windows Server 上,无论如何您都没有适当的 OpenGL 支持(只有 v1.4,而且速度非常慢),所以不要打扰它。

    【讨论】:

    • 谢谢。我们可以在控制台上有一个 X 处于活动状态但没有任何类型的 GUI 活动的 Linux 服务器吗?我想知道我们是否可以只安装库并启动 X 系统,但实际上没有 GUI。是的,我们假设服务器足够强大,并且加载了必要的硬件。最重要的是:您说“不要为此使用 OpenGL”。从各个方面拍摄 3D 模型,你有什么替代方法吗?
    • @csotiriou:是的,完全可以在没有桌面环境或窗口管理器的情况下运行 X 服务器。在典型的 Linux 安装中,您可以使用命令 startx $YOUR_CLIENT_BINARY -- $DISPLAY_NUMBER。或者您正在使用旧的xinit 和相应用户的~/.xinitrc 执行客户端。但请注意,一旦最后一个客户端关闭它的连接,X 服务器将重置,其中可能包括终止。所以你通常会让一些客户端永久运行。一个简单简洁的窗口管理器就可以解决问题。
    • @csotiriou:用于渲染回读图片的 OpenGL 程序在任何情况下都应使用 FBO 以避免像素所有权测试出现问题(否则窗口必须至少与目标一样大图像和整体可见)。如果您希望多个用户能够使用 X 服务器,您可以从 .xinitrc 脚本调用 xhost +localhost(假设您使用该脚本),以便本地计算机上的任何用户都可以连接到 X 服务器。
    • @csotiriou:或者使为启动 X 服务器的用户创建的 ~/.Xauthority 文件对任何人都可读,并将其绝对路径设置为环境变量 XAUTHORITY。还要记住将所有需要 X 服务器的程序的环境变量 DISPLAY 设置为正确的值。作为窗口管理器,我建议一些简单的东西,比如ratpoison,这绝对是赤裸裸的骨头。或者您根本不使用 WM,但是您需要 some 客户端来保持服务器打开。在最简单的情况下,这可能是一个辅助程序,它就是这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多