Sprites

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Kleiner satan

Betreff: Sprites

BeitragSo, Sep 17, 2006 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
kennt jmd. ein gutes Tutorial oder kann mir jmd. kurz sagen wie ich in B3D eine exlosion realisieren kann??
also das ich das mit sprites oder so machen muss weiß ich, aber wie?

Bastian

Blitzcoder

Newsposter

BeitragSo, Sep 17, 2006 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprites sind sehr langsam. Du musst dir eine Single-Surface Engine schreiben. das klingt zwar kompliziert, wenn man etwas Erfahrung hat gehts aber doch recht einfach. im einfachsten fall erstellst du mit createmesh createsurface addvertex usw. und fügst sie mit addmesh zusammen.
Wenn du es dir noch leichter und sehr schnell machen willst, dann kauf dir den Particle candy von x-pressive.com.

MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

Dreamora

BeitragSo, Sep 17, 2006 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Erm wenn du mit CreateSurface etc arbeitest, brauchst du kein AddMesh, da das garnix bringt, da du sowieso jedes Frame die Surface leerst (bzw. bei jedem Update der Partikelemitter)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kleiner satan

BeitragDi, Okt 03, 2006 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich 100 stück nehme (einfach den code aus der OH und for bis 100 und jeder variasble nem dimm zuweisen und jedes an ne zufalls position setzten) ist das aber total langsam.... Crying or Very sad
 

Dreamora

BeitragDi, Okt 03, 2006 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sollst ja auch nicht 100 Stück nehmen sondern 1 Surface.

Es heisst ja Single Surface, net Hundred Surface
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Christoph

BeitragDi, Okt 03, 2006 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil's hier grad um Single Surface geht:

Wie kann ich wieder Punkte, die ich mit addvertex hinzugefügt habe, und die daran hängenden Triangles löschen?
 

Dreamora

BeitragDi, Okt 03, 2006 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ClearSurface und nur die verbliebenen Triangles und Vertices wieder der Surface hinzufügen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kleiner satan

BeitragDi, Okt 03, 2006 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
naja gut es heißt so...aber wie soll ich den bei ner explosion z.B. das machen?
da fliegt ja auch nicht nur 1 feuerpartikel rum sonder gaaaanz viele....wie muss ich das machen?


Bastian

Christoph

BeitragDi, Okt 03, 2006 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Du machst

EIN mesh
EIN surface
und
BELIEBIG viele vertices und triangles

BladeRunner

Moderator

BeitragDi, Okt 03, 2006 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du normalerweise Sprites nutzt, musst Du Dir das vorstellen als ob ein Zeichner deine Grafik auf ein Transparentpapier malt. Jedes mal wenn ein weiteres Sprite dargestellt werden soll nimmt er ein neutes Transparentpapier und malt darauf. Mit der Zeit wird das ein echt dicker Stapel, und um den vom Zeichenplatz zum Vorführraum zu bringen braucht der Zeichner ne Menge Zeit.

Wenn Du nun ne singlesurface Methode nutzt, werden alle darzustellenden Sprites auf ein Transparentes Papier gemacht. Das zu Transportieren geht sehr flott.
Codetechnisch sieht das so aus, dass du ein Mesh erstellst (createmesh), diesem ein surface zuweist (createsurface) und dann die einzelnen darzustellenden flächen erstellst (addvertex, addtriangle). Dann werden sie noch mit der darzustellenden Textur bezogen - siehe dazu die Onlinehilfe.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragDi, Okt 03, 2006 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich frag mich warum Leute die Partikel wollen eigentlich partout die Suche nicht bemühen wollen:

http://www.blitzbasic.com/tool...hp?tool=74 bzw.
http://www.blitzbasic.com/tool...p?tool=113

Es gibt keinen sinnvollen Grund das Rad zig mal neu zu erfinden, vor allem wenn es Partikelsysteme gibt zu denen es auch Editoren gibt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kleiner satan

BeitragDi, Okt 03, 2006 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
guk dir mal die beiden downloads an^^


EDIT: ok hab das jetzt verstanden...aber wie bewege ich so ein dreieck? (ich glaub es heißt triangle)

n entity is es ja nicht


Bastian
 

Dreamora

BeitragDi, Okt 03, 2006 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Garnicht
du musst die Vertices bewegen, die dieses Dreieck bilden.

Du musst also die ganze Bewegung manuell programmieren via AddVertex / AddTriangle, ModifyVertex, ClearSurface
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kleiner satan

