Wetter
Übersicht

![]() |
AmateurBBBetreff: Wetter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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...
![]() So viel zur Theorie... leider weiß ich nicht, ob sowas funktioniert oder wie man das programmieren soll... Bitte um Vorschläge ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... |
![]() |
AmateurBBBetreff: naja |
![]() Antworten mit Zitat ![]() |
---|---|---|
das sieht aber nicht so gut aus ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
AmateurBBBetreff: Gute Idee!!! ABER... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schön erklärt, Matthias, aber die Tropfmap muss ersteinmal erstellt werden...
![]() grün=Terrain grau+rot=Objekte blau=regenmap (nicht vorhanden) türkis=regen[/img] kp wie das gehen soll... ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könntest auch einfach von Deiner Camera / Player senkrecht in die Luft picken. ![]() Wenn das Resultat dann <> Skybox ist, sollte man in einem Haus oder unter einem Baum stehen. |
||
Forbiddenmagic - Warfare of Forgotten Power |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
AmateurBBBetreff: Super! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genauso werde ich es machen... Thank you all ![]() 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") |
||
MatthiasBetreff: Suchen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. Suche einfach mal im Forum nach linePick. Es gibt unmengen Themen dazu.
EntityDistance brauchst du garnicht. PickedY() reicht schon Gruß Matthias |
||
![]() |
AmateurBBBetreff: Yeah, das rockt! |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
AmateurBBBetreff: Es will nichts rechtes werden... |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich hab die Schnauze voll von diesem Regen...
http://progger.pr.ohost.de/level.zip Warum funktioniert das nicht ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 . |
||
![]() |
AmateurBBBetreff: tada |
![]() Antworten mit Zitat ![]() |
---|---|---|
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/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group