Baum-mapping

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Felat

Betreff: Baum-mapping

BeitragDi, Okt 02, 2007 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich mit einem Positionenbild eine Baum-map herstellen?
Die Bäume sind positioniert auf die schwarze Punkten.
ZB:
user posted image

Markus2

BeitragDi, Okt 02, 2007 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Häh?

EDIT:
Raten kann ich auch ...
die Problemstellung ist total falsch formuliert ...
  • Zuletzt bearbeitet von Markus2 am Di, Okt 02, 2007 18:33, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Okt 02, 2007 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei verschachtelte Schleifen die per ql:ReadPixelFast Werte auslesen in Verbindung mit eines Texturbuffers, um die Position zu ermitteln. Dieses angewendet dann in Zusammenhang mit ql:TerrainY

Hoffe das ich helfen konnte.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Eingeproggt

BeitragDi, Okt 02, 2007 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub, felat braucht so einen Ansatz:

Code: [AUSKLAPPEN]
img=LoadImage("map.png")

Setbuffer ImageBuffer(img)
LockBuffer

For x=0 To ImageWidth(img)-1
  For y=0 To ImageHeight(img)-1
    col=ReadPixelfast(x,y)
    If col=0 Then
      ;Baum muss an x und y positioniert werden
    Endif
  Next
Next
UnlockBuffer


Das hab ich mal so "Freistil-gecodet". Also als Erklärung: Du liest die Map Pixel für pixel aus, und dort, wo die Farbe schwarz ist, setzt du deinen Baum hin. Das Baum setzen musst du selber machen, weil ich in 3D verdammt schlecht bin Smile
Weiters kann es sein, dass du die Farbe (col) in ihre Bestandteile aufteilen musst (mit Shl und Shr gehts am schnellsten. Erkläre ich gerne, wenn nötig)
Diese Bestandteile dann auf 0 abfragen, damit dir der von Blitz nicht unterstützte Alpha-Channel nicht dazwischenfunkt.
Natürlich nciht vergessen, den Buffer wieder auf BackBuffer zu setzen am Ende!

Diese Art ist übrigens je nach Map-Größe sehr langsam. Also bei über 512*512 solltest du dir was anderes überlegen....

mfG, Christoph.

EDIT: hectic hat natürlich Recht, du musst den Texturbuffer auslesen. Ich schreib nur gewohnheitsmäßig Imagebuffer
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
  • Zuletzt bearbeitet von Eingeproggt am Di, Okt 02, 2007 18:20, insgesamt 2-mal bearbeitet

Geeecko

BeitragDi, Okt 02, 2007 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube er hat eine LandschaftsKarte (Heightmap oder wie die sich nennen O.O) und er hat eine Baum-map Smile Jeder schwarze Punkt dabei ist ein Baum... Oder? O.o

---langsam---
....
 

Felat

BeitragDi, Okt 02, 2007 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!!!!
 

Felat

BeitragDi, Okt 02, 2007 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe etwas besseres gemacht (es läuft und ladet scneller)

Code: [AUSKLAPPEN]

global ValuePict=0
; Put it between FLIP and Renderworld, updateworld>>>
Valuepict=ValuePict+1
If ValuePict=1
DrawImage mapT,0,0
For y=0 To 10
For x=0 To 10
ReadPixel(x,y)
GetColor x,y
If ColorRed()=255
If ColorBlue()=255
If ColorGreen()=255
tree=CopyEntity(tree1)
PositionEntity tree,x*2,0,y*2
EndIf:EndIf:EndIf
Next
Next
EndIf


PS! Die Bäume müssen weiss auf die Baum-mappe sein! Du must color 1,1,1 als "background" haben!

Gameprogman

BeitragDi, Okt 02, 2007 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte keine Doppelposts mehr... dafür gibt's Edit-buttons.
www.bandradr.de ! Awesome !

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Okt 02, 2007 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Um alles ''richtig'' zu stellen, habe ich mal paar Anregungen:

- Ich hoffe das es sich hierbei um ein Schreibfehler jandelt ''Put it between FLIP and Renderworld, updateworld''. Ich würde generell nicht jeden Schleifendurchlauf neue Bäume erstellen und kopieren, sondern einmal vor dem Mainloop sowas machen.

- Auch würde ich die Variable ''tree'' nicht jedesmal überschreiben. Überschreibst du die Variable, so kannst du nie wieder mehr auf die Bäume zugreifen oder löschen, wenn ein neuer Level kommt.

- Ingame würde ich auch nicht DrawImage machen um dann im Front/BackBuffer mit ReadPixel operieren, sondern den Buffer direkt ansprechen Image/TextureBuffer.

- Du kannst übrigens die Bäume in einer Heightmap ''verstecken''. Blitz3D wählt den Höhenwert des höhsten Wertes einer Farbe. Wenn Rot am ''hellsten'' ist, wird Rot als Heightmapwert an Position gewählt. Wenn du nun überprüftst ob zB Rot und Grün unterschiedlich sind, dann kannst du an der Position ein Baum hinsetzen und die Heightmap würde weiterhin funktionieren.

zB:

Alle Werte sind gleich, Heightmapwert=211
Rot=211
Grün=211
Blau=211

Rot und Grün unterschiedlich (Baum setzen), Heigmapwert=178
Rot=178
Grün=178-1=177
Blau=178
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group