我目前正在为Unity3D创建一个地形,专门用于运行应用程序的内存不足的移动设备.允许大小为15.000 x 15.000千米且高度为-1.000米到10.000米的地形,并且它的唯一限制是硬盘上的空间.
现在一切都运行正常,除了不正确地计算不同网格之间的法线(每个网格具有细分级别).这是两张可视化问题的图片:
问题仅发生在从一个细分级别到另一个细分级别的转换上.如果两个网格具有相同的级别,则效果很好.我首先想到在计算法线时我会错过一些面孔,但似乎它们都包含在计算中.
每张脸的正常计算:
Vector3 u = vertices[item.Face1] - vertices[item.Face0];
Vector3 v = vertices[item.Face2] - vertices[item.Face0];
Vector3 fn = new Vector3((u.Y * v.Z) - (u.Z * v.Y), (u.Z * v.X) - (u.X * v.Z), (u.X * v.Y) - (u.Y * v.X));
fn.Normalize();
Run Code Online (Sandbox Code Playgroud)
在计算顶点周围的每个面的法线之后,我将所有面法线添加到顶点法线并对其进行标准化.结果显示在图片中,正如您在背景和网格本身中看到的那样,只要没有不同的细分级别,它就可以工作.
/// <summary>
/// This is a static indicies array which contains all indicies
/// for all possible meshes.
/// </summary>
private static readonly Int32[] // Subdivision
[] // All borders
[] …
Run Code Online (Sandbox Code Playgroud) 我已经尝试在Google上搜索几种不同的内容.似乎我找不到任何东西.以为我不妨将问题上传到Stack Overflow.
谢谢!
我正在尝试从网格中生成点云数据,例如Maya的(.obj)文件.但是,我只能找到相反的情况,在互联网上点云点.有没有办法使用MeshLab或Maya等3D工具创建"网格点云数据"?(我更喜欢使用MeshLab)
谢谢.:)
假设您有一组带有笛卡尔坐标系坐标的点.
您想绘制另一个点,并且您知道它在相同笛卡尔坐标系中的坐标.
但是,您绘制的图形与原始图形失真.想象一下,将原始平面打印在橡胶板上,然后在某些地方拉伸并以不对称的方式将其捏在其他地方(没有重叠或任何复杂的情况).
(来源)
您知道每组点的拉伸和未拉伸坐标,但不知道基础拉伸函数.你知道一个新点的未拉伸坐标.
如何基于附近点的拉伸位置估计在拉伸坐标中绘制新点的位置?它不需要精确,因为除非您有更多信息,否则无法从一组重映射点确定实际拉伸函数.
其他可能的关键字:扭曲的扭曲网格平面坐标unwarp
我正在寻找一个图书馆或一篇论文来描述如何确定一个三角形网格是否与另一个三角形网格相交.
有趣的是,我很空虚.如果有一些方法可以在CGAL中做到这一点,它就是在逃避我.
看起来它应该是可能的,因为三角形交叉是可能的,因为每个网格包含有限数量的三角形.但我认为必须有一种比明显的O(n*m)方法更好的方法,其中一个网格有n个三角形而另一个网格有m个三角形.
我正在尝试将纹理仅应用于Box对象的一侧.
基本代码:
BoxGeo = new THREE.BoxGeometry(50, 50, 125);
BoxMat = new THREE.MeshLambertMaterial({ color: 0xF0F0F0 });
BoxObj = new THREE.Mesh(GeoBox, GeoMat);
Run Code Online (Sandbox Code Playgroud)
我尝试使用一个包含6个材质对象的数组,5个颜色和一个带有图像的数组(从每个Box的另一个纹理数组中随机选择).但它抛出一个错误:(
是否有可能为每个面提供一个具有不同纹理的盒子的简单例子?我在互联网上看到了一些例子,但是他们需要将材质数组放在Geometry对象中,我想避免为了性能原因为每个Box创建一个新的Geometric对象.
在三维空间中,我有一组无序的,比如6分; 这样的事情:
(A)*
(C)*
(E)*
(F)*
(B)*
(D)*
Run Code Online (Sandbox Code Playgroud)
这些点形成三维轮廓,但它们是无序的.对于无序我的意思是他们存储在一个
unorderedList = [A - B - C - D - E - F]
Run Code Online (Sandbox Code Playgroud)
我只是想从任意位置开始重新组织这个列表(让我们说A点)并顺时针或逆时针遍历点.像这样的东西:
orderedList = [A - E - B - D - F - C]
Run Code Online (Sandbox Code Playgroud)
要么
orderedList = [A - C - F - D - B - E]
Run Code Online (Sandbox Code Playgroud)
我正在尝试尽可能简单地实现算法,因为提到的点集对应于~420000点的网格上的每个顶点的N环邻域,并且我必须对网格上的每个点执行此操作.
前段时间对二维中的点进行了类似的讨论,但目前我不清楚如何从这种方法转向我的三维场景.
我需要帮助开始使用Python(我几乎不知道)来体验从Rhino生成的3D网格.数据输入将是.OBJ文件,输出也是如此.这种用法的最终目的是找到建筑物内两点之间的最短距离.但这是为了以后.至于现在,我需要首先体素化3D网格.体素化原语可能只是一个简单的立方体.
到目前为止,我可以从OBJ文件解析器读取并从解析后的obj中读取V,VT,VN,F前缀,并使用这些坐标查找3D对象的边界框.什么应该是对网格进行体素化的正确方法?
import objParser
import math
inputFile = 'test.obj'
vList = []; vtList = []; vnList = []; fList = []
def parseOBJ(inputFile):
list = []
vList, vtList, vnList, fList = objParser.getObj(inputFile)
print 'in parseOBJ'
#print vList, vtList, vnList, fList
return vList, vtList, vnList, fList
def findBBox(vList):
i = 0; j=0; x_min = float('inf'); x_max = float('-inf'); y_min = float('inf');
y_max = float('-inf'); z_min = float('inf'); z_max = float('-inf');
xWidth = 0; yWidth = 0; zWidth =0
print 'in findBBox' …
Run Code Online (Sandbox Code Playgroud) 我实际上发现了这个问题,但它说material.color
并不存在.我需要知道如何更改我正在绘制的立方体的各个面的颜色:
var newCube = new THREE.Mesh(new three.CubeGeometry(size, size, size), new three.MeshNormalMaterial({ vertexColors: three.FaceColors }));
Run Code Online (Sandbox Code Playgroud) 我正在计划通过带两个嘴的凹形双对称六边形流动的可视化.
边d1的长度等于边d2的另一长度的示例:
我在这里首先讨论的关于不规则六边形的命名.
有标准的网格工具,你可以绘制自己的网格,但我想有一些标准库,以便我可以与其他人更好地合作,以后的流程模拟.我没有找到任何网库在MathCentral文件交换六边形这里.
是否有任何标准的网格库用于不规则的六边形形状?我也对任何其他语言开放,因为我可以阅读代码并将这些标准转换为Matlab库.
geometry mesh convex-optimization finite-element-analysis non-convex