Fenster realistisch zersplittern lassen

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

TheProgrammer

Betreff: Fenster realistisch zersplittern lassen

BeitragDi, Sep 14, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Weiß vieleicht jemand, wie man am besten Fenster
in BB3D zersplittern lassen kann?

Ich dachte da schon an zwei Varianten:

1. Das Fenster in 1000 kleine Teile zersplittern lassen

Problem: Wie mach ich sowas am besten?

2. Das Fenster per Animation in wenigere Teile zersplittern
lassen

Problem: Sieht ziemlich unspektakulär aus



Könnt ihr mir dabei vieleicht weiterhelfen?

PS: Bei der Suche habe ich auch nichts gefunden
(Nicht, dass sich einige wieder aufregen...)
aktuelles Projekt: The last day of human being

Markus2

BeitragDi, Sep 14, 2004 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn du von Fenster redest meinst du bestimmt 2D oder ?
Dann einfach kleine Minibilder erzeugen und den Backbuffer
in Teile da rein schieben , könnte man bestimmt gut mit Sprites machen
und diese in Types unterbringen .

Guck mal unter Blitzbasic.com im Archiv
nach screen shatter von Anthony Flack, vieleicht hilft dir das weiter ...

TheProgrammer

BeitragDi, Sep 14, 2004 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein. Ich meine in 3D.

Aber trotzdem:

Markus2 hat Folgendes geschrieben:

Dann einfach kleine Minibilder erzeugen und den Backbuffer
in Teile da rein schieben
, könnte man bestimmt gut mit Sprites machen
und diese in Types unterbringen .


Was meinst du damit eigentlich?
aktuelles Projekt: The last day of human being

Markus2

BeitragDi, Sep 14, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn du von zersplittern redest meint man du meinst
eine Glasscheibe und die ist 2D oder besser gesagt eine Ebene .

Also meinst du jetzt die Triangles von einem Mesh oder wie ?
Die könntest du von einem Mesh übernehmen bzw. neu
erzeugen und auch in Types unterbringen und dann vom
Ursprung her wild rotierend weg fliegen lassen was
dann so aussieht wie ne Explosion .

TheProgrammer

BeitragDi, Sep 14, 2004 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so.
Aber wie kann man aus einem Cube mit
12 Triangles (eine Ebene hat nur 2)
viele Splitter machen?
aktuelles Projekt: The last day of human being
 

Dreamora

BeitragDi, Sep 14, 2004 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Durch die Vertex Commands etc.
Aber könnte ziemlich aufwendig werden.

Im englischen Board ( wahrscheinlich auch dem Codearchiv dort ) war ma ein Sample für Glas zersplittern lassen.
Am einfachsten benutzt du keinen Cube sondern setzt das Fenster vorweg aus den Splittern zusammen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheProgrammer

BeitragDi, Sep 14, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sind dann aber ziemlich Detailvolle Fenster... Rolling Eyes
aktuelles Projekt: The last day of human being
 

Dreamora

BeitragDi, Sep 14, 2004 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja Alternativen:

1) ein Algo der die Glassplitter erzeugt
2) ein Cube nehmen solange net reingeschossen. Wenn reingeschossen, Cube hiden und "splitterfenster" anzeigen und zerplittern lassen Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

imagodespira

BeitragDi, Sep 14, 2004 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Man könnte einen normalen Cube, oder Fläche als Fenster nehmen und bei Kollision, Einschuss oder was auch immer... ein anderes unterteiltes Mesh (die Splitter) einblenden und die Teile in verschiedene Richtungen fallen lassen...

Ich möchte, wenn ich soweit bin, es so machen:

1. normales Fenster anzeigen (Quader)
2. Wenn getroffen, dann Fenster löschen, durch gesplittertes Fenster ersetzen -> zerstückelter Quader
3. die einzelzeile per Tokamak bewegen lassen (impuls auf die Teile)

Es müssen meiner Meinung nach auch nicht tausende sein, kleinere Bruchstücke kann man auch als Textur machen.

Sehr gut umgesetzt finde ich die Sache in "F.E.A.R". Für das Game gibt es einen coolen Trailer.

Edit:) .. hab zu lange geschrieben oder was.. Dreamora war schneller Smile

Markus2

BeitragDi, Sep 14, 2004 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du wie man ein Dreieck unterteilen kann ?
Wenn du xyz von den 3 Eckpunkten addierst und dann
durch 3 teilst haste den Mittelpunkt von dem Dreieck und
somit könntest du statt 1 Dreieck 3 Dreiecke erzeugen weil du
dann 4 Vectoren(Punkte) hast .
Das kannste dann wiederholen bis man ganz winzige Splitter
hat wobei man dann vorher ausrechnen sollte wie groß das
Dreieck ist damit es nicht unnötig unterteilt wird so das dann
evtl. nur Pixel von dem sichtbar sind .
 

