Seite 1 von 1

Terraintexturen, bezüglich TerrainLayerBlend [Gelöst]

Verfasst: 27.03.2013 18:05
von Chimorin
Halli Hallo,

wie man den anderen Threads entnehmen kann, vergewaltige ich zur Zeit die OGRE-Engine :twisted:
Mein neuestes Problem betrifft wieder einmal die Blendwerte der Terraintexturen. Ich würde gerne alle Texturen (Außer der 1., bzw. 0.) auf den Blendwert 0 setzen. Also völlig durchsichtig.
Die einzige Möglichkeit, wie ich sie sehe, ist, jeden Punkt einzeln durchzugehen und den Blendwert auf 0 zu setzen. Das würde bei größeren Karten schätze ich mal schon ne Stunde in Anspruch nehmen... :freak:
Bis jetzt setze ich die Werte erst dann auf 0, wenn genau an dieser Stelle auch eine neue Textur hin soll. Kann man das auch leichter machen? So wie es jetzt funktioniert, gibt es kleinere Aussetzer von ca. 5-10s, was ich nicht gerade sehr toll finde (Soll entweder weniger schnell beim Erstellen der Welt geschehen oder realtime (zeitkritisch ^^) während dem "Malen").

Bisher sieht es so aus, es gibt meiner Meinung nach Fehler in der Darstellung bei über 2 Texturen, aber ich habe bis jetzt nur 2 ^^:

Code: Alles auswählen

For h = 0 To #layerAnzahl - 1       ;1024, weil die LayerBlendmapgröße 1024 beträgt.
          blendWert = GetTerrainTileLayerBlend(terrain, teilX, teilY, h, TerrainTilePointX(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024, 1024 - TerrainTilePointY(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024)
          
          If blendWert = 1
            SetTerrainTileLayerBlend(terrain, teilX, teilY, h, TerrainTilePointX(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024, 1024 - TerrainTilePointY(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024, 0.0)
            UpdateTerrainTileLayerBlend(terrain, teilX, teilY, h)
            Break
          EndIf
        Next
        
        SetTerrainTileLayerBlend(terrain, teilX, teilY, listItem, TerrainTilePointX(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024, 1024 - TerrainTilePointY(terrain, teilX, teilY, stelle\x, stelle\y, stelle\z) * 1024, 1.0)
        
        UpdateTerrainTileLayerBlend(terrain, teilX, teilY, listItem)

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Verfasst: 11.04.2013 12:32
von Chimorin
:Push...

Macht niemand was in diese Richtung? Es funktioniert alles super, nur ist das Setzen vieeel zu langsam. Für einen Kreis mit Radius 1 Welteinheit sind es 12(!) Sekunden. Das kann einfach nicht sein...

Gruß,

Banane

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Verfasst: 11.04.2013 17:02
von bobobo
Willst du ein Video auf dem Terrain darstellen ?

Das könnte was helfen.

Das UpdateTerrainTileLayerBlend(..)
solltest du nach der Schleife mit dem
SetTerrainTileLayerBlend(..)
setzen

siehe auch PB-Example TerrainBlend.pb

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Verfasst: 11.04.2013 17:49
von Chimorin
Ich möchte kein Video darstellen, es ist eine Echtzeitterrainbearbeitung (Terrainpainting wird das meine ich genannt).

Danke für den Tipp, jetzt sind es 9 Sekunden :D
Ich schaue mal, was ich noch verbessern kann, sonst muss ich doch noch die Texturgröße minimieren °~°

Texturgröße kann so bleiben, ich habe mit Hilfe von ElapsedMilliseconds() den Übeltäter gefunden.

Das UpdateTerrainTileLayerBlend() verbraucht sehr viel Zeit. Ich habe es jetzt auf das Minimum reduziert (Am Ende wird das gesamte Terrain aktualisiert). Jetzt kann man sogar Radien von 12 nehmen :D