标签: mesh

从闭合三角形网格创建四面体网格

我正在寻找一种算法(或实现)来从封闭(即没有孔)3D 三角形网格创建四面体网格。

\n\n

最好的解决方案是一个开源应用程序,它可以导入网格文件(例如 OBJ、STL 和 VTK)、显示它们并提供四面体化网格的选项。但我也很喜欢命令行工具,或者只是算法的概述。

\n\n

一些背景 \xe2\x80\x94 我正在 Linux 系统上使用 Blender 来设计表面网格。最终我计划在 Python 或 MATLAB 中实现四面体化算法。

\n\n

我在寻找好的网格划分器时已经偶然发现了一些应用程序名称,但到目前为止我还没有任何具体的结果。因此,非常欢迎任何有关相关论文、算法或实现的信息!

\n\n

到目前为止发现的应用程序:

\n\n
    \n
  • 网格实验室
  • \n
  • 泰特根
  • \n
  • 格姆什
  • \n
  • 犀牛
  • \n
\n\n

一些相关术语:

\n\n
    \n
  • 德劳内 (3D)
  • \n
  • 推进前端网格划分
  • \n
\n

mesh volume

5
推荐指数
1
解决办法
3892
查看次数

如何将三角形缠绕为 3D 网格模型的逆时针方向?

首先让我澄清一下..我不是在问 2D 网格,要确定 2D 网格的缠绕顺序,使用法向 z 方向非常容易。

其次,我不要求任何优化算法,我不担心时间或速度,我只想用我的网格来做。

当我使用贪婪投影三角剖分算法对 3D 对象进行三角剖分时,会发生此问题。检查所附图片。

如果我使用“计算有符号面积”或“三角形的 AB 和 BC 向量的交叉产生”对该模型应用 2D 方法,它只能求解 2D 网格,但 3D 网格又如何呢?

首先我们需要检查哪些三角形在 3D 网格中缠绕方向错误,然后我们只考虑这些三角形,那么问题是,我们如何检查哪些三角形在 3D 中缠绕方向错误?我们不能只用 2D 方法来做我已经测试过但没有成功。

例如,对于球体,我们不能对球体应用 2D 方法。那么有没有办法解决这个问题呢?

谢谢。

在此输入图像描述 在此输入图像描述

更新#1:

下面是检查哪条边具有相同缠绕的算法。效果不太好,我不知道为什么。理论上它应该纠正所有三角形,但它没有纠正。例如,在附图中检查球体的情况下。有问题。