Dreamora

BeitragDi, Sep 14, 2004 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
jo und das gibt schön gleichmässige 3 Ecke -> total unbrauchbar da vollkommen unrealistisch ... dann könntest du es dir ebensogut sparen Smile

wie gesagt, die beste Variante dürften 2 Meshes sein ... eines für den unzerstörten Zustand und eines mit den Scherben die man dann herumfliegen lässt ( ob mit oder ohne Tokamak ist jedem selbst überlassen )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMi, Sep 15, 2004 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora
wenn man aber große Flächen hat sieht es besser aus und diese
Teilung ist ja nur eine Möglichkeit .
Zweite wäre z.B. von Punkt A nach B , oder B nach C oder C nach A
zu unterteilen , also aus ein mach zwei Dreiecke Smile

imagodespira

BeitragMi, Sep 15, 2004 6:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Für mich ist es auf jeden Fall einfacher die Meshes in einem 3D Programm zu bauen und zu unterteilen. Da kann auch jeder die Dreiecke visuell so basteln wie er will.

In einem HalfLife2 Video werden mit einer Brechstange Bretter zerstört, die eine Tür versperren, ich glaube da sieht man schon die Unterteilung des Meshes auch vor der Zerstörung->die nehmen wahrscheinlich nicht mal ein 2. Mesh.
 

kolloffnikoff

BeitragMi, Sep 15, 2004 8:50
Antworten mit Zitat
Benutzer-Profile anzeigen
glaub ich irgendwie nicht Confused
half-life 2 wird (hoffentlich) viel zu toll um so was zu tun Very Happy

zusätzliche idee zum qube durch zerstückelte qube ersetzen....
nicht getroffene teilchen dalassen(a la SOF2)...und dann kann man das nach und nach zerlegen...ist glaub ich auch nicht alzuschwer zu machen...ich hass irgendwiedie ganzen fenster überall wo mit einem schuss alles zerspringt

cya

TheProgrammer

BeitragDo, Sep 16, 2004 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die vielen Antworten.
Ich glaub, ich mache es mit 2 Meshes,
wo das Fenster vieleicht in 5 Teile zerspringt.
aktuelles Projekt: The last day of human being
 

Moses

BeitragDo, Sep 16, 2004 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
na hoffentlich siehts dann nich bei jedem frenster gleich aus Wink

- noch ne möglichkeit wähe x-beliebig viele scherben mit zufällig varriierender grösse zu er ezeugen die zusammen den cube ergeben und dann ähnlich einem partikeleffekt auseinanderspritzen und auf den boden fallen ... wie der cube aufgesplittert wird könnte auch anhand der des aufschlagstelle (ich mein hier ne schnitfläche) der kugel/brecheisen o.ä. berechnet werden ...ob zb. nur löcher ins glas kommen wie es bei einzelnen kugeln oft in der realität der fall währe ... bzw was vom fenster noch über bleibt ... ka ob das in reltime machbar ist für viele und auch grosse fenster ... grössere scherbenteile könnten aufm boden nochmals zerspringen Wink

TheProgrammer

BeitragDo, Sep 16, 2004 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked
Das wird ja immer komplizierter...
Wie kann ich eigentlich berechnen, wie groß, wie viele
und an welcher Position die Splitter sein sollen, dass alle
zusammen eine Fläche ohne Überlappungen und Lücken ergeben?
aktuelles Projekt: The last day of human being
 

Dreamora

BeitragDo, Sep 16, 2004 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
auf die überlappungen und so kann man eigentlich "pfeiffen", da man die
1) nicht sieht
2) dieses fenster nur sekundenbruchteile lang überhaupt ganz ist Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

eleXity

ehemals "BlackProgrammer"

BeitragFr, Sep 17, 2004 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Guck dir das mal an hab ich irgentwann mal auf blitzbasic.com gefunden
vieleicht hilft es dir ja Very Happy


Code: [AUSKLAPPEN]

;Break glass example, by Jeppe Nielsen 2003

Type glass

Field e

Field s

Field w#,h#

Field sx#,sy#

Field broken

End Type

Type glasspiece

Field p

Field pivot[3]

Field x#,y#,z#

Field vx#,vy#,vz#

Field pitch#,yaw#,roll#

Field g.glass

Field index

End Type


Const gravity#=0.004

Graphics3D 800,600,16,2

pivot=CreatePivot()
camera=CreateCamera(pivot)

CameraClsColor camera,255,255,255

MoveEntity camera,0,1,-4

;cube=CreateCube()
;PositionEntity cube,0,0,0
;FlipMesh cube

light=CreateLight(1)
RotateEntity light,-10,40,0

