Krater in der Landschaft

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Black Spider

Betreff: Krater in der Landschaft

BeitragSa, März 25, 2006 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
in unserem Spiel soll die Landschaft kaputt gehen...
Nun gut, sähe schick aus, und einen Ansatz und eine Idee hab ich.
Das problem ist,
das die Explosion einen riesigen Krater in die Landschaft sprengen soll,
und meine Funktion nur den Punk aus der Landschaft runterzieht,
der der Explosion am nächsten ist.
Gäbe es da eine möglichkeit, auch die Umliegenden Vertices soweit runterzuziehen,
dass ein Krater entsteht ?

bisheriger COde:
Code: [AUSKLAPPEN]
Function Krater(ex, ey, ez, kraft)

   TFormPoint( ex,ey,ez,0,map )
   hi#=TerrainHeight( map,TFormedX(),TFormedZ() )
If hi>-300
   hi=hi-kraft:If hi<-300 Then hi=-300
   ModifyTerrain map,TFormedX(),TFormedZ(),hi,True
EndIf


End Function


und noch ein bild:
user posted image


Danke![/code]
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

Blitzcoder

Newsposter

BeitragSa, März 25, 2006 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Spider.

Ich würde meine MAP mit Einem 3d-Programm modlen und als *.x speichern.
So kannst du auch gleich Gegenstände und Häuser dierekt auf die MAP setzten. Wenn eine Rakete einschlägt, oder eine andere explosion stattfindet, ist ja in der regel der punkt der explosion bekannt.
Somit kann ma nun die vertexpunkte, die in der Nähe sind nehmen und vom explosionsort weg verschieben.

Das Hat auch den Vorteil, dass auch Gegenstände auf der Map gleich mit kaputtgehen, falls sie in der Model Datei mit drin sind.

Ich benutze für modles immer cinema 4d. der hat auch eine Arkt kleinen Terragen drin, mit dem sich sehr leicht landschaften erstellen lassen.

MfG Blitzcoder

Black Spider

BeitragSa, März 25, 2006 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
das sollte eigentlich auch mit nem Terrain gehen.

Wie könnte ich es denn anstellen, die umliegenden Punkte vom Explosionsort wegzubewegen ?
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

dimaster

BeitragSa, März 25, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
der punkt der am nächsten an der explosion ist wird nach unten gezogen.
mal ein sehr einfaches beispiel welches du dann schöner machen solltest

Code: [AUSKLAPPEN]

;bekannter punkt
x=10
y=10
nachuntenzieher=10
;die umliegenden punkte so mit nach unten ziehen
x=x-1
y=y-1
nachuntenzieher= nachuntenzieher-1
...


so könnte mans versuchen, sollte so auch gehen...

mfg dimaster

P.S. gibt natürlich noch andere möglichkeiten...

Blitzcoder

Newsposter

BeitragSa, März 25, 2006 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Also, man müsste alle Punkte durchgehen:

Code: [AUSKLAPPEN]

surfaces=countsurfaces(map)
      
      For a=1 To surfaces
            surf=getsurface(map,a)
            punkte=countvertices(surf)
            For b=0 To (punkte-1)
                  ;Prüfen
            Next
      Next


Und dann müsste man da wo jetzt Prüfen steht, prüfen, ob einpunkt nah an der eplosion liegt:

Code: [AUSKLAPPEN]


x=abs(explox-vertexx(surf,b))
y=abs(exploy-vertexy(surf,b))
z=abs(exploz-vertexz(surf,b))

if x<10  and y<10 and z<10 then ;Punktverschiebung


Dann könnte man noch einbauen, dass ein punkt umso weniger verschoben wird, umso weiter er von der explosion weg ist.
So ensteht ein runder krater.

MfG Blitzcoder
 

antome

!!! gesperrt !!!

BeitragSa, März 25, 2006 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich zufällig gerade an einem kleinen Tool arbeite mit dem ich
aus der First Person Perspektive auf einer Heightmap rumlaufen kann und dabei das Terrain verbessern , (d.h. anheben und absenken von bestimmten Punkten oder Flächen) geb ich dir mal ein kleines Beispiel wie ich eine 5x5 große Fläche absenke,
für einen Krater solltest du das Loch etwas größer wählen und rund machen und vieleicht noch mit RND# arbeiten damit die Krater nicht alle gleich aussehen, den Rand würde ich dazu noch etwas aufwerfen an manchen Stellen.