void GLReversedEdge(int i, int j, GLFace *temp)
{
    //i'th triangle
    int V1 = temp[i].v1;
    int V2 = temp[i].v2;
    int V3 = temp[i].v3;

    //i'th triangle edges
    int E1[] ={V1, V2};
    int E2[] ={V2, V3};
    int E3[] ={V3, V1};

    //adjacent triangle
    int jV1 = temp[j].v1;
    int jV2 …
Run Code Online (Sandbox Code Playgroud)

algorithm mesh triangulation normals computational-geometry

5
推荐指数
1
解决办法
6733
查看次数

将面部颜色保存在 .obj 文件中

我有一个.obj存储三角形网格的文件。我希望记录每个三角形面的颜色。有没有办法将这些信息保存到.obj文件中,以便像 MeshLab 这样的软件可以识别和可视化它?

mesh

5
推荐指数
1
解决办法
1516
查看次数

如何在Unity3d中按平面切割网格

我想用平面切割网格。尝试这个代码,但只得到切割网格的一部分。

截图1

截图2

public void SliceIt()
{
    Vector3[] vertices = mesh.vertices;

    Transform clone = clone = ((Transform)Instantiate(transform, transform.position + new Vector3(0, 0.25f, 0), transform.rotation));

    Mesh meshSlice  = clone.GetComponent<MeshFilter>().sharedMesh;
    Vector3[] verticesSlice = meshSlice.vertices;

    List<Vector3> verticesSlice2 = new List<Vector3>();

    Mesh cutplanemesh  = cutplane.GetComponent<MeshFilter>().sharedMesh;
    Vector3[] cutplanevertices = cutplanemesh.vertices;

    p1 = cutplane.TransformPoint(cutplanevertices[40]);
    p2 = cutplane.TransformPoint(cutplanevertices[20]);
    p3 = cutplane.TransformPoint(cutplanevertices[0]);
    var myplane = new Plane(p1, p2, p3);

    for (var i = 0; i < vertices.Length; i++)
    {
        var tmpverts = transform.TransformPoint(vertices[i]); // original object vertices

        if …
Run Code Online (Sandbox Code Playgroud)

mesh unity-game-engine

5
推荐指数
1
解决办法
1万
查看次数

使用 C++ 创建 Wavefront .obj 文件(网格 3D)

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

图像
(来源:cjoint.com

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

所以我的解决方案是创建一个立方体,并在上面写下我想要的所有像素(这是我的小油漆向您展示......)

图像
(来源:cjoint.com

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

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

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

c++ 3d mesh irrlicht wavefront

5
推荐指数
1
解决办法
3014
查看次数

如何将彩色点云转换为纹理网格?

我有一个 .ply 文件,其中包含彩色点云:

青蛙点云

我需要将其转换为纹理网格。我可以创建一个空白网格:

过滤器 -> 点集 -> 曲面重建:泊松

但结果是白色的网格

青蛙网

似乎所有有关颜色的信息都丢失了。有什么建议吗?谢谢

mesh texture-mapping point-clouds meshlab

5
推荐指数
1
解决办法
7109
查看次数

在 ThreeJS 中将立体投影映射到球体内部

当谈到 3D 动画时,有很多不熟悉的术语和概念(也许附加到这个问题的第二个问题:有哪些好书可以熟悉这些概念?)。我不知道“UV”是什么(在 3D 渲染的上下文中),也不熟悉用于将图像上的像素映射到网格上的点的工具。

我有一个 360 度相机生成的以下图像(它实际上是 HTMLvideo元素的输出):

360度全景

我希望该图像的中心是球体的“顶部”,并且该图像中圆的任何半径都是沿着球体从上到下的弧。

这是我的起点(直接从 Three.JS 文档复制代码行):

var video = document.getElementById( "texture-video" );

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

var texture = new THREE.VideoTexture( video );
texture.minFilter = THREE.LinearFilter;
texture.magFilter = THREE.LinearFilter;
texture.format = THREE.RGBFormat;

var material = new THREE.MeshBasicMaterial( { map: texture } );

var geometry …
Run Code Online (Sandbox Code Playgroud)

javascript 3d textures mesh three.js

5
推荐指数
1
解决办法
3303
查看次数

曲面重建中如何避免孔洞填充?

我正在使用泊松曲面重建算法从点重建三角网格曲面。然而,泊松总是会生成一个无懈可击的表面,它通过插值填充所有孔。

对于一些由于数据丢失而导致的小孔,这种孔填充是可取的。但对于一些大孔,我不想填充孔,只希望表面保持开放。

演示

上图展示了我的想法,左边是法线的点集,右边是重建的曲面。我希望该表面的顶部保持开放,而不是当前的水密结果。

谁能给我一些建议,如何在泊松曲面重建中保留这些大洞?或者有其他算法可以解决这个问题吗?

PS 根据这个问题的公认答案,我理解表面重建算法可以分为显式重建算法和隐式重建算法。泊松是隐式的,显式的自然可以处理大洞问题。但由于我拥有的点数据大多稀疏且嘈杂,因此我更喜欢像泊松这样的隐式数据。

algorithm graphics geometry mesh

5
推荐指数
1
解决办法
1286
查看次数

如何在 3d 点中使用 delaunay 三角剖分?

我了解如何在 2d 点中使用 delaunay 三角剖分?
但是如何在 3d 点中使用 delaunay 三角剖分呢?
我的意思是我想生成表面三角形网格而不是四面体网格,那么如何使用 delaunay 三角剖分来生成 3d 表面网格?
请给我一些提示。

mesh polygon delaunay triangulation computational-geometry

5
推荐指数
1
解决办法
1万
查看次数

使用 scikit-fmm 或 gdist 3d 三角形网格上的测地距离

我正在尝试评估 TOSCA 数据集上的测地距离矩阵。例如以下 3d 网格 -
在此输入图像描述

我尝试过使用两个 python 实现。

  1. 第一个是scikit-fmm,它似乎根本不适用于 3d 结构(我是对的吗?),因此不适合该任务。
  2. 另一个是gdist包,不幸的是,它适用于他们提供的玩具示例,但不适用于我的网格,该网格只有 10,000 个面和 5000 个顶点。
    使用 gdist 库时出现以下错误:

    Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
    --------CODE SNIPPET----------
    c = sio.loadmat('raw_data/TOSCA/cat0.mat')
    c = c['surface'][0][0]
    X = c[0]
    Y = c[1]
    Z = c[2]
    TRIV = c[3].astype(np.int32)
    vertices = np.array(zip(X, Y, Z)).astype(np.float64)
    vertices = np.reshape(vertices, (vertices.shape[0], 3))
    src = np.array([1], dtype=np.int32)
    trg = np.array([2], dtype=np.int32)
    
    np.random.shuffle(TRIV)
    
    a = gdist.compute_gdist(vertices,TRIV[:5000], source_indices = src, …
    Run Code Online (Sandbox Code Playgroud)

python mesh distance scikit-learn

5
推荐指数
1
解决办法
1515
查看次数