3D-Partikel System Probleme | Neues Problem !!!

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

GearTechDE

ehemals 'KillerJo96'

Betreff: 3D-Partikel System Probleme | Neues Problem !!!

BeitragMi, Jul 13, 2011 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich habe demletzt ne 2D Partikel Engine programmiert und wollt jetzt einfach mal in 3D was probiern.
Also habe ich im Type noch nen Z koordinate hinzugefügt. Das ist aber garnich mein Problem.
Eigentlich wollt ich nur wissen, was ich als Partikel nehmen soll.. Cubes? Spheres?

Am liebsten würde ich gerne Oval oder Rect nehmen wenn das geht.? Geht das irgendwie.? Wens Cubes oder so sein sollen, werden die eh total klein sein müssen, weil ich nämlich feuer partikel für ne Facken machen möchte. Also eigentlich hab ich mir vorgestellt, dass ich Oval nehme und die dann einfach da rum fliegen lasse xD

Geht das nich mit Oval oder Rect? WOmit soll ichs denn dann machen? Denn ich denke mal Spheres und Cubes sind ziemlich Leistungsaufwendig oder?

Naja danke im Voraus.

Lg Killerjo96
Mit freundlichen Grüßen: GearTechDE
  • Zuletzt bearbeitet von GearTechDE am Fr, Jul 22, 2011 14:50, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, Jul 13, 2011 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
3D kann per Definition nicht mit 2D Befehlen erreicht werden - jedenfalls falls du die Rotation/Tiefe nicht von Hand berechnen willst, was das benutzten von B3D etwas ad absurdum führt...
Für Partikel würde ich Quads (2 Dreiecke, 1 Fläche) in einem einzigen Surface (Single Surface) erstellen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ToeB

BeitragMi, Jul 13, 2011 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
-> Singlesurface

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

PSY

BeitragMi, Jul 13, 2011 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

das funzt grundsätzlich so dass du dir eine (einzige) surface erstellst, die du mit quads (2 verbundene dreieecke zu einem quadrat) füllst. die quads werden dann texturiert und stellen somit die partikel dar. ist also eigentlich 2D in 3D.

das hat den vorteil, dass du zum einen die partikel sehr einfach verwalten kannst, und zum anderen das ganze extrem schnell ist. alle anderen ansätze kannst du aus performancetechnischen gründen kicken.

wenns nur für 1 spiel sein soll, dann schreib dir was passendes, was genau auf das spiel abgestimmt ist. das geht relativ schnell. wenn du ein richtiges partikelsystem für all deine spiele coden willst, dauert das schon ein wenig und bedarf einiger überlegung Very Happy

ich hab selbst mal eins für meine projekte geschrieben. hier ist der link zum worklog, da kannste dir mal ne vorstellung holen wie das aussehen sollte..

https://www.blitzforum.de/worklogs/195/

hier mal der link zum demo des systems, da siehste was die leisten können:


https://www.blitzforum.de/showcase/348/


l8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

GearTechDE

ehemals 'KillerJo96'

BeitragMi, Jul 13, 2011 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
SingleSurface mache ich mit AddVertex un so oder?
Mit freundlichen Grüßen: GearTechDE

skey-z

BeitragMi, Jul 13, 2011 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
createmesh, createsurface, addvertex, addtriangle

oder über die Draw3D
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

GearTechDE

ehemals 'KillerJo96'

BeitragMi, Jul 13, 2011 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Njoaa, ok danke, den Rest find ich denke ich mal im Forum....

Danke Wink
Mit freundlichen Grüßen: GearTechDE

PhillipB

BeitragMi, Jul 13, 2011 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dazu aber noch ein Transparentes PNG nehmen dann einfach nen Fleck drin fertig Very Happy
STRINGS - Einige tragen sie|wir programmieren sie! Very Happy

GearTechDE

ehemals 'KillerJo96'

BeitragDo, Jul 14, 2011 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. Danke Wink


Edit: Habe jetzt mal eine 3D Partikel Engine programmiert. Läuft eig. für mich schon janz ok... aber i-wie, will der die Partikel nach einer Zeit nicht mehr löschen... Warum nicht? bei 2D ging das schon aber bei 3d diesmal nicht Sad

BlitzBasic: [AUSKLAPPEN]

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

MainCam = CreateCamera()
PositionEntity MainCam,0,0,-5


Type Partikel

Field px#
Field py#
Field pz#
Field pspeed#
Field plive#

End Type

Repeat
Cls

If MouseDown(1) Then
CreatePartikel()
End If

ManagePartikel()

RenderWorld()
UpdateWorld()
Flip
Until KeyHit(1)


Function CreatePartikel()

info.Partikel = New Partikel
info\px# = Rnd(-1,1)
info\py# = Rnd(-1,1)
info\pz# = Rnd(-1,1)
info\pspeed# = 1
info\plive# = 100

End Function

Function ManagePartikel()

For info.Partikel = Each Partikel

brush = CreateBrush(Rand(0,255),Rand(0,255),Rand(0,255))
mesh = CreateMesh()
surface = CreateSurface(mesh, brush)
v0 = AddVertex(surface, 0, 0, 0)
v1 = AddVertex(surface, 0.1, -0.1, 0)
v2 = AddVertex(surface, -0.1, -0.1, 0)
AddTriangle(surface, v0, v1, v2)
UpdateNormals mesh
PositionEntity mesh,info\px#,info\py#,info\pz#

info\plive# = info\plive# - 1

If info\plive# = 0 Then

Delete info.partikel

End If

Next

End Function
Mit freundlichen Grüßen: GearTechDE

MisterMaboo

BeitragFr, Jul 22, 2011 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
guck dir das mal an: FreeEntity

das ist jetzt zwar nicht single-surface, aber es löst dein problem fürs erste:

