制作实时 3D 场景的最简单方法,有点像一个简单的游戏(用于模拟器可视化目的)

Posted

技术标签:

【中文标题】制作实时 3D 场景的最简单方法,有点像一个简单的游戏(用于模拟器可视化目的)【英文标题】:easiest way to make a live 3d scene, a bit like a simple game (for simulator visualisation purposes) 【发布时间】:2010-10-18 11:46:47 【问题描述】:

我正在构建一个船舶模拟器,它将在某些定义的海况下为原型船体设计生成准确的位置和方向值。

在编程方面,我在 MATLAB 中有 2 个数组(向量),其中包含 x、y、z、偏航、俯仰和滚动的位置和加速度值。因为 MATLAB 中的可视化有点粗糙,所以我打算在 MATLAB 中编写一个简单的服务器,以使用套接字将这些值(以 200Hz)发送到另一个程序。海被建模为一组顶点(想想正弦波上不同时间步长的振幅快照)。

所以我的问题是,在屏幕上制作 3D 船和一些纹理水的动画最简单的方法是什么?

我只对图形引擎感兴趣。我不需要声音、物理、碰撞、界面(键盘、操纵杆等)。它应该能够主要在 Windows 上运行,但如果它也能在 Linux 和 Mac OS 上运行就更好了(取决于所涉及的额外复杂性)。

【问题讨论】:

有很多 3D 库可供您使用;从您提出问题的方式来看,我认为您正在寻找轻量级和简单的东西;另一方面,您可能还在考虑可移植性、完整性和其他因素;所以请确认您选择框架的标准是什么... 就像您猜到的那样,主要标准是简单。我以前从未做过任何 3D 编程,但我熟悉许多 3D 数学概念(坐标变换、变换矩阵等)。在便携性方面,它只需要在Windows上运行,但它在Linux上运行有多难呢?在功能方面,我只需要能够渲染逼真的水和一些纹理模型的东西。我正在寻找纯粹的图形,不需要声音、物理或碰撞。 如果你用 Java 和 OpenGL 编写它应该非常接近在 linux 和 windows 中工作。 【参考方案1】:

不是专家,但很少有线索

vtk,可移植和集成,关于复杂性请查看sample code 在相关的so question(和它链接到的online database)中的引擎比较

如果与 OpenGL 等低级 API 相比,上述内容可能会被称为复杂和臃肿,但您必须定义您要寻找什么样的简单性。

例如,“为 3D 船和一些带纹理的水设置动画的最简单方法”可能意味着您直接在*** OpenGL API 上编写一个干净的低级接口;但与任何图形,尤其是 3D 一样,我确实认为用不了多久你就会开始考虑灯光、相机移动、界面等......然后你可能会希望有一个更丰富的环境。

所以,问题也是,如果您想要一些非常苗条的东西,然后处理各种低级任务,或者可能包含比您需要的更多的东西,但有很多可用的资源和快捷方式。

现在,我的吐槽已经结束了 - 我相信您将能够找到一个确切的动画示例,该示例将在 OpenGL 中使用两个网格对象(海和船)并在任何体面的 OpenGL 教程中将它们显示在屏幕上.

【讨论】:

【参考方案2】:

最简单的方法是使用 PANDA3D。它使用python,并且相当完整。

【讨论】:

panda3d 是一个成熟的游戏引擎,不是吗?我只需要一些东西来轻松处理 3d 模型和改变视点,也许还需要一些阴影和照明效果。 是的 Panda3d 是一个游戏引擎,但根据您自己的定义,这就是您需要的,除非您想自己重新编码所有内容(有趣但更长且容易出错)。访问该站点,阅读一些文档并在论坛上询问您的具体需求,您肯定会很快获得好的建议和原型。【参考方案3】:

过去我发现 OpenGL 很容易使用,或者如果您在 Windows 环境中,也可以使用 Direct3D。

【讨论】:

以上是关于制作实时 3D 场景的最简单方法,有点像一个简单的游戏(用于模拟器可视化目的)的主要内容,如果未能解决你的问题,请参考以下文章

从场景中删除或隐藏 QEntity 的最简单方法

unity3d 如何用一张png图片,绘制一个圆环?

实时3d视图pov-ray和tkinter

用python绘制3d球体的最简单方法?

在 UIImage 周围放置圆形框架的最简单方法

如何用PS制作Unity3D场景资源