Terraintexturen, bezüglich TerrainLayerBlend [Gelöst]

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Terraintexturen, bezüglich TerrainLayerBlend [Gelöst]

Beitrag 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)
Zuletzt geändert von Chimorin am 11.04.2013 17:50, insgesamt 1-mal geändert.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Beitrag 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
Bild

- formerly known as Bananenfreak -
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Wiedermal Terraintexturen, bezüglich TerrainLayerBlend

Beitrag 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
Bild

- formerly known as Bananenfreak -
Antworten