在 Linux 3D 编程中走哪条路? [关闭]

Posted

技术标签:

【中文标题】在 Linux 3D 编程中走哪条路? [关闭]【英文标题】:Which way to go in Linux 3D programming? [closed] 【发布时间】:2010-05-01 00:05:31 【问题描述】:

我正在为我正在考虑的项目寻找一些答案。我已经搜索并据我了解(如果我错了,请纠正我)我想要制作的程序唯一可行的方法是通过 3D 应用程序。让我解释一下。

我计划制作一个工作室制作程序,但它的独特之处在于我希望能够使其流畅。让我解释。想象一下微软的 Surface 程序,您可以在其中触摸和拖动图片在屏幕上。我希望它们不是图片,而是声音样本(wavs、mp3 等)。当然,输入将使用鼠标,但如果我完成了这个项目,我会完全添加触摸屏输入兼容性!无论如何,我猜这与“物理”有关,这就是为什么我认为即使它是一个 2D 应用程序,我也需要在 3D 环境中对其进行编码。

假设我想如何处理我的项目是正确的,我可以从哪里开始学习 3D 编程?我实际上来自 php 编程,这将使我更容易学习 C++。但我什至不知道从哪里开始。如果我没记错的话,据我所知,OpenGL 是最新的 API。

无论如何,请给我你的见解。我真的可以在这里使用一些指导,因为我写的所有内容都可能完全错误:)

我想补充一点,我很可能在寻找教程、Linux 3D 编程网站、源代码/演示(谷歌大部分都让我失望了)。

注意:我也明白这不是一个我会在数周、数月内完成的项目,而且可能需要数年时间。没关系,无论需要多长时间,我都想掌握 C++。我只是在寻找可能对我有帮助的意见、资源、教程和东西(如上所述)。

【问题讨论】:

【参考方案1】:

我对 MS Surface 了解不多,但我是一名音乐家和多媒体艺术家,主要从事代码工作,所以...我的建议非常不同——不管是 Irrlight、Orge、纯OpenGL或其他任何东西。如果您对 3D 编程不太了解,最好从不同的东西开始。艺术家可以使用多种环境来处理图形、多媒体和代码。尝试其中一个,并在项目的网站和 Vimeo 上观看每个项目中制作的项目。我认为您想做的大部分事情已经完成,但仍然可以非常鼓舞人心。我想到的环境是:

    Processing - Ben Fry 和 Casey Reas 的出色原型制作环境。我总是在编写任何严肃的代码之前使用它,因为它为我提供了我需要的所有多媒体和通信库,它非常简单,而且它是 Java,所以你可以轻松部署你的应用程序! (据我记得有用于处理的触摸表面库)

    openFramewoks - 与上面相同,但 C++,但不太干净,仍在开发中。很容易在 Processing 中进行原型设计,最后在 openFrameworks 中编写代码,因为后者深受前者的影响。 (触摸表面库肯定是为oF实现的)

    NodeBox - Python 中非常强大的环境。有一个非常奇怪但很棒且直观的(毕竟)GUI 和一些非常独特的工作方法!

    SuperCollider 是一种出色的声音处理和算法组合编程语言,具有非常易于编码的 GUI 库和图形 API。它为您提供有关声音编程功能的一切想象。

    纯数据 - 编程的图形化方法。由 Miller Puckett(Max/MSP 的合著者)制作,具有 OpenGL(GEM 扩展)功能,由来自奥地利 IEM 的人提供。

最后的好建议:书籍!!! Programming Interaction (O'Reilly),Processing 网站上的几本书,经典著作 - Java 程序员的计算机图形学(非常棒,真的!!)。阅读“每个程序员应该知道的 97 件事”中关于领域语言和领域知识的所有章节。它真的可以帮助!

顺便说一句:如果您不考虑有关 Java(Java2D、Java3D、JOGL)的繁重实时程序——它比 C++ 和处理实际上是 Java 容易数百万倍,因此您拥有一个非常好的原型环境,可以生成准备使用 Java 类和小程序。我在实时剧院制作中使用了 Processing,其中舞台运动控制声音(合成器和硬件采样器)都在 Processing 中制作,所以这个“重实时”意味着 HEAVY 实时!!

如果对这个特定的域编程有任何其他问题 - 请随时给我发电子邮件。

【讨论】:

【参考方案2】:

来自 PHP 不会让 C++ 变得更容易,因为骑自行车不会让开车更容易。

现在,我认为对于 Linux,您唯一的选择是 OpenGL 作为 API,并使用许多包装器、3D 编程框架以及不可用的任何一种。

也许您可以使用更简单的语言,例如 Python,如果有 OpenGL 绑定(我很确定有),您可以使用它,这将使学习曲线更加轻松和快速。

【讨论】:

+1 用于说明性 C++ 自行车比较 xP。 Python 通过 PyGame 与 OpenGL、SDL 和其他有用的库进行了很好的绑定,请参阅我的答案:)。 更不用说还有 PyOpenGL,它与 Pyglet 完美搭配。 ;]【参考方案3】:

