Krater in der Landschaft
Übersicht

![]() |
Black SpiderBetreff: Krater in der Landschaft |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: ![]() Danke![/code] |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group