Unity3d 我想从轮廓创建一个网格

Unity3d 我想从轮廓创建一个网格,unity3d,mesh,vertices,generated,Unity3d,Mesh,Vertices,Generated,我在Unity中工作,因此使用C#编写代码,但欢迎提出任何想法或开始的地方 我真的不知道如何描述我的问题,如果有一个“简单”的解决方案,但我会尝试。 我有一个对象(可能会将自己限制为简单的形状)可以投射2个阴影。 我想生成一个网格,它是阴影的形状。 如下图所示,我用绿色绘制了所需的网格 我在修改初始网格的顶点时遇到了麻烦,在某些特定情况下(没有旋转的对象)找到了解决方案,但我还没有找到一个效果足够好的解决方案。 有人有可行的想法吗 提前感谢,, 巴特我花时间创建了一个项目,完全按照你说的做:

我在Unity中工作,因此使用C#编写代码,但欢迎提出任何想法或开始的地方

我真的不知道如何描述我的问题,如果有一个“简单”的解决方案,但我会尝试。 我有一个对象(可能会将自己限制为简单的形状)可以投射2个阴影。 我想生成一个网格,它是阴影的形状。 如下图所示,我用绿色绘制了所需的网格

我在修改初始网格的顶点时遇到了麻烦,在某些特定情况下(没有旋转的对象)找到了解决方案,但我还没有找到一个效果足够好的解决方案。 有人有可行的想法吗

提前感谢,,
巴特

我花时间创建了一个项目,完全按照你说的做:

方法 使用光线投射我从光源计算了特定对象的投影顶点。该方法可能看起来效率低下,但只要指定的网格具有较低的顶点数,一切都应该正常

然后,通过计算投影顶点的平均值,我计算了投影立方体的位置。
Vector3 averagePosition=新的Vector3(垂直度.平均值(向量=>vector.x)),
垂直度.平均值(向量=>向量y),
平均垂直度(向量=>vector.z))

通过获取每个投影顶点位置分量(x,y,z)的范围,我计算了立方体的比例。
Vector3 averageScale=newvector3(vertices.Max(vector=>vector.x)-vertices.Min(vector=>vector.x),vertices.Max(vector=>vector.y)-vertices.Min(vector=>vector.y),normalScale)

注意:我没有生成一个完整的新网格。我只是操纵一个附加了脚本的预制立方体的变换

缺点是,到目前为止,这种方法仅限于一个轴。可以修复

从Github下载项目 GitHub链接:


如果你能做出任何改进来帮助社区,那就太好了。您可以自由地将此项目用于商业和非商业用途。

您可以尝试从光源通过红色立方体的角使用光线投射,并检查光线击中墙壁的位置。您如何知道对象的“厚度”?阴影是二维的,它的宽度是固定的。例如,1个单位。您不必“生成网格”。简单地说,拿一个盒子,改变长度/宽度(也就是说,通过改变比例),你就完成了。就这么简单。我真的很感谢你花时间和精力来帮助我,谢谢。经过大量的尝试和错误,我得到了一个类似的结果,但没有你的代码那么清晰和直接,所以这真的很有帮助。现在,变形具有阴影形状的网格的主要问题是阴影并不总是具有与原始对象相同的形状或相同的顶点。(链接中的示例)但我相信我可以使用您的代码解决这个问题,因为我能够找到构建所需网格所需的顶点!