创建悬崖
创建悬崖还是在创建地图的基础上加上几个语句,然后把地形语句删掉。
语句是:
[( )] rmSetAreaCliffType(int areaID, string cliffName): Sets the cliff type for an area.
[( )] rmSetAreaCliffType(int areaID, string cliffName): 给地形设定悬崖类型,然后这个地形就变成悬崖了,cliffName参考下表。
 |
Amazon |
 |
Andes |
 |
Andeswall |
 |
Araucania Central |
 |
araucania central coast |
 |
araucania central coast2 |
 |
Araucania North |
 |
Araucania North Coast |
 |
Araucania North Coast2 |
 |
Araucania South |
 |
Araucania Southern Coast |
 |
Bayou |
 |
California |
 |
californiacoast |
 |
californiacoast2 |
 |
Caribbean |
 |
Carolina |
 |
Carolina Coast |
 |
Carolina Inland |
 |
Cave |
 |
Ceylon |
 |
Coastal Japan |
 |
Deccan Plateau |
 |
Deccan Plateau River |
 |
Great Plains |
 |
Himalayas |
 |
New England |
 |
New England Inland |
 |
New England Inland Grass |
 |
New England snow |
 |
New England_texgrass |
 |
Orinoco |
 |
Painteddesert |
 |
Patagonia |
 |
Patagonia |
 |
Rocky Mountain Edge |
 |
Rocky Mountain2 |
 |
Sonora |
 |
SPC Caribbean |
 |
SPC Mountain Pass |
 |
SPC Rocky cliffs |
 |
Texas |
 |
Texas Grass |
 |
Yellow River |
例如这是一个地形:
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.0);
rmSetAreaMix(TestID, "himalayas_a");
rmSetAreaBaseHeight(TestID, 4.0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmBuildArea(TestID);
将上述语句改成悬崖如下:
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.0);
//rmSetAreaMix(TestID, "himalayas_a");将设定地形类型语句删除,就算是保留也不会再起任何作用了。
rmSetAreaBaseHeight(TestID, 4.0);//地形高度也能作为悬崖高度
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmBuildArea(TestID);
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.0);
//rmSetAreaMix(TestID, "himalayas_a");将设定地形类型语句删除,就算是保留也不会再起任何作用了。
rmSetAreaBaseHeight(TestID, 10.0);//地形高度10
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmBuildArea(TestID);
与前面几个教程一样,悬崖可以删掉rmSetAreaLocation定位,然后用放置限制随机放置,这里不再列出。
事实上悬崖我也搞不太懂,悬崖还有几个语句例如rmSetAreaCliffHeight:
[( )] rmSetAreaCliffHeight(int areaID, float val, float variance, float ramp): Set an area's cliff height.
rmSetAreaCliffHeight是一个可以设定悬崖高度的语句,以下是rmSetAreaCliffHeight的测试结果
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
//rmSetAreaBaseHeight(TestID, 4.0);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 100.0, 1.0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
variance:变化幅度;
ramp :斜坡;
总合以上测试结果大概就是
rmSetAreaCliffHeight(int areaID, float val悬崖高度, float variance浮动高度(悬崖最高值), float ramp斜坡,一般为1.0,数值越大斜坡越直,<1的话已经不能算悬崖了,0.0直接变成平地)
也只能这样解释了,我也被搞懵了。
不管这个语句了,另一个语句:
rmSetAreaCliffEdge(int areaID, int count, float size, float variance, float spacing, int mapEdge): Set cliff edge parameters for an area.
----------------------------------------------------
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 3, rmAreaTilesToFraction(2000), 1, 1, 0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 3, rmAreaTilesToFraction(2000), 0, 10, 0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 1, 1.0, 0.1, 1.0, 0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
rmSetAreaCliffEdge大概是在边缘生成额外悬崖
rmSetAreaCliffEdge(int areaID, int count数量, float size大小, float variance高度浮动, float spacing???, int mapEdge???)
---------------------------------------------------------------------------
创建悬崖还可以使用rmAddAreaInfluenceSegment(int areaID, float xFraction1, float zFraction1, float xFraction2, float zFraction2): Adds an area influence segment. 生成根据两个坐标连成的直线生成额外悬崖。
rmAddAreaInfluenceSegment(TerrainID, 1.0, 1.0, 0.0, 0.0);添加后,如果定位点在rmAddAreaInfluenceSegment的直线范围里面,会额外生成一条直线地形。例如rmSetAreaLocation为0.5,0.5;而rmAddAreaInfluenceSegment第一个点为1.0,1.0,第二个点为0.0,0.0,那么1.0,1.0到0.0,0.0之间会生成额外地形,大小依然为rmSetAreaSize定义的大小。(似乎还有什么影响着悬崖大小......)
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, rmAreaTilesToFraction(500), rmAreaTilesToFraction(500));
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmAddAreaInfluenceSegment(TestID, 0.0, 0.1, 0.6, 0.6);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
再把rmSetAreaCliffEdge加上去
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, 0.1, 0.1);
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 1, 10, 1, 1, 0);
rmAddAreaInfluenceSegment(TestID, 0.0, 0.0, 1.0, 1.0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
可以添加多个rmAddAreaInfluenceSegment
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, 0.1, 0.1);
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, rmRandInt(6, 8), 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 1, 10, 1, 1, 0);
rmAddAreaInfluenceSegment(TestID, 0.0, 0.0, 1.0, 1.0);
rmAddAreaInfluenceSegment(TestID, 0.5, 1.0, 0.5, 0.0);
rmAddAreaInfluenceSegment(TestID, 0.0, 1.0, 1.0, 0.0);
rmAddAreaInfluenceSegment(TestID, 0.0, 0.5, 1.0, 0.5);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
---------------------------------------------------------------------------
补充:峡谷地形
int TestID=rmCreateArea("Test ID Area");
rmSetAreaSize(TestID, 0.1, 0.1);
rmSetAreaWarnFailure(TestID, true);
rmSetAreaSmoothDistance(TestID, 0);
rmSetAreaCoherence(TestID, 0.8);
rmSetAreaCliffType(TestID, "SPC Caribbean");
rmSetAreaCliffHeight(TestID, -10, 1.0, 1.0);
rmSetAreaCliffEdge(TestID, 1, 10, 1, 1, 0);
rmSetAreaElevationOctaves(TestID, 3);
rmSetAreaObeyWorldCircleConstraint(TestID, false);
rmSetAreaLocation(TestID, 0.5, 0.5);
rmSetAreaHeightBlend(TestID, 100);
rmBuildArea(TestID);
删除rmSetAreaCliffEdge后
---------------------------------------------------------------------------
请问rmSetAreaCliffEdge到底怎样控制?请问!@#¥%……&*这是什么?
本次教程还没有结束,但是作者跑了。