Baum-mapping
Übersicht

FelatBetreff: Baum-mapping |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie kann ich mit einem Positionenbild eine Baum-map herstellen?
Die Bäume sind positioniert auf die schwarze Punkten. ZB: ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube er hat eine LandschaftsKarte (Heightmap oder wie die sich nennen O.O) und er hat eine Baum-map ![]() ---langsam--- |
||
.... |
Felat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke!!!! | ||
Felat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte keine Doppelposts mehr... dafür gibt's Edit-buttons. | ||
www.bandradr.de ! Awesome ! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group