MiniPartikelEngine
Übersicht

MatthiasBetreff: MiniPartikelEngine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. Da mir im Moment etwas langweilig war habe ich mir überlegt mal eine MiniPatikelEngine zu schreiben . Vieleicht kann jemand sie gebrauchen oder erweitert sie sogar.
Wichtig war mir dabei das sie leicht einzusetzen ist, und möglichst schnell. Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 Global PatikelPivot Global PatikelTextur=LoadTexture("PTextur.png",2) ;-------Umgebung erstellen----------- Fontane1=CreateCube() Fontane2=CreateCube() Fontane3=CreateCube() PositionEntity Fontane2,10,10,10 PositionEntity Fontane3,-10,10,10 Camera=CreateCamera() PositionEntity Camera,0,3,-5 CameraClsColor Camera,0,0,200 Plane=CreatePlane():EntityColor Plane,0,200,0 Light=CreateLight():TurnEntity Light,45,45,0 ;------------Patikeltypen----- PTyp1=CreatePatikleTyp() PTyp2=CreatePatikleTyp() PTyp3=CreatePatikleTyp() PTyp4=CreatePatikleTyp() PatikelTexturID(PTyp1,0,128) PatikelTexturID(PTyp2,1,128) PatikelTexturID(PTyp3,2,128) PatikelTexturID(PTyp4,3,128) SetPatikelSize(PTyp1,.3) SetPatikelSize(PTyp2,.1) SetPatikelSize(PTyp3,.1) SetPatikelSize(PTyp4,.1) SetPVector(PTyp1,-.02,.02,-.05,-.1,-.02,.02) SetPVector(PTyp2,-.04,.04,-.05,-.1,-.04,.04) SetPVector(PTyp3,-.1,-.04,-.01,.01,-.01,.01) SetPVector(PTyp4,.04,.1,-.01,.01,-.01,.01) Timer=CreateTimer(60) SetBuffer BackBuffer() ;-----------Mainloop---------------- Repeat:MS=MilliSecs() FPSz=FPSz+1:If MS>FPSt Then FPSt=MS+999:FPS=FPSz:FPSz=0 End If ;50=Menge ;500=Lebenszeit in ms AddPatikel(Fontane1,PTyp1,50,500) AddPatikel(Fontane1,PTyp2,10,1500) AddPatikel(Fontane1,PTyp3,10,1500) AddPatikel(Fontane1,PTyp4,10,1500) AddPatikel(Fontane2,PTyp2,100,600) AddPatikel(Fontane2,PTyp3,5,3000) AddPatikel(Fontane3,PTyp2,100,600) AddPatikel(Fontane3,PTyp4,5,3000) UpdatePatikle() TranslateEntity Fontane1,0,.01,.01 TranslateEntity Fontane2,-.01,-.01,0 TranslateEntity Fontane3,.01,-.01,0 RenderWorld Pat=(TrisRendered()/2) Text 10,10,"Patikel:"+Pat+" FPS:"+FPS Flip 0:;WaitTimer(Timer) Until KeyDown(1)=1 End Function AddPatikel(Mesh,TBank,PMax,LTime) Local X#,Y#,Z#,MX#,MY#,MZ#,EX#,EY#,EZ# Local MinX#,MinY#,MinZ#,MaxX#,MaxY#,MaxZ# Local Ua#,Ub#,Va#,Vb#,S#,FPat=-4 MS=MilliSecs()+LTime:PMax=PMax-1 Child=FindChild(PatikelPivot,Mesh) If Child=0 Then ;Neues Surface erstellen Child=CreateMesh(PatikelPivot) EntityTexture Child,PatikelTextur,0,0 Surf=CreateSurface(Child):EntityFX Child,17 NameEntity Child,Mesh End If Surf=GetSurface(Child,1):MaxV=CountVertices(Surf)-4 EX=EntityX(Mesh,1):EY=EntityY(Mesh,1) EZ=EntityZ(Mesh,1):S=PeekFloat(TBank,40) Ua=PeekFloat(TBank,0):Ub=PeekFloat(TBank,4) Va=PeekFloat(TBank,8):Vb=PeekFloat(TBank,12) MinX=PeekFloat(TBank,16):MaxX=PeekFloat(TBank,20) MinY=PeekFloat(TBank,24):MaxY=PeekFloat(TBank,28) MinZ=PeekFloat(TBank,32):MaxZ=PeekFloat(TBank,36) For I=0 To PMax MX=Rnd(MinX,MaxX):X=MX+EX MY=Rnd(MinY,MaxY):Y=MY+EY MZ=Rnd(MinZ,MaxZ):Z=MZ+EZ ;Frein Patikel suchen If FPat<MaxV Then Repeat:FPat=FPat+4 If VertexY(Surf,FPat)<-9998 Exit Until FPat=>MaxV End If If FPat=>MaxV Then ;Neuen Patikel erstellen If MaxV+I>32767 Then Return V0=AddVertex(Surf,-S+X,-S+Y,Z,Ua,Va) V1=AddVertex(Surf, S+X,-S+Y,Z,Ub,Va) V2=AddVertex(Surf, S+X, S+Y,Z,Ub,Vb) V3=AddVertex(Surf,-S+X, S+Y,Z,Ua,Vb) AddTriangle Surf,V0,V1,V2 AddTriangle Surf,V0,V2,V3 VertexNormal Surf,V0,MX,MY,MZ VertexNormal Surf,V1,MS,0,0 Else ;gefundenen freien Patikel ändern VertexCoords(Surf,FPat, -S+X,-S+Y,Z) VertexCoords(Surf,FPat+1, S+X,-S+Y,Z) VertexCoords(Surf,FPat+2, S+X, S+Y,Z) VertexCoords(Surf,FPat+3,-S+X, S+Y,Z) VertexTexCoords Surf,FPat,Ua,Va VertexTexCoords Surf,FPat+1,Ub,Va VertexTexCoords Surf,FPat+2,Ub,Vb VertexTexCoords Surf,FPat+3,Ua,Vb VertexNormal Surf,FPat,MX,MY,MZ VertexNormal Surf,FPat+1,MS,0,0 End If Next End Function Function UpdatePatikle() Local X#,Y#,Z#,NX#,NY#,NZ# MaxChild=CountChildren(PatikelPivot) ;AppTitle MaxChild MS=MilliSecs():If MaxChild=0 Then Return For ChildZ=1 To MaxChild Child=GetChild(PatikelPivot,ChildZ) Surf=GetSurface(Child,1) MaxV=CountVertices(Surf)-4:KPat=MaxV For V0=0 To MaxV Step 4 V1=V0+1:V2=V0+2:V3=V0+3 If MS<VertexNX(Surf,V1) Then NX=VertexNX(Surf,V0) NY=VertexNY(Surf,V0):NZ=VertexNZ(Surf,V0) X=VertexX(Surf,V0)+NX:Y=VertexY(Surf,V0)+NY VertexCoords Surf,V0,X,Y,VertexZ(Surf,V0)+NZ X=VertexX(Surf,V1)+NX:Y=VertexY(Surf,V1)+NY VertexCoords Surf,V1,X,Y,VertexZ(Surf,V1)+NZ X=VertexX(Surf,V2)+NX:Y=VertexY(Surf,V2)+NY VertexCoords Surf,V2,X,Y,VertexZ(Surf,V2)+NZ X=VertexX(Surf,V3)+NX:Y=VertexY(Surf,V3)+NY VertexCoords Surf,V3,X,Y,VertexZ(Surf,V3)+NZ Else:KPat=KPat-4 VertexCoords Surf,V0,0,-9999,0 VertexCoords Surf,V1,0,-9999,0 VertexCoords Surf,V2,0,-9999,0 VertexCoords Surf,V3,0,-9999,0 If KPat<4 FreeEntity Child:Return End If Next Next End Function Function SetPatikelSize(TBank,PSize#) PokeFloat(TBank,40,PSize) End Function Function PatikelTexturID(TBank,ID,TSize) TW=TextureWidth(PatikelTextur)/TSize Um#=1/Float(TW):V#=Floor(ID/TW)*Um U#=(ID-(Floor(ID/TW)*TW))*Um PokeFloat(TBank,0,U):PokeFloat(TBank,4,U+Um) PokeFloat(TBank,8,V):PokeFloat(TBank,12,V+Um) End Function Function CreatePatikleTyp() If PatikelPivot=0 Then PatikelPivot=CreatePivot() End If Bank=CreateBank(100):Return Bank End Function Function SetPVector(Bank,A#,B#,C#,D#,E#,F#) PokeFloat(Bank,16,A):PokeFloat(Bank,20,B) PokeFloat(Bank,24,C):PokeFloat(Bank,28,D) PokeFloat(Bank,32,E):PokeFloat(Bank,36,F) End Function (22000Patikel bei 75FPS 2x3GHz. 8500GT) |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Partikel, danke schön. Sonst ganz nett. | ||
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 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also sieht echt geil aus ![]() Aber ich glaub den Rauch und das Feuer kenn ich irgentwo her ![]() 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! |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ToeB. Ja die Texturen sind aus deinem Racketen Demo.
Vieleicht hilft dir das Beispiel etwas. Mfg Matthias. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso sollte mir das Beispiel helfen ![]() ![]() 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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group