Fenster realistisch zersplittern lassen
Übersicht

![]() |
TheProgrammerBetreff: Fenster realistisch zersplittern lassen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sind dann aber ziemlich Detailvolle Fenster... ![]() |
||
aktuelles Projekt: The last day of human being |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
imagodespira |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo und das gibt schön gleichmässige 3 Ecke -> total unbrauchbar da vollkommen unrealistisch ... dann könntest du es dir ebensogut sparen ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() |
||
![]() |
imagodespira |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
glaub ich irgendwie nicht ![]() half-life 2 wird (hoffentlich) viel zu toll um so was zu tun ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
na hoffentlich siehts dann nich bei jedem frenster gleich aus ![]() - 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 ![]() |
||
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
auf die überlappungen und so kann man eigentlich "pfeiffen", da man die
1) nicht sieht 2) dieses fenster nur sekundenbruchteile lang überhaupt ganz ist ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
eleXityehemals "BlackProgrammer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Guck dir das mal an hab ich irgentwann mal auf blitzbasic.com gefunden vieleicht hilft es dir ja ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group