예제 #1
0
/**
 *  erzeugt die Terrain-Vertices.
 *
 *  @author OLiver
 */
void TerrainRenderer::GenerateVertices(const GameWorldViewer * gwv)
{
	delete[] vertices;
	vertices = new Vertex[width * height];
	memset(vertices, 0, sizeof(Vertex) * width * height);

	// Terrain generieren
	for(unsigned short y = 0; y < height; ++y)
	{
		for(unsigned short x = 0; x < width; ++x)
		{
			UpdateVertexPos(x,y,gwv);
			UpdateVertexColor(x,y,gwv);
			UpdateVertexTerrain(x,y,gwv);
		}
	}

	// Ränder generieren
	for(unsigned short y = 0; y < height; ++y)
	{
		for(unsigned short x = 0; x < width; ++x)
		{
			UpdateBorderVertex(x,y,gwv);
		}
	}
}
예제 #2
0
/**
 *  erzeugt die Terrain-Vertices.
 *
 *  @author OLiver
 */
void TerrainRenderer::GenerateVertices(const GameWorldViewer& gwv)
{
    vertices.clear();
    vertices.resize(width * height);

    // Terrain generieren
    for(MapCoord y = 0; y < height; ++y)
    {
        for(MapCoord x = 0; x < width; ++x)
        {
            MapPoint pt(x, y);
            UpdateVertexPos(pt, gwv);
            UpdateVertexColor(pt, gwv);
            UpdateVertexTerrain(pt, gwv);
        }
    }

    // Ränder generieren
    for(MapCoord y = 0; y < height; ++y)
    {
        for(MapCoord x = 0; x < width; ++x)
        {
            MapPoint pt(x, y);
            UpdateBorderVertex(pt, gwv);
        }
    }
}
예제 #3
0
/**
 *  erzeugt die Terrain-Vertices.
 *
 *  @author OLiver
 */
void TerrainRenderer::GenerateVertices(const GameWorldViewer* gwv)
{
    delete[] vertices;
    vertices = new Vertex[width * height];
    memset(vertices, 0, sizeof(Vertex) * width * height);

    // Terrain generieren
    for(MapCoord y = 0; y < height; ++y)
    {
        for(MapCoord x = 0; x < width; ++x)
        {
            MapPoint pt(x, y);
            UpdateVertexPos(pt, gwv);
            UpdateVertexColor(pt, gwv);
            UpdateVertexTerrain(pt, gwv);
        }
    }

    // Ränder generieren
    for(MapCoord y = 0; y < height; ++y)
    {
        for(MapCoord x = 0; x < width; ++x)
        {
            MapPoint pt(x, y);
            UpdateBorderVertex(pt, gwv);
        }
    }
}
예제 #4
0
void TerrainRenderer::AltitudeChanged(const MapCoord x, const MapCoord y, const GameWorldViewer * gwv)
{
	// den selbst sowieso die Punkte darum updaten, da sich bei letzteren die Schattierung geändert haben könnte
	UpdateVertexPos(x,y,gwv);
	UpdateVertexColor(x,y,gwv);
	
	for(unsigned i = 0;i<6;++i)
		UpdateVertexColor(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv);
	

	// und für die Ränder
	UpdateBorderVertex(x,y,gwv);

	for(unsigned i = 0;i<6;++i)
		UpdateBorderVertex(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv);

	// den selbst sowieso die Punkte darum updaten, da sich bei letzteren die Schattierung geändert haben könnte
	UpdateTrianglePos(x,y,gwv,true);
	UpdateTriangleColor(x,y,gwv,true);
	
	for(unsigned i = 0;i<6;++i)
	{
		UpdateTrianglePos(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv,true);
		UpdateTriangleColor(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv,true);
	}


	// Auch im zweiten Kreis drumherum die Dreiecke neu berechnen, da die durch die Schattenänderung der umliegenden
	// Punkte auch geändert werden könnten
	for(unsigned i = 0;i<12;++i)
		UpdateTriangleColor(gwv->GetXA2(x,y,i),gwv->GetYA2(x,y,i),gwv,true);
	

	// und für die Ränder
	UpdateBorderTrianglePos(x,y,gwv,true);
	UpdateBorderTriangleColor(x,y,gwv,true);

	for(unsigned i = 0;i<6;++i)
	{
		UpdateBorderTrianglePos(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv,true);
		UpdateBorderTriangleColor(gwv->GetXA(x,y,i),gwv->GetYA(x,y,i),gwv,true);
	}

	for(unsigned i = 0;i<12;++i)
		UpdateBorderTriangleColor(gwv->GetXA2(x,y,i),gwv->GetYA2(x,y,i),gwv,true);
}