Wetter

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

AmateurBB

Betreff: Wetter

BeitragSo, Aug 12, 2007 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab mal ne Frage an euch: Ich wöchte in einem Level einen Wettereffekt, zB. Regen erstellen. Allerdings sollte es so sein, dass die Regentropfen nicht durch Dächer e.t.c. kommen. Da es glaub ich nicht gut ist, für jeden Regentropfen eine extra Kollision zu programmieren, dachte ich, dass man das mit einer "Wettermap" vereinfachen könnte. Diese könnte so ähnlich wie eine Heighmap sein, bloß, dass sie Objekte mit einschließt und unsichtbar ist. Die Regentropfen fallen dann nur auf die Wettermap und nicht weiter...
user posted image

So viel zur Theorie... leider weiß ich nicht, ob sowas funktioniert oder wie man das programmieren soll...

Bitte um Vorschläge Exclamation
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

Lunatix

BeitragSo, Aug 12, 2007 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte den regen auch einfach als kleines feld oder 2d bereich vor die kamera setzen, dann überprüfen ob man in einem haus ist und bei zutreffen den regeneffekt ausblenden.

just my 2 cents oO
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

AmateurBB

Betreff: naja

BeitragSo, Aug 12, 2007 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
das sieht aber nicht so gut aus Sad

Ich hab mir das ungefähr so vorgestellt:

Code: [AUSKLAPPEN]
; Code für Erstellen
Wetterkarte=CreateImage(100, 100)
Setbuffer Imagebuffer(Wetterkarte)

For y = 1 to 100 ;ganze Karte
For x = 1 to 100 ;ganze Karte
;nu wirds erst
;====================
;MESSE ABSTAND VOM HIMMEL NACH UNTEN (ZUM DACH, bzw TERRAIN etc.)
;--> Hier ist der Punkt, wo ich nicht weiterkomme
;[evtl. Testtropfen fallen lassen und Kollidieren ?]
;====================
WritePixel x, y, ABSTANDSFARBE ;Ergibt sich dann, vllt. Lockbuffer und Writepixelfast
next
next
SaveImage (Wetterkarte, "Wetterkarte.bmp")


und dann wettermap in spiel intigrieren:
Code: [AUSKLAPPEN]
wettermap=Loadterrain("wetterkarte.bmp")
HideEntity wettermap ;geht da die Kollision noch?
EntityType wettermap, 1

;CREATEREGENTROPFEN

if EntityCollided(Regentropfen, 1) Then ;RESET REGENTROPFEN oä


oder

Code: [AUSKLAPPEN]

Dim Tropfhoehe(100, 100)

;... Höhe aus Bild zuweisen...

If TROPFEN < TROPFHOEHE(TropfenX, TropfenY) then ;RESET TROPFEN


War editiert, Matthias war eher
  • Zuletzt bearbeitet von AmateurBB am So, Aug 12, 2007 19:08, insgesamt 2-mal bearbeitet
 

Matthias

BeitragSo, Aug 12, 2007 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine sehr schöne Idee.
Also ich würde/werde es ungefär so machen.
Das Heightmap in einem Dim Map Trasverieren.
Dann ca 5000 Regentropfen erstellen. Diese dann XYZ Koords zuweisen.
Also so Ungefär
TropfenX(TrZaler)=Rand(MapGröße)
Für Z natürlich auch und für Y natürlich auch denn sie sollen ja von oben runter fallen.

Bei jedem schleifen durchgang kannst du dann die Regentropfen Updaten. Also zb so
Code: [AUSKLAPPEN]

For Tr=0 to 5000:
TropfenY(Tr)=TropfenY(Tr)-1
If TropfenY(Tr)<TropfMap(TropfenX(Tr),TropfenZ(Tr)) then NeuerTropfen()
next


So und nun fängt eigentlich das wirkliche Problem an.
Und zwar sie dazustellen. Wenn jeder Tropfen ein Entity währe dann kannst du das gleich mal abhaken.
Also kommst du um ein SingelSurface nicht drum herum bzw um AddMesh.

