标签: mesh

多边形网格中唯一查找边的算法

我正在寻找一种好的算法,可以从一组多边形数据中获得独特的边缘.在这种情况下,多边形由两个数组定义.一个数组是每个多边形的点数,另一个数组是顶点索引列表.

我有一个正在运行的版本,但是当达到超过500,000的多边形时性能会变慢.我的版本遍历每个面,并将每个边的排序顶点添加到stl :: set.我的数据集主要是三角形和四边形多边形,大多数边将被共享.

有更聪明的算法吗?

graphics geometry mesh polygon edge-detection

7
推荐指数
2
解决办法
4243
查看次数

将画布上的视频转换为3d网格的适当起点是什么

目前是否有JavaScript库用于将Canvas中的视频流转换为3D网格?

一个例子的情况是在一个杯和捕捉的原始图像,以指向照相机,比较新数据之前的数据,以生成内视图中的对象的边缘轮廓,理想地将其转换成多边形的最简单的设定和显示所计算出的多边形/第二个画布元素中的模型.

我已经看到mrdoob在3d javascript上从目标文件到画布渲染的一些出色的工作,但我希望捕获原始数据并尝试生成网格.目的是通过套接字在2个用户之间发送网格点,以获取当前在捕获的摄像机视图中的任何对象.

任何帮助赞赏.

javascript canvas mesh

7
推荐指数
2
解决办法
292
查看次数

网格上的纹理无法正确呈现Libgdx

我试图在网格上放置一个纹理,但是失败了.我试图渲染这样的东西,可以看到纹理,但我得到了这个,我几乎看不到三角形.我正在运行以下代码:

