c++ - 在 C++ 中创建 Wavefront .obj 文件(网格 3D)

标签 c++ 3d mesh wavefront irrlicht

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

img
(来源:cjoint.com)

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

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

img
(来源:cjoint.com)

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

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

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

最佳答案

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

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

也许可以尝试研究使用 bool 运算构造几何体的 Constructive Solid Geometry。如果您有三角测量数据,那么除非您使用某种形式的 BVH 来处理要处理的三角形/几何图形,否则您最终将使用蛮力来查看哪些三角形是有效的,哪些需要移除以进行“去除孔洞”。

关于c++ - 在 C++ 中创建 Wavefront .obj 文件(网格 3D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993641/

相关文章:

c++ - 光线追踪网格上的伪影黑线(使用 Embree)

C++ 代码崩溃并出现无限循环

graphics - 如何将 2.5D 等距立方体纹理转换为可在 3D 中使用的纹理?

matlab - 具有不同切片数量的两个体积的图像配准

java - 修复了 3D 相机在它面对的方向上移动的问题?

python - 处理点云,*.xyz 文件格式,6 列

c++ - qmake 仅在 Debug模式下运行命令,如何?

c++ - 我可以从外部访问函数内部的静态变量吗

C++ 类型转换 : error C2440: '=' : cannot convert from 'short *' to 'DCTBLOCK'

python - 如何在Python中通过X、Y坐标创建点矩阵?