python3.3从规则间隔的顶点创建3Dmesh作为Wavefront objfile

2024-05-16 12:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python3.3编写一个简单的命令行程序,它读取xyz坐标的文本文件,并在其中输出一个相等的三角形面。导出格式为Wavefront obj文件(https://en.wikipedia.org/wiki/Wavefront_.obj_file)。卫星对地球的高分辨率扫描仅适用于高分辨率的卫星扫描。实际上,我使用了一组大约340000个点,并在顶点四元组之间创建了两个三角形。外部迭代在x方向上,而内部迭代在y方向上。因此,在y方向上为每个顶点创建一对三角形面,直到它在x方向上移动并重复这个过程。我将向您展示基本图案(线条是面边缘):

v1--v5--v9
| \ | / |
v2--v6--v10
| / | \ |
v3--v7--v11
| \ | / |
v4--v8--v12

代码的工作方式似乎是这样的,因为在Blender或MeshLab中导入文件会得到合理的结果,除了一件事:面对的所有条纹似乎都没有与它们在x轴上的邻域相连接。显示问题的渲染图片: unconnected stripes。在

通常,不同的面条纹之间不应该有垂直偏移,因为它们沿着内部边界(-line)共享相同的顶点。使用较少顶点和更常见的低坐标值的测试成功。这个方法效果很好。也许问题不在我的网格生成器中,而是在Blender、MeshLab等的坐标限制内。在

下面是生成面并将所有内容缝合在返回字符串中的函数:

^{pr2}$

输入到函数中的verts变量具有二维列表的形式,类似于:

#                       x                   y                   z
vertsExample = [[3334, 3333, 3332], [2555, 2554, 2553], [10.2, 5.2, 6.7]]

我希望你们中的一些人能帮助我摆脱困境。如果有什么需要解释的,请让我知道,我会把它添加到第一个帖子。在


Tags: 文件函数命令行程序obj方向条纹高分辨率
1条回答
网友
1楼 · 发布于 2024-05-16 12:51:26

我终于解决了这个问题。问题不在我的网格生成器程序中。Blender和MeshLab(很可能还有其他3D程序)在顶点坐标太大时会做一些奇怪的事情。如果我把现实世界的地理投影坐标减少到更小的相对坐标,一切都很好(https://dl.dropboxusercontent.com/u/13547611/meshGenWorking001.png)。在

我的猜测是: Wavefront obj格式的字节大小对于它的数字来说太有限了。或者更准确地说:普通的3D程序不希望数字像真实世界的那样大。这样他们就以一种令人困惑的方式来解释他们得到的东西。在

我希望这个解决方案在将来能对某些人有所帮助!在

相关问题 更多 >