Answers:
对于“经典” 3D地形编辑器,步骤可能是:
生成一个网格(例如,正方形的网格,每个正方形由两个三角形组成),所有顶点在三角形之间共享(因此每个相交处只有一个法线)。
应该将其制成3DMesh并在程序中呈现。
制作一个工具来升高和降低(变大和变大)网格的一部分(您需要计算鼠标光标在网格上的位置并修改网格顶点,但只能向上和向下)。
创建一个大的纹理(例如1024x1024x4或更高),并使用splat-map对其进行纹理处理:
可以对其进行绘制(例如,使用R,G,B或Alpha,而不是粉红色),并选择替换那些难看的原色(红色,蓝色,绿色,Alpha)的纹理,或者用它们来表示:
着色器(您将需要创建)应将这些漂亮的纹理(例如石头,草等)与splatmap中的强度(丑陋的纹理)相乘,然后将整体混合在一起,使其看起来例如(与只喜欢2种颜色),就像这样:
很抱歉看到大图,我在工作中把它混在一起。
首先要弄清楚地形的数据结构以及编辑器的要求。是网眼吗?高度数组?某种Minecraft风格的体素系统?您是否需要能够添加树木和建筑物等网格地形特征?手动,自动还是两者兼而有之?我可以继续,但是你明白了。
基本的地形编辑器并不难编写,但是具体细节会因您所制作的游戏以及要制作的地形类型而有很大不同。
这主要是对Valmond的回应的后续行动,但似乎还不够简短,不能补充评论。
着手制作基本的编辑器后,您可能想尝试完全在GPU上生成高度图。这是完全可选的,但这是将工作卸载到GPU以便不断变化的地形的好方法。Valmond已经提到在像素着色器上完成纹理喷涂,但是也可以使用顶点着色器,使用纹理查找来升高和降低网格中的顶点。这是有关如何使用顶点着色器完成此操作的教程。非着色器内容是C#和XNA特定的,但重要的内容是在着色器代码中。
在这种情况下,您在CPU端的代码将只处理修改存储在内存中的灰度纹理。您的网格保持平坦,顶点不会被CPU更新。每次更改纹理时,可以将新纹理传递到GPU。
请记住,并非所有的着色器模型都支持顶点着色器上的纹理采样(例如,在HLSL中,您至少需要着色器模型3.0)。
您可以看一下Ogre的ETM http://www.ogre3d.org/addonforums/viewforum.php?f=16,它应该给您一些想法。如果您想查看它的运行情况,Artifex Terra将基于它。