Code: [AUSKLAPPEN]
        For i = xm-2 To xm+2
              For j = zm-2 To zm+2
                  If i = xm And j = zm     
                      ModifyTerrain Terrain, i, j,( TerrainHeight# (Terrain, i, j) - 0.003  )  ,1                          
                  ElseIf i <= xm+1 Or i <= xm-1 And j <= zm+1 Or j <= zm-1   
                      ModifyTerrain Terrain, i, j,( TerrainHeight# (Terrain, i, j) - 0.002  )  ,1                    
                  Else   
                      ModifyTerrain Terrain, i, j,( TerrainHeight# (Terrain, i, j) - 0.001  )  ,1 
                   
                  EndIf
              Next
           Next
antome

Black Spider

BeitragSo, März 26, 2006 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hhhmmm... sollte eigentlich funktionieren, doch es passiert nix...:
Code: [AUSKLAPPEN]
Function Krater(ex, ey, ez, kraft,gr)
For grs = 0 To Rnd(gr)

For i = ex-2 To ex+2
For j = ez-2 To ez+2
If  ((i = ex) And (j = ez)) Then
ModifyTerrain map, i, j,( TerrainHeight# (map, i, j) - kraft ) ,1
ElseIf ((i <= ex+1) Or (i <= ex-1)) And ((j <= ez+1) Or (j <= ez-1))
ModifyTerrain map, i, j,( TerrainHeight# (map, i, j) - (kraft/1.5) ) ,1
Else
ModifyTerrain map, i, j,( TerrainHeight# (map, i, j) - (kraft/2.5) ) ,1

EndIf
Next
Next
Next


End Function

ich check nicht warum. Die Landschaft bleibt unverändert, selbst wenn ich die variable kraft auf 30 stelle!

weiss einer warum ?
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

5k41

BeitragSo, März 26, 2006 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit 30 wird wahrscheinlich daran liegen, das man die höhe eines terrains nur in "prozent" angeben kann sprich: eine zahl zwischen null und eins
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

antome

!!! gesperrt !!!

BeitragSo, März 26, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Darum benutze ich auch so kleine Zahlen in dem Beispiel.
Und das Terrain muß natürlich eine Höhe größer 0.0 haben sonst kann man nichts mehr abziehen.

Edit: bei meinem Tool das ich grad schreibe (für eigene Zwecke) hab ich
bisher die mindest Zahl um das Terrain erhöhen und senken noch nicht genau ermittelt, ich hab bisher das Phänomen das ich zum erhöhen 0.004 hinzu addieren muss und zum senken allerdings nur 0.001 abziehen um den selben Höhenunterschied zu erreichen.
Ich muss das nochmals genauer testen, aber evtl. rundet Blitz3D das auf eine bestimmte Höhe und beim erhöhen braucht man 0.004 um die nächste Stufe zu erreichen und nur 0.001 in der anderen Richtung wenn Blitz3D immer nach unten abrundet.
antome

Blitzcoder

Newsposter

BeitragMo, März 27, 2006 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach zusammen.

So, ich hab mal ein bsp gecodet.
der krater ist zwar nicht rund, da müsste man etwasd mit den werten speieln:
Code: [AUSKLAPPEN]

Graphics3D 1024,768,0,2
cam=createcamera()
PositionEntity cam,0,50,-150
boden=loadmesh("boden.x")
tex=LoadTexture("tex.jpg")
EntityTexture boden,tex
ScaleTexture tex,0.01,0.01
surfaces=countsurfaces(boden)
     
For a=1 To surfaces
surf=getsurface(boden,a)
punkte=countvertices(surf)
For b=0 To (punkte-1)
x#=abs(vertexx(surf,b)-Explox)
y#=abs(vertexy(surf,b)-Exploy)
z#=abs(vertexz(surf,b)-Exploz)
If x<50 And y<50 And z<50 Then vertexCoords surf,b,VertexX(surf,b),VertexY(surf,b)-(50-x),VertexZ(surf,b)
Next
Next

SetBuffer BackBuffer()
Repeat
If KeyDown(208) Then MoveEntity cam,0,0,-3
If KeyDown(200) Then MoveEntity cam,0,0,3
If KeyDown(203) Then MoveEntity cam,-3,0,0
If KeyDown(205) Then MoveEntity cam,3,0,0
UpdateWorld()
RenderWorld()
Flip
Until KeyDown(1)
End

Der Code Braucht noch zwei files:

http://de.geocities.com/johann...krater.zip

MfG Blitzcoder

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group