public class Game implements ApplicationListener{

Mesh mesh;
ShaderProgram shader;
Texture texture;

public static void main(String[] args) {
    LwjglApplication app = new LwjglApplication(new Game(), "Mesh Tutorial 1", 800, 600, true);
}

protected static ShaderProgram createMeshShader() {

    String vert = Gdx.files.internal("data/VertexShader.txt").readString();
    String frag = Gdx.files.internal("data/FragmentShader.txt").readString();

    ShaderProgram.pedantic = false;
    ShaderProgram shader = new ShaderProgram(vert, frag);
    return shader;
}

@Override
public void create() {


    if (mesh == null) {
        mesh = new Mesh(true, 3, 3, 
                new VertexAttribute(Usage.Position, 3, ShaderProgram.POSITION_ATTRIBUTE), …
Run Code Online (Sandbox Code Playgroud)

java opengl shader mesh libgdx

7
推荐指数
1
解决办法
1940
查看次数

平滑开放3D网格边缘的算法

我有一个3D网格,它表示一个有一些粗糙边界的表面,我想要平滑:

网格边界1 网格边界2

我使用半边数据结构来存储几何体,因此我可以轻松地迭代边界边,顶点和面.我也可以很容易地确定一对给定的边缘是否是使用点和叉积的凸/凹.

什么是平滑边缘的最佳方法,因此它们形成连续的曲线,而不是图片中看到的锐利图案?

c++ algorithm 3d mesh smoothing

7
推荐指数
1
解决办法
1613
查看次数

iOS下的网状网络

我已经读到Apple在iOS 7.1中添加了对网状网络的支持,现在我很好奇看到一些有关如何设置这些内容的工作示例和/或教程.有没有人有这方面的经验?基本上我想开始让2个iOS设备通过Wifi(没有任何路由器或AP)或蓝牙相互通信.谢谢!

networking mesh ios mesh-network

7
推荐指数
1
解决办法
4872
查看次数

C++ OpenGL 网格渲染

我知道互联网上有很多关于此的资源,但它们似乎并没有帮助我。

我想要实现的目标:
我正在从将顶点存储在vector<Vector3>.
( Vector3is a sctructcontains float x, y, z)
它将三角形存储在map<int, vector<int>>
( 地图的关键是子网格和vector<int>三角形) 中
的 uv vector<Vector2>
(Vector2是一个struct包含float x, y)
和一个颜色值vector<Color>
( 颜色值适用于顶点,就像 uv 一样)

现在我想编写一个可以读取该数据并以最高性能将其绘制到屏幕上的代码

我得到了:

static void renderMesh(Mesh mesh, float x, float y, float z) {
    if (mesh.triangles.empty()) return;
    if (mesh.vertices.empty()) return;
    if (mesh.uvs.empty()) return;
    glColor3f(1, 1, 1);
    typedef std::map<int, std::vector<int>>::iterator it_type;
    for (it_type iterator = mesh.triangles.begin(); iterator != mesh.triangles.end(); iterator++) …
Run Code Online (Sandbox Code Playgroud)

c++ opengl mesh

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

LibGDX从模板编辑模型网格

大家!我正在开发一个项目,我采用"基础"模型/网格,我将其形成为更加明确的地形.但是,当我尝试编辑网格时,我遇到了一个问题.这基本上就是我这样做的:( assets是一个AssetManager)

Model terrain = assets.get("terrain.g3db", Model.class);
Mesh template = null;
for (float x = 0; x <= maxX; x += 1f) {
    for (float z = 0; z <= maxZ; z += 1f) {
        Mesh m = template.copy(false);

        // get proper vertices here

        mesh.setVertices(vertices);
        terrain.calculateTransforms();

        terrain.meshes.set(0, mesh);

        ModelInstance terrainInstance = new ModelInstance(terrain);
        terrainInstance.transform.setToTranslation(x, 0, z);
        instances.add(terrainInstance);
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我这样做时,我只是得到一个平坦的地形.当我删除此行时:

terrain.meshes.set(0, mesh);
Run Code Online (Sandbox Code Playgroud)

我得到了地形,但每个模型实例都有相同的东西.要解决这个问题,我必须删除该行,并添加以下内容:

terrain.meshes.get(0).setVertices(vertices);
Run Code Online (Sandbox Code Playgroud)

我认为导致平面地图的线条正在发生的是当我设置它时,它会移除任何可能已经说过的东西,"嘿,这个网格与模型的这一部分有关".

屏幕截图:
与导致平面地图行:图片
没有该行:图片

更新:感谢Xoppa的评论建议我为每个地点加载一个新模型,但在这样做时,我必须使用一个G3dModelLoader.我想使用AssetManagerif甚至可能,但我认为不是......

clone mesh libgdx

7
推荐指数
1
解决办法
288
查看次数

三 JS - 如何用 Y 平面切割 3D 对象?

是否可以使用 Three JS 切割网格或具有我们可以移动的平面(主要是 Y 轴)的对象?我想要显示在这张图片中的相同功能:

带有 3D 对象的 Y 平面

目标是保持网格完整,以允许用户移动平面并查看 Y 平面函数中的网格。

javascript 3d mesh three.js

7
推荐指数
1
解决办法
4090
查看次数

Python 3.6 Windows 上的 PyMesh 安装

我正在尝试在 Python 3.6 上安装 Pymesh。

在我的第一次尝试中,我通过 pip 安装,但是它安装了一个比我想要的错误的 PyMesh。它安装了以下内容,https://pypi.org/project/pymesh/,而我想要https://pymesh.readthedocs.io/en/latest/

我卸载了它,并尝试安装后来的 PyMesh,但是没有运气。没有关于窗户的说明。我从github下载了源代码。我提取并粘贴到 C:\Python36\Lib\site-packages

然后我跑了python3 setup.py build- 当出现错误时,我也尝试了python3 setup.py install,它奏效了。但是,我无法执行网页中提到的简单基本命令:https : //pymesh.readthedocs.io/en/latest/basic.html

它说 pymesh 没有模块名称 load_mesh。

寻找有关如何为 Windows 正确安装 pyMesh 的过程或想法。

windows mesh python-3.x

7
推荐指数
1
解决办法
2506
查看次数

努力使用 Python 中的 Open3D 从点云数据创建无懈可击的网格

我正在尝试用代表锥束 CT 图像的器官轮廓数据的点云创建一个防水网格。我的目标是获取两个网格并计算它们两个之间的相交体积。

我尝试过使用此处显示的每种方法

泊松重建

point_cloud = np.genfromtxt('ct_prostate_contour_data.csv', delimiter=',')
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(point_cloud)
pcd.compute_convex_hull()
pcd.estimate_normals()
pcd.orient_normals_consistent_tangent_plane(10)

mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=10, width=0, scale=20, linear_fit=True)[0]
mesh.compute_vertex_normals()
mesh.paint_uniform_color([0.5, 0.5, 0.5])
mesh.remove_degenerate_triangles()
o3d.visualization.draw_geometries([pcd, mesh], mesh_show_back_face=True)
Run Code Online (Sandbox Code Playgroud)

虽然这个方法在我看来似乎会产生一个水密网格,但 mesh.is_watertight() 的结果是 False,但是对于膀胱数据它返回 True。此外,该算法将网格扩展到数据垂直限制的上方和下方。虽然这并不是一个破坏交易的问题,但如果有一种方法可以最大限度地减少它,那就太好了。

泊松网格图像 泊松网格图像

球旋转

point_cloud = np.genfromtxt('ct_prostate_contour_data.csv', delimiter=',')
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(point_cloud)
pcd.compute_convex_hull()
pcd.estimate_normals()
pcd.orient_normals_consistent_tangent_plane(30)

distances = pcd.compute_nearest_neighbor_distance()
avg_dist = np.mean(distances)
radii = [0.1*avg_dist, 0.5*avg_dist, 1*avg_dist, 2*avg_dist] 
r = o3d.utility.DoubleVector(radii)
rec_mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(pcd, r)
o3d.visualization.draw_geometries([pcd, rec_mesh], mesh_show_back_face=True)
Run Code Online (Sandbox Code Playgroud)

如果我能够填充孔,这将是我的首选方法,因为它只是连接顶点而无需插值。也许如果我能够使其进入仅剩下的孔很大的状态,我可以将该网格转换为 Pyvista 兼容的网格并使用 Pymeshfix …

python mesh point-clouds open3d

7
推荐指数
1
解决办法
3318
查看次数