我正在做一些OpenGL(2.1)测试,在尝试制作一个简单的立方体时,我想知道如何制作复杂的网格物体.对于我的立方体,我只是设置每个顶点GL_TRIANGLES.但我不知道如何在循环中做同样的事情.由于顶点的顺序,因为有很多重复的顶点!
我真的必须通过设置3个顶点"一次"(两个三角形)来制作一个面孔?这似乎很慢.如何优化?

制作/加载网格的技巧是什么?
哦,我会很感激一些例子.
我希望了解更多关于将网格切割成gcode的过程,这个过程采用3d模型并创建CNC机器或3D打印机可以使用的对象的2D切片.
使用什么数学算法来执行这种类型的网格抽取/切片?是否有任何库实现了一些?
我试图使用Three.js将一个几何变形为另一个.这是我到目前为止所做的事情(请参阅http://stemkoski.github.io/Three.js/Morph-Geometries.html以获取实例).
我试图从一个小的多面体变形到一个更大的立方体(三角形和居中的中心).动画是通过着色器完成的.较小的多面体上的每个顶点都有两个相关的属性,即最终位置和最终的UV坐标.为了计算每个顶点的最终位置,我从原点通过较小的多面体的每个顶点进行了射线扫描,并找到了与较大立方体的交点.为了计算最终的UV值,我使用了重心坐标和较大立方体相交面顶点的UV值.
这导致了一次不可怕但不是很好的第一次尝试.由于(通常)较大立方体的顶点都不是较小多面体的任何顶点的最终位置,因此缺少立方体表面的大块.接下来我通过添加更多顶点来改进较小的多面体,如下所示:对于较大立方体的每个顶点,我向原点射线,并且每条射线与较小多面体的面相交,我移除了那个三角形面并添加了点交叉点和三个较小的面来替换它.现在变形更好(这是与上面链接的实例),但变形仍然没有填满立方体的整个体积.
我最好的猜测是,除了将较大立方体的顶点投影到较小的多面体上之外,我还需要投影边缘 - 如果A和B是由较大立方体上的边连接的顶点,则这些顶点的投影在较小的多面体上也应该通过边缘连接.但是,当然,投影边缘可能会跨越较小多面体网格中的多个预先存在的三角形,需要添加多个新顶点,重新化,等等.看来我实际需要的是一个算法计算两个三角形网格的共同细化.有没有人知道如上所述的这种算法和/或变形的示例(带代码)(在具有不同三角化的两个网格之间)?
我正在使用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)
在第二种情况下,我完全像使用网格编辑器一样可视化模型,但在第一种情况下,我可视化它的变形版本,即球体就像椭圆体一样.这里发生了什么?也许我应该手动采样网格?
如果我在观察器中添加两个模型,差异非常明显,点云比网格小,并且它遭受了一些奇怪的变形(请参见附图)
非常感谢你
我有自己格式的网格,我想将它导出到.vtk文件.我该怎么做呢?
原始网格采用以下格式:(伪代码)
class Mesh {
List<Float[3]> _coordinates
List<int[4]> _tetra //(elements, Faces, etc.)
}
Run Code Online (Sandbox Code Playgroud)
我希望这能澄清我的问题.我只想用Paraview加载它,所以我不在乎它是否是结构化的,聚合等.
我将使用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位
有人可以建议我另一种解决方案吗?
我目前正在尝试实现半边折叠以执行增量重新网格化。我正在处理流形网格。考虑以下简单网格:

目标是将 a 折叠成 b。

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

我想阻止这一点。我的问题是:
我怎样才能提前做到这一点,即在崩溃之前执行检查崩溃操作是否安全?
我已经尝试过 Hoppe 的标准(链接条件),但看起来两者都已满足。此外,a 和 b 的一环的唯一交点是 c,因此只有一个点,因为它是边界边缘。
另外一般来说,我还需要执行哪些其他检查以避免非法倒塌?
现在,我有以下标准:
我维护了一个小小的Python包,该包可以在用于网格表示的不同格式之间进行转换
这些文件可能会变得很大,因此在使用Python读取文件时,有效地执行操作非常重要。
其中一个最常用的格式是MSH从GMSH。不幸的是,它的数据布局可以说不是最好的。一个示例文件:
$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)是要跟随的节点数。
在每个节点行中,第一个数字是索引 …
考虑一个表示节点编号的正则矩阵,如图所示:
我想列出图中表示的所有三角形。这将导致以下二维列表:[[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 来更快地做到这一点?
我在 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)