Sprites
Übersicht

![]() |
Kleiner satanBetreff: Sprites |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.... ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst
EIN mesh EIN surface und BELIEBIG viele vertices und triangles |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
modifyvertex?? den befehl gibts garnicht:( | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich muss für jeden vertex ne kordinate haben und dann jedes mal ein bsiche ändern? | ||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: (Nutze ihn so gut wie nie, cleare normalerweise die Surface bzgl Vertices und baue die Vertices neu auf)
Ist das schneller? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Hab leider nix gefunden im web ![]() Schickt mir einfach ne kurze PM... L8er, psy |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group