Dazu kannst du zb alle Tropfen Checken die im Umkreis deiner Camera sind.
Also mit Satz des Pytagoras. Rat: Berechne die Quadratwurzel am besten vor und speicher sie in einem Feld.

So nun hast du die Entfernugen der Tropen jeder Tropfen der näher als zb 100 ist
Wird nun dein TropfenDummy mit addMesh zu einem GesamtTropfenMesh addiert.

Beim nästen Schleifen durschgang must du dieses GesamtTropfenMesh wieder Löschen. Bzw ClearSurface.

Wenn du jetz zb deinen tropfen setzen willst dann kannst du das so machen.
Code: [AUSKLAPPEN]

PositionMesh TropfenDummy,TropfenX(Tr),TropfenY(Tr),TropfenZ(Tr)
AddMesh TropfenDummy,GesamtTropfenMesh
PositionMesh TropfenDummy,-TropfenX(Tr),-TropfenY(Tr),-TropfenZ(Tr)


Also wie du siehst mußt du den TropfenDummy wieder zurück setzen.
So wenn alles fertig ist Knallst du wieder die TropfenTextur auf deinem
GesamtTrofenMesh rauf und alles ist in Butter.

Wenn das grundModell ersteinmal steht fängst du an es zu optiemiern. Zb nicht alle tropfen auf entfernung Checken sondert nur die die in diesen Quadranten sind. Oder zb.
Das alles natürlich in eine einzige Schleife also runter setzen der Tropfen und AddMesh in einer einzigen schleife. Und noch was. Mache es nicht mit Types.
Es sei denn du willst das dein Spiel extra langsam läuft für Opis.

Viel Erfog! Gruß Matthias

AmateurBB

Betreff: Gute Idee!!! ABER...

BeitragSo, Aug 12, 2007 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Schön erklärt, Matthias, aber die Tropfmap muss ersteinmal erstellt werden...

user posted image

grün=Terrain
grau+rot=Objekte
blau=regenmap (nicht vorhanden)
türkis=regen[/img]

kp wie das gehen soll... Question
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/
 

Matthias

BeitragSo, Aug 12, 2007 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Na kannst ja ne Sphere Machen und dieses Eliptich Skalieren oder ebend in einem 3DModelle zb Wings Modellieren. Und als 3ds datei Laden. Ich weiß jetzt nicht so recht wo das Problem liegt.

Davon abgesehen du kannst auch linePick benutzen um den abstandd der Tropfen bis zum Boden heraus zu bekommen. Aber das ist schwachsinnig wenn du ehe schon die Höhen im Hightmap hast. Under ist das Problem das du gar kein heigtMap hast sondernt nur ein Map wo die ObjektPositionen Gespeichert sind??

Phalastos

BeitragSo, Aug 12, 2007 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest auch einfach von Deiner Camera / Player senkrecht in die Luft picken. Very Happy
Wenn das Resultat dann <> Skybox ist, sollte man in einem Haus oder unter einem Baum stehen.
Forbiddenmagic - Warfare of Forgotten Power

Lunatix

BeitragSo, Aug 12, 2007 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
5000 tropfen? Wozu -_- ? Achja, stimmt, es gibt da was nahmens "einfach" und "bequem"... Nee, das is zuviel performance verbrauch meiner meinung nach
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

trooper

BeitragSo, Aug 12, 2007 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wärs, wenn du aus deiner gesamten map, also wo die häuser schon plaziert sind, eine art höhenkarte stellst.
alle 5 einheiten überprüfst du, was der höchste punkt ist.
wenn du einen regentropfen, dann an der stelle (x,y) plazierst um runterzufällen, schaust du in der höhenkarte nach, ab welcher höhe er sich "verpuffen" soll.
diese höhenkarte könntest du eventuell auch nur einmal erstellen und dann irgendwo speichern. wenn du einen map editor hast, da vielleicht irgendwie automatisch speichern lassen.
ein bisschen komplizierter wärs wenn die tropfen nicht gerade runter fallen, aber auch dann ists noch möglich die höhenkarte zu verwenden, wahrscheinlich gibts aber auch elegantere lösungen !?
-- imtane.de.vu --
a cherring ping

AmateurBB