Code: [AUSKLAPPEN]


Type Partikel
   
   Field px#
   Field py#
   Field pz#
   Field pspeed#
   Field plive#
   Field mesh
   Field surf
   
End Type

Function ManagePartikel()
   
   For info.Partikel = Each Partikel
   
      FreeEntity info\mesh
      brush = CreateBrush(Rand(0,255),Rand(0,255),Rand(0,255))
      info\mesh = CreateMesh()
      info\surf = CreateSurface(info\mesh, brush)
      v0 = AddVertex(info\surf, 0, 0, 0)
      v1 = AddVertex(info\surf, 0.1, -0.1, 0)
      v2 = AddVertex(info\surf, -0.1, -0.1, 0)
      AddTriangle(info\surf, v0, v1, v2)
      UpdateNormals info\mesh
      PositionEntity info\mesh,info\px#,info\py#,info\pz#
      
      info\plive# = info\plive# - 1
      
      If info\plive# = 0 Then
         
         FreeEntity info\mesh
         Delete info.partikel
         
      End If

   Next
   
   
End Function
Man is the information he carries

ToeB

BeitragFr, Jul 22, 2011 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein tut es nicht. Es bereitet ihm sogar welche. Warum erstellst du für jeden Partikel jeden Schleifendurchgang ein Brush, ein Mesh, ein Surface und füllst es mit Vertexdaten nur um es nach dem Rendern wieder zu Löschen und neu zu erstellen ?

Über Sprite Partikel-Engines lässts sich Streiten, aber das wird viel zu langsam, und das schon bei wenigen 100 partikeln.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

MisterMaboo

BeitragFr, Jul 22, 2011 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du dir seinen code angesehen?

er hat dassselbe gemacht, nur ohne die partikel zu löschen und damit den zugriff auf seine partikel verloren. es löst sein problem, nämlich dass die partikel nicht gelöscht werden. dass das was ich gepostet habe eine nutzbare particle engine ist, habe ich nicht behauptet. ich bin auf seinen code eingegangen und habe seinem problem eine lösung geliefert. vielleicht hätte ich mir auch mehr gedanken machen sollen, wie daraus brauchbarer code für eine particle engine wird, aber das überlasse ich lieber den experten.
Man is the information he carries

GearTechDE

ehemals 'KillerJo96'

BeitragFr, Jul 22, 2011 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Fail xD... also Moment. Ich habe jetzt so verstanden, dass der Code fürn Ar*** ist??
Denke mal war nett gemeint aber ist der Code wirklich so schlecht??

Könnte mir dann ma jemand einen Beispiel Code posten, wie ich sowas machen soll?

So wie ich das mit 3D jetzt gemacht habe, habe ich es auch in 2D gemacht und funktionierte super.

Wo ist das Problem?
Mit freundlichen Grüßen: GearTechDE

Xeres

Moderator

BeitragFr, Jul 22, 2011 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, das 2D nichts mit 3D zu tun hat.
3D Objekte bleiben im Speicher genauso wie Bilder im Speicher bleiben. Bilder muss man aktiv zeichnen, 3D Objekte werden da gerendert wo sie sind.
Fang vielleicht mit Sprites an statt gleich die Geometrie selbst zu erstellen. Wenn du das Verwalten von Sprite Partikeln ohne Memoryleaks hin bekommen hast, kannst du den nächsten Schritt machen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

MisterMaboo

BeitragFr, Jul 22, 2011 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid. ich war ein bisschen beleidigt, weil toeb erkannt hat, dass ich dir auch nicht wirklich etwas besseres geliefert habe. "fürn arsch" ist hier gar nichts.

wenn du in jedem schleifendurchlauf ein neues mesh erstellst, verlierst du nicht nur den zugriff darauf (anders als bei 2d verschwindet dein mesh nicht per Code: [AUSKLAPPEN]
mesh=0
oder Code: [AUSKLAPPEN]
delete info.partikel
du brauchst freeentity), es zieht außerdem die performance in den keller.
Man is the information he carries

ToeB

BeitragSa, Jul 23, 2011 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast also zwei Möglichkeiten :

1. Sprite-Partikel-Engine :
CreateSprite/LoadSprite
PositionEntity/MoveEntity
Weniger Partikel möglich, einfach gestaltet

2. Single-Surface-Partikel-Engine :
CreateMesh / CreateSurface
AddVertex / AddTriangle
EntityParent / TFormPoint
Sehr viele Partikel möglich, etwas komplizierter.

Ich würde dir für den Einstieg zur ersten Methode raten, und wenn du dann begriffen hast, wie in etwa das 3D Arbeitet, kannst du dich an die zweite wagen. Wobei dazu gesagt sein sollte : Entitys, dazu zählen sowohl Meshes als auch bspw. Cameras oder Lichter (Eng.: Objekt), werden, wenn sie einmal erstellt oder geladen worden sind, solange gezeichnet bis sie entweder versteckt oder gelöscht werden. Anders als in 2D, wo ein Bild mehrfach gezeichnet werden kann, wird ein Objekt immer nur einmal gezeichnet. Um mehrere Objekte zu zeichnen muss man das Objekt so oft Dublizieren.

Ich hoffe ich konnte dir ein wenig helfen Wink


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

GearTechDE

ehemals 'KillerJo96'

BeitragSa, Jul 23, 2011 9:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe das doch jetzt eigentlich (finde ich) für mich schon mal sehr elegant gelöst. Ok das ich da die Brush texture und so zig mal zeichne war ein Fehler. Ich habe auf jeden Fall kapiert was ihr meint... xD

Also ich versuch mein Glück einfach nochma selber mit nem Single Surface...
Mit freundlichen Grüßen: GearTechDE

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group