コード例 #1
0
DWORD
TerrainPatch::BlendValue(double y)
{
	if (terrain && y >= 0 && !water) {
		// find the proper layer:
		for (int i = 0; i < terrain->GetLayers().size(); i++) {
			TerrainLayer* layer = terrain->GetLayers().at(i);

			if (y >= layer->GetMinHeight() && y < layer->GetMaxHeight()) {
				double scale = (y-layer->GetMinHeight()) / (layer->GetMaxHeight()-layer->GetMinHeight());

				if (scale < 0.2)
				scale = 0;
				else if (scale > 0.8)
				scale = 1;
				else
				scale = (scale - 0.2) / 0.6;

				if ((i & 1) == 0) {
					scale = 1 - scale;
				}

				DWORD val = (DWORD) (scale*255);

				return val << 24;
			}
		}
	}

	return 0;
}
コード例 #2
0
int
TerrainPatch::CalcLayer(Poly* poly)
{
	if (terrain && poly) {
		if (water)
		return 0;

		double y = 1e6;

		for (int i = 0; i < poly->nverts; i++) {
			double h = poly->vertex_set->loc[ poly->verts[i] ].y;

			if (h >= 0 && h < y) {
				y = h;
			}
		}

		if (y <= terrain->GetLayers().first()->GetMinHeight())
		return 0;

		for (int i = 0; i < terrain->GetLayers().size(); i++) {
			TerrainLayer* layer = terrain->GetLayers().at(i);

			if (y >= layer->GetMinHeight() && y < layer->GetMaxHeight()) {
				return i;
			}
		}
	}

	return -1;
}