Betreff: Super!

BeitragMo, Aug 13, 2007 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Genauso werde ich es machen... Thank you all Wink

Aber... Wie kann ich so eine Heighmap erstellen...

Zitat:
alle 5 einheiten überprüfst du, was der höchste punkt ist.


So nicht:
Code: [AUSKLAPPEN]

;... Map+Objekte Laden
collmap=CreateImage(1024, 1024)
Setbuffer ImageBuffer (collmap)

pivot=CreatePivot()
For y = 1 to 100
For x = 1 to 100
PositionEntity pivot, x, 50, y
if LinePick(x, 50, y, 0, 50, 0) then
WritePixel x, y, entitydistance (pivot, LinePick(x, 50, y, 0, 50, 0))
endif
next
next
SaveImage (collmap, "Collmap.bmp")
 

Matthias

Betreff: Suchen

BeitragMo, Aug 13, 2007 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Suche einfach mal im Forum nach linePick. Es gibt unmengen Themen dazu.
EntityDistance brauchst du garnicht. PickedY() reicht schon

Gruß Matthias

AmateurBB

Betreff: Yeah, das rockt!

BeitragMo, Aug 13, 2007 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist der Befehl, den ich gebraucht hab...

Code: [AUSKLAPPEN]

collmap=CreateImage(1024, 1024)
Setbuffer ImageBuffer (collmap)

For y = 1 to 100
For x = 1 to 100
if LinePick(x, 50, y, 0, 50, 0) then
WritePixel x, y, PickedY()
endif
next
next
SaveImage (collmap, "Collmap.bmp")


So sollte es Funktionieren... oder?
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/
 

Matthias

BeitragMo, Aug 13, 2007 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke schon versuche es einfach mal.

Code: [AUSKLAPPEN]

collmap=CreateImage(1024, 1024):ImgBuffID=ImageBuffer(Collmap)
lockbuffer ImgBuffID
For y = 1 to 100
For x = 1 to 100
LinePick(x, 50, y, 0, 50, 0)
H=PickedY()
if H>0 then
Farbe=H*65536+H*256+H
WritePixel x, y,Farbe,ImgBuffID
end if
next
next
unlockBuffer ImgBuffID
SaveImage (collmap, "Collmap.bmp")


Wäre jetzt dafür um mehr Speed raus zu holen bzw um ein graues HightMap zu erhalten.

AmateurBB

Betreff: Es will nichts rechtes werden...

BeitragMo, Aug 13, 2007 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab die Schnauze voll von diesem Regen...

http://progger.pr.ohost.de/level.zip

Warum funktioniert das nicht Evil or Very Mad
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

Markus2

BeitragDi, Aug 14, 2007 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum machst du überhaupt nen Höhenbild?,
nur nen Array mit der höhe sollte doch auch reichen .
Zum testen kannst du dann an den Punkten nen Cube erstellen
wobei du CopyEntity benutzen solltest .

AmateurBB

Betreff: tada

BeitragDi, Aug 14, 2007 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

GRAPHICS3D 640,480,0,2
SETBUFFER BACKBUFFER()
camera=CREATECAMERA()
light=CREATELIGHT()
cube=loadterrain("hmp.bmp")
POSITIONENTITY camera,0,0,0
ROTATEENTITY light,90,0,0
POSITIONENTITY cube,300,-400,1000
ENTITYPICKMODE cube,2
Rotateentity cube, 0, 90, 90
Scaleentity cube, 1, 25, 1
TerrainShading cube, 1

WHILE NOT KEYDOWN(1)
   mx=MOUSEX()
   my=MOUSEY()
   entity=CAMERAPICK(camera,mx,my)
   IF entity=0 THEN ENTITYCOLOR cube,255,255,255
   IF entity<>0 THEN ENTITYCOLOR cube,0,255,0
   RENDERWORLD
   IF entity=0 THEN TEXT 0,0,"Nicht ausgewählt"
   IF entity<>0 THEN TEXT 0,0,"Ausgewählt:"+entity
   OVAL mx-5,my-5,10,10,1
   FLIP
WEND
END


testet das mal...
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group