标签: mesh

在OpenGL中构建网格

我正在做一些OpenGL(2.1)测试,在尝试制作一个简单的立方体时,我想知道如何制作复杂的网格物体.对于我的立方体,我只是设置每个顶点GL_TRIANGLES.但我不知道如何在循环中做同样的事情.由于顶点的顺序,因为有很多重复的顶点!

我真的必须通过设置3个顶点"一次"(两个三角形)来制作一个面孔?这似乎很慢.如何优化?

在此输入图像描述

制作/加载网格的技巧是什么?

哦,我会很感激一些例子.

c c++ opengl algorithm mesh

4
推荐指数
1
解决办法
6754
查看次数

网格切片/轮廓的算法和库?

我希望了解更多关于将网格切割成gcode的过程,这个过程采用3d模型并创建CNC机器或3D打印机可以使用的对象的2D切片.

使用什么数学算法来执行这种类型的网格抽取/切片?是否有任何库实现了一些?

algorithm mesh slice g-code

4
推荐指数
1
解决办法
2704
查看次数

Three.js - 变形几何和精化三角网格

我试图使用Three.js将一个几何变形为另一个.这是我到目前为止所做的事情(请参阅http://stemkoski.github.io/Three.js/Morph-Geometries.html以获取实例).

我试图从一个小的多面体变形到一个更大的立方体(三角形和居中的中心).动画是通过着色器完成的.较小的多面体上的每个顶点都有两个相关的属性,即最终位置和最终的UV坐标.为了计算每个顶点的最终位置,我从原点通过较小的多面体的每个顶点进行了射线扫描,并找到了与较大立方体的交点.为了计算最终的UV值,我使用了重心坐标和较大立方体相交面顶点的UV值.

这导致了一次不可怕但不是很好的第一次尝试.由于(通常)较大立方体的顶点都不是较小多面体的任何顶点的最终位置,因此缺少立方体表面的大块.接下来我通过添加更多顶点来改进较小的多面体,如下所示:对于较大立方体的每个顶点,我向原点射线,并且每条射线与较小多面体的面相交,我移除了那个三角形面并添加了点交叉点和三个较小的面来替换它.现在变形更好(这是与上面链接的实例),但变形仍然没有填满立方体的整个体积.

我最好的猜测是,除了将较大立方体的顶点投影到较小的多面体上之外,我还需要投影边缘 - 如果A和B是由较大立方体上的边连接的顶点,则这些顶点的投影在较小的多面体上也应该通过边缘连接.但是,当然,投影边缘可能会跨越较小多面体网格中的多个预先存在的三角形,需要添加多个新顶点,重新化,等等.看来我实际需要的是一个算法计算两个三角形网格的共同细化.有没有人知道如上所述的这种算法和/或变形的示例(带代码)(在具有不同三角化的两个网格之间)?

mesh morphing triangulation three.js

4
推荐指数
1
解决办法
1523
查看次数

可视化网格与其点云之间的区别

我正在使用PCL和Mesh编辑器(MeshLab).我有兴趣将我的网格导入PCL进行一些3D处理.

我有一个网格模型.当我用代码加载模型时:

PointCloud<PointXYZRGBA>::Ptr cloud (new PointCloud<PointXYZRGBA> ()); 
pcl::io::loadPLYFile<pcl::PointXYZRGBA>(argv[1], *cloud); 
Run Code Online (Sandbox Code Playgroud)

我把它想象成一个点云:

visualization::PCLVisualizer viewer ("Model"); 
viewer.addPointCloud (cloud,"model"); 
Run Code Online (Sandbox Code Playgroud)

几何体与直接加载和可视化网格物体不同:

viewer.addModelFromPLYFile(argv[1], "model"); 
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,我完全像使用网格编辑器一样可视化模型,但在第一种情况下,我可视化它的变形版本,即球体就像椭圆体一样.这里发生了什么?也许我应该手动采样网格?

如果我在观察器中添加两个模型,差异非常明显,点云比网格小,并且它遭受了一些奇怪的变形(请参见附图)

非常感谢你

ply http://www.pcl-users.org/file/n4028582/meshply.png

3d mesh point-cloud-library

4
推荐指数
1
解决办法
3566
查看次数

如何将网格转换为VTK格式?

我有自己格式的网格,我想将它导出到.vtk文件.我该怎么做呢?

原始网格采用以下格式:(伪代码)

class Mesh {

   List<Float[3]> _coordinates

   List<int[4]> _tetra //(elements, Faces, etc.)

}
Run Code Online (Sandbox Code Playgroud)

我希望这能澄清我的问题.我只想用Paraview加载它,所以我不在乎它是否是结构化的,聚合等.

mesh vtk

4
推荐指数
2
解决办法
4916
查看次数

使用PCLVisualizer网格化PCL 1.6

我将使用PCL 1.6可视化GreedyProjectionTriangulation生成的网格。

我发现我必须使用

pcl::visualization::PCLVisualizer.addPolygonMesh()
Run Code Online (Sandbox Code Playgroud)

但是我的问题是如何使用PCLVisualizer而不是

pcl::visualization::CloudViewer
Run Code Online (Sandbox Code Playgroud)

获得流媒体。

我尝试了这个:

http://www.pcl-users.org/Simple-Kinect-viewer-that-writes-a-PCD-tp3883792p3940787.html

以及解决的建议

http://www.pcl-users.org/Simple-Kinect-viewer-that-writes-a-PCD-tp3883792p3954525.html

将参数添加到函数openNIGrabber。无论如何,对于编译器来说还可以,但是当我运行它时,它会中止。我正在使用VS2010 64位

有人可以建议我另一种解决方案吗?

c++ mesh visual-studio-2010 visualize point-cloud-library

4
推荐指数
1
解决办法
5498
查看次数

半边塌陷

我目前正在尝试实现半边折叠以执行增量重新网格化。我正在处理流形网格。考虑以下简单网格:

在此输入图像描述

目标是将 a 折叠成 b。

在此输入图像描述

然而,在这种情况下,这会导致非流形网格

在此输入图像描述

我想阻止这一点。我的问题是:

我怎样才能提前做到这一点,即在崩溃之前执行检查崩溃操作是否安全?

我已经尝试过 Hoppe 的标准(链接条件),但看起来两者都已满足。此外,a 和 b 的一环的唯一交点是 c,因此只有一个点,因为它是边界边缘。

另外一般来说,我还需要执行哪些其他检查以避免非法倒塌?

现在,我有以下标准:

  • 如果 a 和 b 是边界顶点,则边 ab 必须是边界边
  • a、b 和与边 ab 相邻的三角形的第三个顶点必须是有效三角形(链接条件)
  • 如果与边 ab 相邻的三角形是边界三角形,如果 a 在边界边上,则不折叠
  • 如果 a-1-ring 和 b-1-ring 的交集不等于 2(或者边界边为 1),则不折叠

criteria mesh

4
推荐指数
1
解决办法
2926
查看次数

从文件的一部分快速读取格式化的数据(Gmsh网格格式)

我维护了一个小小的Python包,该可以在用于网格表示的不同格式之间进行转换

在此处输入图片说明

这些文件可能会变得很大,因此在使用Python读取文件时,有效地执行操作非常重要。

其中一个最常用的格式是MSHGMSH。不幸的是,它的数据布局可以说不是最好的。一个示例文件:

$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
8
1 -0.5 -0.5 -0.5
2  0.5 -0.5 -0.5
3 -0.5  0.5 -0.5
4  0.5  0.5 -0.5
5 -0.5 -0.5  0.5
6  0.5 -0.5  0.5
7 -0.5  0.5  0.5
8  0.5  0.5  0.5
$EndNodes
$Elements
2
1 4 2 1 11 1 2 3 5
2 4 2 1 11 2 5 6 8
$EndElements
Run Code Online (Sandbox Code Playgroud)
  • 对于$Nodes

    第一个数字(8)是要跟随的节点数。

    在每个节点行中,第一个数字是索引 …

python io numpy mesh

4
推荐指数
2
解决办法
1204
查看次数

使用 Numpy 快速制作网格三角形网格

考虑一个表示节点编号的正则矩阵,如图所示:

节点和三角形

我想列出图中表示的所有三角形。这将导致以下二维列表:[[0,1,4],[1,5,4],[1,2,5],[2,6,5],...,[11,15,14]]

假设矩阵的维度是 ( NrX Nc) (在这种情况下为 (4X4) ),我可以使用以下代码实现此结果:

def MakeFaces(Nr,Nc):
    Nfaces=(Nr-1)*(Nc-1)*2
    Faces=np.zeros((Nfaces,3),dtype=np.int32)
    for r in range(Nr-1):
        for c in range(Nc-1):
            fi=(r*(Nc-1)+c)*2
            l1=r*Nc+c
            l2=l1+1
            l3=l1+Nc
            l4=l3+1
            Faces[fi]=[l1,l2,l3]
            Faces[fi+1]=[l2,l4,l3]
    return Faces
Run Code Online (Sandbox Code Playgroud)

但是,双循环操作使这种方法非常缓慢。有没有办法以聪明的方式使用 numpy 来更快地做到这一点?

python numpy mesh triangular

4
推荐指数
1
解决办法
2425
查看次数

团结 | mesh.colors 不会为我的自定义网格对象着色

我在 Unity 中构建了一个自定义金字塔,如下所示:

    Mesh mesh = GetComponent<MeshFilter>().mesh;
    mesh.Clear();
    Vector3[] vertices = {
        new Vector3(0.0f, 0.5f, 0.0f),
        new Vector3(0.5f, 0.0f, 0.5f),
        new Vector3(-0.5f, 0.0f, 0.5f),
        new Vector3(-0.5f, 0.0f, -0.5f),
        new Vector3(0.5f, 0.0f, -0.5f),
    };

    int[] triangles = {
        1, 2, 3,
        1, 3, 4,
        1, 0, 2,
        2, 0, 3,
        3, 0, 4,
        4, 0, 1
    };


    mesh.vertices = vertices;
    mesh.triangles = triangles;
Run Code Online (Sandbox Code Playgroud)

我正在尝试为我的金字塔着色,正如在这样的统一文档中所说:

    Color[] colors = new Color[vertices.Length];

    for (int i = 0; i < vertices.Length; i++)
        colors[i] = Color.Lerp(Color.red, …
Run Code Online (Sandbox Code Playgroud)

mesh unity-game-engine

4
推荐指数
1
解决办法
3660
查看次数