【问题标题】:Create Wavefront .obj files in C++ (mesh 3D)在 C++ 中创建 Wavefront .obj 文件(网格 3D)
【发布时间】:2016-08-27 21:06:17
【问题描述】:

我有一个vector<vector<int>>,其中包含我的地图(使用我的随机生成器创建的二维数组):


(来源:cjoint.com

我想以 3D 形式显示此地图(使用 Irrlicht 图形 3D 库)。最大的问题:我的地图太大(1920x1080),所以我无法在屏幕上显示 2073600 小立方体。 (我希望能够更改我的地图并使用良好的网格重新加载屏幕)

所以我的解决方案是创建一个立方体,并在上面写上我想要的所有像素 (这是我的小颜料给你看……)


(来源:cjoint.com

所以...我知道如何在 c++ 中创建/写入/解析文件,现在我的问题是:我不太了解 3D 透视图和 .obj 对象...

我正在通过维基百科和其他文档学习 OBJ 格式。

我想知道是否有比实时更改 .obj 对象更简单的解决方案...如果没有...我需要一些帮助来了解我的 obj 的概念...

【问题讨论】:

  • .obj 这里指的是 3d 格式:en.wikipedia.org/wiki/Wavefront_.obj_file,而不是通过编译 c/c++ 代码生成的 Visual Studio .obj 目标文件——我编辑了标题以使其超级清晰。
  • 您必须为 .obj 格式编写一个解析器(这并不简单,但在此处有比较详细的记录:martinreddy.net/gfx/3d/OBJ.spec)将其加载到内存中,进行任何您想要的更改,然后对其进行序列化退出。这是一项相当大的任务,不适合胆小的人。根据您的文件使用多少 .obj 功能,将决定您必须为多少 .obj 格式编写解析器。
  • 谢谢你,我正在创作过程中取得进展。但我很笨:如何在表面 3D 中制作孔?
  • @usernameHed 你的图片不是很有教养,而且(至少对我来说)很难理解你想要达到的目标。这是表面高度图吗?为什么我看不到任何孔,为什么是立方体而不是连续表面?

标签: c++ 3d mesh wavefront irrlicht


【解决方案1】:

我认为您在这里混淆了问题。 Alias wavefront obj 是一种用于存储 3d 几何图形的文件格式,使用它来提取几何图形非常容易。 MTL(材质模板库)比几何复杂一些,通常与 .obj 文件相关联,用于定义几何的视觉表示(就其材质外观而言)。

您要问的更多是几何问题(如何从表面上移除孔),并且完全取决于您的几何图形的表示方式(我假设三角化,因为您询问 obj,它表示三角化数据)。需要更多关于您如何存储数据的信息。

也许可以尝试研究使用布尔运算来构造几何的构造实体几何。如果您对数据进行了三角剖分,那么除非您使用某种形式的 BVH 来处理要处理的三角形/几何形状,否则您最终将使用蛮力来查看哪些三角形是有效的,哪些需要删除以进行“孔移除”。

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 2011-12-09
    • 2012-07-14
    • 1970-01-01
    • 2019-10-18
    • 2012-08-20
    • 1970-01-01
    • 2018-02-26
    • 2018-07-28
    相关资源
    最近更新 更多