g.glass=glassnew(2,2,20,20)
PositionEntity g\e,0,0,-1
g.glass=glassnew(2,2,20,20)
PositionEntity g\e,0,0,1
g.glass=glassnew(2,2,20,20)
PositionEntity g\e,0,0,-1
TurnEntity g\e,0,90,0
g.glass=glassnew(2,2,20,20)
PositionEntity g\e,2,0,-1
TurnEntity g\e,0,90,0

Color 0,0,0

Repeat

TurnEntity pivot,0,1,0





If MouseHit(1)>0

p=CameraPick(camera,MouseX(),MouseY())
g.glass=Last glass
While g<>Null
If g\e=p
glassbreak(g)
Exit
EndIf
g=Before g
Wend


EndIf

glassupdate()


RenderWorld()
mx=MouseX()
my=MouseY()

Text 400,20,"SHOOT the glass cube :)",1

Oval mx-30,my-30,60,60,0
Plot mx,my


Flip

Until KeyDown(1)

End



Function glassnew.glass(wid#,hei#,secx,secy,parent=0)

g.glass=New glass

g\w#=wid#
g\h#=hei#


g\e=CreateMesh(parent)

g\s=CreateSurface(g\e)

dx#=1/Float(secx)
dy#=1/Float(secy)

g\sx#=dx#
g\sy#=dy#

y#=0
For yy=1 To secy
x#=0
For xx=1 To secx

gp.glasspiece=New glasspiece
gp\g=g

gp\index=AddVertex(g\s,x#,y#,0,x#,y#,0)
AddVertex(g\s,x#+dx#,y#,0,x#+dx#,y#,0)
AddVertex(g\s,x#,y#+dy#,0,x#,y#+dy#,0)
AddVertex(g\s,x#+dx#,y#+dy#,0,x#+dx#,y#+dy#,0)

AddTriangle g\s,gp\index,gp\index+3,gp\index+1
AddTriangle g\s,gp\index,gp\index+3,gp\index+2

x#=x#+dx#
Next
y#=y#+dy#
Next

ScaleMesh g\e,wid#,hei#,1


EntityFX g\e,16
EntityPickMode g\e,2
EntityColor g\e,0,0,255
EntityAlpha g\e,0.5

Return g

End Function

Function glassbreak(g.glass)
If g\broken=1 Then Return
g\broken=1

For gp.glasspiece=Each glasspiece
If gp\g=g

gp\p=CreatePivot()

gp\x#=(VertexX(g\s,gp\index)+VertexX(g\s,gp\index+3))/2
gp\y#=(VertexY(g\s,gp\index)+VertexY(g\s,gp\index+3))/2
gp\z#=(VertexZ(g\s,gp\index)+VertexZ(g\s,gp\index+3))/2
gp\vx#=Rnd(-.02,.02)
gp\vy#=Rnd(-.02,.02)
gp\vz#=Rnd(-.02,.02)
gp\pitch#=Rnd(-2,2)
gp\yaw#=Rnd(-2,2)
gp\roll#=Rnd(-2,2)

PositionEntity gp\p,gp\x,gp\y,gp\z

For n=0 To 3
gp\pivot[n]=CreatePivot(gp\p)
PositionEntity gp\pivot[n],VertexX(g\s,gp\index+n),VertexY(g\s,gp\index+n),VertexZ(g\s,gp\index+n),1
Next

EndIf
Next

End Function

Function glassupdate()

For g.glass=Each glass
If g\broken=1

For gp.glasspiece=Each glasspiece
If gp\g=g

gp\vy=gp\vy-gravity#

gp\x=gp\x+gp\vx
gp\y=gp\y+gp\vy
gp\z=gp\z+gp\vz

PositionEntity gp\p,gp\x+gp\g\sx#/2,gp\y+gp\g\sy#/2,gp\z,1

TurnEntity gp\p,gp\pitch,gp\yaw,gp\roll

For n=0 To 3
VertexCoords gp\g\s,gp\index+n,EntityX(gp\pivot[n],1),EntityY(gp\pivot[n],1),EntityZ(gp\pivot[n],1)
Next

If gp\y<-10 Then glassdelete(g)


EndIf
Next



EndIf
Next

End Function

Function glassdelete(g.glass)

For gp.glasspiece=Each glasspiece
If gp\g=g

For n=0 To 3
FreeEntity gp\pivot[n]
Next

FreeEntity gp\p

Delete gp

EndIf
Next

FreeEntity g\e

Delete g

End Function


MFG
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#

Projekt : Worklog
 

Wanderer

BeitragMi, Dez 01, 2004 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein grottenschlechtes Beispiel -es gibt leider immer noch Coder, die sowohl auf Einrückungen, als auch auf Struktur und Kommentare verzichten. Das sollte man mit Peitschenhieben nicht unter zwanzig Stück bestrafen.

Gehe zu Seite 1, 2  Weiter

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group