BeitragDi, Okt 03, 2006 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
modifyvertex?? den befehl gibts garnicht:(
 

Dreamora

BeitragDi, Okt 03, 2006 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, mein Fehler. Meinte VERTEXCOORDS

(Nutze ihn so gut wie nie, cleare normalerweise die Surface bzgl Vertices und baue die Vertices neu auf)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kleiner satan

BeitragDi, Okt 03, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich muss für jeden vertex ne kordinate haben und dann jedes mal ein bsiche ändern?

Christoph

BeitragDi, Okt 03, 2006 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
(Nutze ihn so gut wie nie, cleare normalerweise die Surface bzgl Vertices und baue die Vertices neu auf)

Ist das schneller?
 

Dreamora

BeitragDi, Okt 03, 2006 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, wenn du über alle "Sprites" / Particle loopst, dann kommts nicht draufan. ob du die Koordinate nun änderst oder nicht ist nicht ganz so tragisch. Neu zur grafikkarte geschickt wird die gesamte Surface sowieso, egal ob du nun clearsurface oder nur ein einzelnes mal vertexcoords machst. Und das ist ja im Endeffekt der Flaschenhals bei SingleSurface, dass man bei schwachen Karten die Leitung verstopft.

Wenn du allerdings gezielt nur einige wenige Objekte änderst von einer grossen Menge, könnte ich mir vorstellen, dass du mit Vertexcoords besser weg kommst. (der Fall könnte zb bei einem Billboard System für Bäume und so eintreten so man nicht immer alles neu berechnen muss. Bei einem Partikelsystem muss man ja +- jedes Frame alle partikel neu positionieren und ausrichten)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

PSY

BeitragDi, Okt 03, 2006 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

hat jemand vielleicht noch die Lotus-Particlesysteme und kann sie mir mailen?
Noel sagt ja, dass man sehen soll wo mans downloaden kann...also hat er wohl nichts dagegen Smile
Hab leider nix gefunden im web Crying or Very sad

Schickt mir einfach ne kurze PM...


L8er,
psy
 

Matthias

BeitragDi, Okt 03, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du schonmal dir die Blitz3D beispiele im Samples Ordner angesehen
da gibt es ein Beispiel da wird eine Kugel in die Luft gejaght das kannst
du als beispiel nehmen und mit VertexColor kannst du dann die einzelnen
Patikel andersfarbig machen. Das Beispiel:

Code: [AUSKLAPPEN]

Graphics3D 640,480
SetBuffer BackBuffer()

piv=CreatePivot()

cam=CreateCamera(piv)
PositionEntity cam,0,0,-5

mesh=CreateSphere(10)
tex=LoadTexture("tex0.bmp")
ScaleTexture tex,.5,.5
EntityTexture mesh,tex

While Not KeyDown(1)
   If KeyHit(57) Then Create_Explosion(mesh,tex)   ;Space Bar to produce explosion
   If KeyDown(203) TurnEntity piv,0,-1,0         ;Arrow keys to
   If KeyDown(205) TurnEntity piv,0,+1,0         ;swing camera
   If KeyDown(200) TurnEntity piv,1,0,0         ;round the object
   If KeyDown(208) TurnEntity piv,-1,0,0         ;

   Update_Particles()
   UpdateWorld
   RenderWorld
   Text 0,0,"Hit <space> to blow up the sphere!"
   Flip
Wend

;
;Freeup memory used in demo
Free_Particles()
FreeEntity mesh         
FreeEntity cam
EndGraphics
End

Type particle
   Field ent
   Field surf
   Field dx#
   Field dy#
   Field dz#
   Field cnt
End Type

Function Update_Particles()
   ;Each particle is a triangle
   ;as there cnt is reduced and become less than
   ;100 the particles alpha is reduced
   ;to slowerly fade to nothing.
   For a.particle=Each particle
      TranslateEntity a\ent,a\dx,a\dy,a\dz
      TurnEntity a\ent,4*a\dx,4*a\dy,2
      a\cnt=a\cnt-1
      If a\cnt<100 Then
         EntityAlpha a\ent,Float(a\cnt)/100.0
      End If
      If a\cnt<1 Then
         FreeEntity a\ent
         Delete a
      End If
   Next
End Function

Function Free_Particles()
   For a.particle=Each particle
      If a\ent Then FreeEntity a\ent
      Delete a
   Next
End Function

Function Create_Explosion(mesh,texture)
   surf=GetSurface(mesh,CountSurfaces(mesh))   ;Get the surface from mesh
   nt=CountTriangles(surf)                  ;How many triangles are in there.
   
   For cnt=0 To nt-1 Step 2
      a.particle=New particle
      a\ent=CreateMesh()
      a\surf=CreateSurface(a\ent)
      ind1=TriangleVertex(surf,cnt,0);get the verices 0
      ind2=TriangleVertex(surf,cnt,1); ~   ~   --~--  1
      ind3=TriangleVertex(surf,cnt,2); ~   ~   --~--  2
      x#=VertexX(surf,ind1)   ;retrieve vertex index 0 for this triangle
      y#=VertexY(surf,ind1)   ;going tro use this for particle velocity
      z#=VertexZ(surf,ind1)
      a\dx=x*(Rnd(.015,.035))   ;reduce velocity by a random number in x
      a\dy=y*(Rnd(.015,.035))   ;reduce velocity by a random number in y
      a\dz=z*(Rnd(.015,.035))   ;reduce velocity by a random number in z
      ;Now recreate this tri as an entity
      AddVertex(a\surf,VertexX(surf,ind1)-x,VertexY(surf,ind1)-y,VertexZ(surf,ind1)-z,VertexU(surf,ind1),VertexV(surf,ind1))
      VertexColor a\surf,0,VertexRed(surf,ind1),VertexGreen(surf,ind1),VertexBlue(surf,ind1)
      AddVertex(a\surf,VertexX(surf,ind2)-x,VertexY(surf,ind2)-y,VertexZ(surf,ind2)-z,VertexU(surf,ind2),VertexV(surf,ind2))
      VertexColor a\surf,0,VertexRed(surf,ind2),VertexGreen(surf,ind2),VertexBlue(surf,ind2)
      AddVertex(a\surf,VertexX(surf,ind3)-x,VertexY(surf,ind3)-y,VertexZ(surf,ind3)-z,VertexU(surf,ind3),VertexV(surf,ind3))
      VertexColor a\surf,0,VertexRed(surf,ind3),VertexGreen(surf,ind3),VertexBlue(surf,ind3)

      ;Now add the triangle to the entity
      ;double sided      
      AddTriangle(a\surf,0,1,2)
      AddTriangle(a\surf,0,2,1)
      
      PositionEntity a\ent,x,y,z
      a\cnt=Rnd(150,200)
      EntityTexture a\ent,texture
   Next
End Function

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group