更新: 今天我不会推荐 Ogre3D 有很多原因(包括非常糟糕的长期界面,这违背了长期使用依赖的目的——尽管它确实具有良好的性能 sinc v2.1)。 目前有很多其他的替代方案在 Linux 上运行良好。


Ogre,在基于 Linux 的操作系统上使用 OpenGL,与使用 OpenGL 作为唯一选择相比,将节省您的生命和时间。

也就是说,要使用 Ogre,您必须了解大量的 C++ 知识和实践。 你必须知道“图形管道”。

您可以将 C 与 OpenGL 一起使用,这看起来更简单,但它不会像 Ogre 那样提供更高的图形管道抽象,从而使您浪费时间。

而且几乎所有的图形引擎都是用 C++ 编写的。

现在,如果您尝试学习 C++,请阅读《Accelerated C++》之类的好书,深吸一口气,请忘记您之前对 php 的所有了解。在寻求知识时保持谦虚,你会更快地获得它。

【讨论】:

Ogre3D 应该没问题,但请从专业使用它的人那里获取 - 根据您想要对应用程序执行的操作,有一些注意事项。让它在 iPhone 或任何东西上运行不会有太多乐趣。食人魔喜欢记忆。它非常喜欢它,以至于它喜欢把它全部留给自己。它也......不是最快的,简单地说。但是,您可以通过提供自定义内存分配器来稍微加快它的速度,该内存分配器对于许多小分配和删除具有非常好的性能,但它仍然会喜欢该内存。 ;)(inb4 因讨厌 Ogre 而被否决) +1 表示“请忘记您之前对 php 的所有了解。在寻求知识时保持谦虚”。它很好地总结了学习 C 或 C++。【参考方案4】:

你会感兴趣的:

OpenGL(显然) Box2D(2D 物理引擎) SDL(便携式媒体库)

您可以在网络上找到它们的基本教程。但是,考虑一下您是否真的想用 C++ 编写代码。该语言非常强大,但不容易学习,而且很难掌握。使用Python 和PyGame 这样的快速开发语言不是更好吗?

不要误会我的意思——我喜欢 C++,它是我的首选语言,但除非你正在研究一流的性能、操作系统或编译器,否则学习 C++ 的优缺点可能有点过头了方式。

【讨论】:

如果应用程序需要实时进行 3D,这意味着至少每秒 20 帧,这几乎意味着您需要进行编程以提高性能。 @Crashworks,相信我,我知道。然而,除非您尝试将部分计算卸载到 CPU 上进行实时辐射,否则即使在现代硬件上保持 60fps 也不需要太多汗水——天哪,您甚至可以使用 javascript 获得不错的帧速率(原文如此! ) -- code.google.com/p/quake2-gwt-port.【参考方案5】:

您既不需要 3D 图形,也不需要物理引擎。 UI 甚至可以使用一些时髦的 javascript 在浏览器中完成。

但是,类似这样的音频引擎将是一个相当复杂的、以性能为导向的野兽,并且可能最好在 C++(或者可能是 OpenCL)中完成。

最后,你确定你不是在重新发明Pure Data?

【讨论】:

【参考方案6】:

我更喜欢 Irrlicht,因为它是一个比 OGRE 更轻、更易于学习但功能不完整的 API。 用 Irrlicht 几分钟就可以写出一个原型,而且代码本身更容易理解。

最好的一点是它可以与 Irrklang 无缝对接,这是一个可以帮助您完成项目的声音库。

【讨论】:

以上是关于在 Linux 3D 编程中走哪条路? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Direct3D 编程新手:11 与 12

如何提升工作效率?

场景套件。哪条路向上?

文本文件、MongoDB 还是 JSON? [关闭]

Android和iPhone的推送通知[关闭]

从 WPF 打印/报告的最佳方法是啥? [关闭]