[B3D] 3D-Partikelengine

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Kabelbinder

Sieger des WM-Contest 2006

Betreff: [B3D] 3D-Partikelengine

BeitragMo, Apr 10, 2006 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Paritkelengine für BB3D.
Sie beherrscht:
x, y, z, pitch, yaw, roll, speep, startalpha, endalpha, startsize, ensize, drehwinkel, textur, lebendauer(in Durchläufen), startcolor, endcolor und drehrichtung

Beschleunigungen und undproportionale verschiebungen gehen leider nicht.
Die Farben kann man nur benutzen, wenn man keine textur angegeben hat.
Die Farbwerte muss man wie bei wirtepixel angeben, also
Zitat:
rot*$10000+grün*$100+blau*$1


Im Beispiel hat man beim Druck der linken Maustaste fliehende Rechtecke, die sich von rot langsam grün färben und immer durchsichtiger werden; und beim Druck der rechten Maustaste soetwas, wie Rauch (Mit texturierten Sprites käme der Rauch sicher besser)

Code: [AUSKLAPPEN]
AppTitle "Emitter"
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

Const flumax = 600

;1 x,2 y,3 z,4 countup,5 pivot,6 pitch,7 yaw,8 roll,9 speed,10 startalpha,11 endalpha,12 startsize,13 endsize,14 rotieren,15 textur,16 maxlife,17 startcolor,18 endcolor,19 sprite
Dim flapj#(flumax,20)

Global flum

mycam = CreateCamera()
PositionEntity mycam,0,1,-2

Function createflapj(x#,y#,z#,pit#,yaw#,rol#,spe#,sta#,ena#,sts#,ens#,dreh#,textu,stam,stc,enc,drehmar#)
flapj(flum,1)=x
flapj(flum,2)=y
flapj(flum,3)=z
flapj(flum,4)=0
flapj(flum,5)=CreatePivot()
flapj(flum,6)=pit
flapj(flum,7)=yaw
flapj(flum,8)=rol
flapj(flum,9)=spe
flapj(flum,10)=sta
flapj(flum,11)=ena
flapj(flum,12)=sts
flapj(flum,13)=ens
flapj(flum,14)=dreh
flapj(flum,15)=textu
flapj(flum,16)=stam
flapj(flum,17)=stc
flapj(flum,18)=enc
flapj(flum,20)=drehmar

flapj(flum,19)=CreateSprite(flapj(flum,5))

RotateEntity flapj(flum,5),flapj(flum,6),flapj(flum,7),flapj(flum,8)
PositionEntity flapj(flum,5),flapj(flum,1),flapj(flum,2),flapj(flum,3)

SpriteViewMode flapj(flum,19),3
If flapj(flum,15) <> 0 Then
EntityTexture flapj(flum,19),flapj(flum,15)
Else
ro=(flapj(flum,17) And $FF0000)/$10000
gr=(flapj(flum,17) And $FF00)/$100
bl=(flapj(flum,17) And $FF)/$1
EntityColor flapj(flum,19),ro,gr,bl
EndIf
ScaleSprite flapj(flum,19),flapj(flum,12),flapj(flum,12)
RotateSprite flapj(flum,19),flapj(flum,14)
EntityAlpha flapj(flum,19),flapj(flum,10)

If flum = flumax Then
flum = 0
Else
flum = flum + 1
EndIf
End Function

Function flapjlife()
For i = 0 To flumax
If flapj(i,4)<flapj(i,16) And flapj(i,19)<>0 Then

;ablaufen
flapj(i,4) = flapj(i,4) + 1
;verschieben
MoveEntity flapj(i,5),flapj(i,9),0,0
;alpha
EntityAlpha flapj(i,19),flapj(i,10)+(flapj(i,11)-flapj(i,10))*(flapj(i,4)/flapj(i,16))
;farbe
If flapj(i,15)=0 Then
ro1=(flapj(i,17) And $FF0000)/$10000
gr1=(flapj(i,17) And $FF00)/$100
bl1=(flapj(i,17) And $FF)/$1
ro2=(flapj(i,18) And $FF0000)/$10000
gr2=(flapj(i,18) And $FF00)/$100
bl2=(flapj(i,18) And $FF)/$1
EntityColor flapj(i,19),ro1+(ro2-ro1)*(flapj(i,4)/flapj(i,16)),gr1+(gr2-gr1)*(flapj(i,4)/flapj(i,16)),bl1+(bl2-bl1)*(flapj(i,4)/flapj(i,16))
EndIf
;größe
ScaleSprite flapj(i,19),flapj(i,12)+(flapj(i,13)-flapj(i,12))*(flapj(i,4)/flapj(i,16)),flapj(i,12)+(flapj(i,13)-flapj(i,12))*(flapj(i,4)/flapj(i,16))
;drehung
flapj(i,14)=flapj(i,14)+flapj(i,20)
RotateSprite flapj(i,19),flapj(i,14)

Else

FreeEntity flapj(i,19)
flapj(i,19) = 0

EndIf
Next
End Function

Repeat

If MouseDown(1) Then
If MilliSecs()-ntimer >=50 Then
ntimer = MilliSecs()
createflapj(0,0,0,0,Rnd(70,110),Rnd(0,8),0.09,1,0,0.2,0.2,Rand(0,360),0,400,255 * $10000,255 * $100,Rnd(-2.0,2.0))
EndIf
EndIf
If MouseDown(2) Then
If MilliSecs()-ntimer >=5 Then
ntimer = MilliSecs()
createflapj(-5,-4,8,0,0,Rand(30,60),0.06,1,0,0.2,1.8,Rand(0,360),0,400,20*$10000+20*$100+20*$1,200*$10000+200*$100+200*$1,0);Rnd(-2.0,2.0))
EndIf
EndIf

flapjlife()

UpdateWorld
RenderWorld

Flip

Until KeyHit(1)
End
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

JanK

BeitragDi, Apr 11, 2006 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön...auch wenn die Teile nicht ausschauen wie Rauch/Feuer Question .
Ich habe keine Zeit, mich zu beeilen.
The Pollux Conflict || The Pollux Renegades || Lipstick-live.de

Triton

BeitragDo, Apr 13, 2006 1:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Schön..
Coding: silizium-net.de | Portfolio: Triton.ch.vu
  • Zuletzt bearbeitet von Triton am Di, März 24, 2009 20:14, insgesamt einmal bearbeitet
 

ke^kx

BeitragDo, Apr 13, 2006 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gefällt mir ganz gut, die Geschwindigkeit ist mit knapp 80 Fps bei den grauen und ca. 120 bei den roten Partikeln auch ok. Allerdings scheint sie immer weiter abzunehmen, wenn man die Partikel immer weiter produziert.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

#Reaper

Newsposter

BeitragDi, Apr 18, 2006 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir geht das nicht, wenn ich es starte, kommt nichts, wenn ich eine Maustaste drücke, kommt: "Parent Entity does not exist"
Sad
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group