- Home /
Painting foliage through a script - what's wrong here?
I'm making a script that paints the detail layer of the terrain (aka foliage) within a given polygon projection. The polygon projection part does work, but what's bugged is the filling itself - the foliage appears striped - lines altering between overgrown and bare, like in this image:

Been sniffing around this for hours and can't really find what's wrong. Here's some relevant code:
private void PaintFoliage(Polygon polygon, int layerIndex, int intensity)
{
int[,] splatmapData = activeTerrainData.GetDetailLayer(0, 0, activeTerrainData.detailWidth, activeTerrainData.detailHeight, layerIndex);
for (int y = 0; y < activeTerrainData.detailHeight; y++)
{
for (int x = 0; x < activeTerrainData.detailWidth; x++)
{
Vector3 worldSpacePosition = ConvertTerrainToWorldSpace(new Vector2(x, y),
new Vector2(activeTerrainData.detailWidth, activeTerrainData.detailHeight));
if (IsPointInPolygon(polygon, worldSpacePosition))
{
splatmapData[x, y] = intensity;
}
}
}
activeTerrainData.SetDetailLayer(0, 0, layerIndex, splatmapData);
}
bool IsPointInPolygon(Polygon polygon, Vector3 point)
{
bool result = false;
var a = polygon.Points[polygon.Points.Length - 1];
foreach (var b in polygon.Points)
{
if ((b.x == point.x) && (b.z == point.z))
return true;
if ((b.z == a.z) && (point.z == a.z) && (a.x <= point.x) && (point.x <= b.x))
return true;
if ((b.z < point.z) && (a.z >= point.z) || (a.z < point.z) && (b.z >= point.z))
{
if (b.x + (point.z - b.z) / (a.z - b.z) * (a.x - b.x) <= point.x)
result = !result;
}
a = b;
}
return result;
}
Vector3 ConvertTerrainToWorldSpace(Vector2 coords, Vector2 limits)
{
Vector3 answer = new Vector3(
Terrain.activeTerrain.transform.position.x + (coords.y / limits.x) * Terrain.activeTerrain.terrainData.size.x, 0,
Terrain.activeTerrain.transform.position.z + (coords.x / limits.y) * Terrain.activeTerrain.terrainData.size.z);
return answer;
}
Curiously enough, I've made a very similar script dealing with painting terrain and it works like a charm. I'd be very thankful for pointing out what's wrong here.
Your answer
Follow this Question
Related Questions
Terrain set detail layer problem. 0 Answers
heightmapWidth and heightmapHeight always equal 1 Answer
How to get terrain data? 0 Answers
Terrrain Texturing with solid colors,Terrain texturing with solid color tile 0 Answers
How do you make the material in the Terrain detail prototype properties update after runtime? 1 Answer