Unity 5:自动指定网格顶点的三角形列表

6

有没有一种自动指定顶点列表如何连接的方法或算法?

例如,假设我有以下内容(为简单起见,使用2D):

     *(0,0)     *(2,0)

*(-1,-1)   *(1,-1)

所以,我按照顺序(-1,-1),(0,0),(1,-1),(2,0)添加顶点,然后将索引0,1,2和2,1,3添加到三角形列表中,这样应该会生成一个由两个三角形组成的网格。
然而,随着顶点数量的增加,定义三角形的过程变得更加繁琐,除非我按某种排序方式添加顶点,这样我就可以跟踪哪个三角形,每次只需添加偏移量(但我不想这样做)。
我的想法是这样的(为了简单起见,再次考虑2D): 我想定义一个数组,如下所示:
[0 , 0 , 1 , 0 , 1 , 0]
[0 , 0 , 0 , 0 , 0 , 0]
[0 , 1 , 0 , 1 , 0 , 0]
其中表示xy平面,数组中的点是顶点(1)或不包含任何内容(0)。因此,array[0,0]将是x=0,y=0(没有内容),而array[2,1](一个顶点)将是x=1,y=2。使用这个,我想生成一个网格。
这可行吗?任何帮助都将不胜感激。
谢谢
编辑:我知道有一个三角化脚本,但它只适用于2D。
2个回答

3
不,你需要手动完成这个过程。

就是这样。

请注意,通过仅使用一行代码的例行程序,您可以“自动化”该过程。

如果您正在学习网格,请务必了解:如果您不想要使用重复的顶点,则无需使用它们

祝你好运,并恭喜你在整个Unity3D标签中提出了唯一值得的问题:O

(1) 我敦促您熟悉Unity中编织网格时的gotchya

http://answers.unity3d.com/answers/417487/view.html

请注意,同样的问题在这里反复被问到。

(2) 我敦促您研究其中的三个链接回答。

(3) 一定要知道这个... http://answers.unity3d.com/answers/352167/view.html

(4) 别忘了记住Unity的手性。。。 http://answers.unity3d.com/answers/267076/view.html


一个小点。 毫无疑问,您几乎永远不会在视频游戏中使用网格碰撞器。 Unity包括这个概念非常令人困惑,并且它不断地困惑着新手和业余编程人员。(如果您正在构建自己的网格,甚至添加动态碰撞器,那么您所要做的就是使用一个大小适当的盒子碰撞器。)


1
谢谢回复。我想实际上使用重复的网格,因为我希望网格是平面着色的。关于主要问题,那么如何三角化程序生成的光滑地形(我想制作低多边形地形,类似于这个:http://eternityh2.tumblr.com/)?我不想使用Unity的地形编辑器,因为我想在脚本中实际执行此操作并即时生成它。我想,根据我在问题中提到的数组如何填充,我可以编写一些针对我的应用程序特定工作的hacky代码,但是否有任何通用方法? - Amposter
1
你基本上是在问“如何程序化生成地形”吗?这是一个非常大的问题,我建议你提出一个新的问题,并尽可能具体地说明你想要什么样的地形(可以包括示例)。这是一个完整的领域,就像你可能需要雇用一个由五个人组成的团队来研究游戏中的这个方面一样。通常它是在着色器中完成的,你知道吗? - Fattie
1
首先,请务必谷歌搜索“unity程序化地形”..考虑像http://answers.unity3d.com/questions/123504/procedural-terrain.html这样的东西。此外,**一定要访问资产商店**,查看来自不同工作室的最新技术。有许多非常不同的数学方法,从体素相关到像https://www.assetstore.unity3d.com/en/#!/content/48730这样的东西,当然还有这种类型的东西https://www.assetstore.unity3d.com/en/#!/content/3640,这是一个独立的领域。 - Fattie
1
在你的新问题中,我鼓励你要具体说明你在该领域所寻找的内容。可以在Google上搜索"地形柏林噪声"之类的东西,还有https://www.assetstore.unity3d.com/en/#!/content/37649。看看这个视频...https://www.youtube.com/watch?v=FYTsB2wpnDQ 很令人印象深刻,对吧? - Fattie
1
这基本上就是我想做的,只是多边形要少一些。但我猜他使用了Perlin噪声来生成高度图,然后将其应用于Unity中的地形,而我想要程序化地生成网格本身,但我不确定如何生成三角形列表。我很快会发布一个更详细的问题。只是现在大学又开始了,所以很忙。谢谢你的帮助 :) - Amposter
显示剩余2条评论

1
原来是可以做到的。有更复杂的方法可以实现,比如说Marching Cubes,但是它们相当复杂,很难实现,并且由于效率太低而无法在实时运行中使用(编辑:除非你将其转移到GPU上)。

1
不是绝对正确的...你可以将Marching Cubes / Marching Tetrahedra卸载到GPU上,它能够实时处理所有内容。当然,如果你想把这个网格返回到CPU,你就会遇到所有标准的带宽问题。 - Basic
1
啊,好的。我不知道将工作卸载到GPU上意味着什么,但是如果你仍然觉得在考虑到所有提到的问题后实现Marching Cubes是可行的解决方案,那么你可以这样做。 - Amposter
2
如果您感兴趣,这里的信息:https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html 是一个很好的介绍。事实上,整本书都是非常宝贵的。 - Basic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接