![]() |
1
3
游戏引擎中的地形,如Unity、Unreal Engine和CryEngine,与一般静态或骨架网格的处理方式不同。通常在运行时创建不同级别的细节,而不是预先创建LOD的普通网格。从Blender或3DS Max等3D程序加载网格作为整个地形是不可行的。 rastertek的Direct3D教程非常适合学习,但显然不是OpenGL。这里是一个在Java OpenGL中创建基本地形的基本教程(我不认为这会涉及LOD处理)。 最常见的情况是,我认为我见过一个四叉树系统,其中有地形块,每个块都细分为其他四个块,这取决于条件(与摄影机的距离或屏幕空间大小)。 这就是标准四叉树LOD系统的外观,尤其是对于游戏Kerbal Space程序。
在此过程中,您将需要找出如何解决一些问题,例如如何消除具有不同LOD级别的两个地形面片之间的裂缝和间隙。Kerbal Space程序解决了这一问题,方法是以不同的方式处理边顶点以对齐,并且不允许任何两个相邻的地形面片具有超过一个LOD级别的差异。 我尝试的一种方法是为每个顶点上载两个顶点位置,当前LOD位置和LOD顶点的位置,从一个级别向下,然后根据相机距离在这两个顶点之间进行线性插值。但我很确定还有比这更优雅的方式。 不久前我发布了一段视频,视频中我在胡闹这些东西,它显示了基本的四叉树模式、裂缝问题,然后是顶点插值方法。有些人在CPU和GPU上创建补丁,并使用变换反馈读取任何必要的信息(例如物理信息)。做事情有很多方法,我希望能重新开始。 |
![]() |
2
3
多年前,我做了类似的事情,发现本教程非常有用: http://www.rastertek.com/tertut05.html 它描述了使用从地形网格中分割到AABBs的特定三角形创建四叉树,使用截锥剔除可以在运行时剔除地形的大部分,并且应用程序的性能应该会提高。只要您有信心导入从blender导出的网格(它们是否在.obj中?)您应该能够使用教程中概述的策略轻松地划分不同的三角形。 进一步的优化可能是根据与摄影机的距离为四叉树中的节点提供各种LOD,即如果节点与摄影机的距离为设定的距离,则通过跳过某些顶点来渲染较低的多边形网格,从而使较小的三角形“塌陷”为较大的三角形。我建议生成特定的索引列表来实现这一点,并使用相同的顶点数据,而不是使用单独的预生成网格块来节省内存。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |