partikel-Alles dreht sich!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

KddC

Betreff: partikel-Alles dreht sich!

BeitragDo, Okt 04, 2007 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin mal wieder n bisschen mit partikeln am rumspielen und kam bis jetzt auch ganz gut klar Wink .wollte jetzt aber, dass sich einzelnde partikel immer unterschiedlich schnell und in verschiedene richtung drehen. Jetzt habe ich das problem dass sich immer alle partikel gleich drehen....n aja das könnt ihr euch ja ansehen.....hier der code(ist ohne textur oder so lauffähig:
Code: [AUSKLAPPEN]
Graphics3D 1280,800,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs

Type Partikel
Field part
Field alpha#
Field xt#
Field yt#
Field zt#
Field r#
End Type


light=CreateLight()

cam=CreateCamera()
PositionEntity cam,0,0,-1

Global Karte=CreateMesh()
Surface=CreateSurface(Karte)
v0=AddVertex(Surface,0,0,0,0.9,0.5)
v1=AddVertex(Surface,0.05,0,0,0.5,0.5)
v2=AddVertex(Surface,0,-0.05,0,0.5,0.5)
v3=AddVertex(Surface,0.05,-0.05,0,0.5,0.5)
AddTriangle(Surface,v0,v1,v2)
AddTriangle(Surface,v1,v3,v2)
UpdateNormals Karte

HideEntity karte

;EntityColor karte,230,210,0
While Not KeyDown(1)

If KeyDown(57) Then addqualm()

;PositionEntity Karte,MouseX(),MouseY()*(-1),0
If KeyDown(205) Then MoveEntity karte,0.01,0,0
If KeyDown(203) Then MoveEntity karte,-0.01,0,0
If KeyDown(200) Then MoveEntity karte,0,0.01,0
If KeyDown(208) Then MoveEntity karte,0,-0.01,0

;p\alpha#=0.4

UpdateWorld



UppQualm()

RenderWorld

Rect EntityX(karte)*650+655,-EntityY(karte)*650+420,6,6,0

Flip
;Cls

Wend

End


Function addqualm()

;For i=0 To 0.1

p.partikel= New partikel
p\part=CopyEntity(karte)
p\alpha#=Rnd(0.5,0.7)
p\xt# = Rnd(-0.003,0.003)
p\yt# = Rnd(-0.002,0.002)
p\zt# = 0
p\r# = Rnd(-1,1);<------------------------drehen
;Next
End Function

Function UppQualm()

   For p.partikel = Each partikel   

      If p\alpha# > 0 Then
         p\alpha#=p\alpha#-Rnd(0.003,0.004)
         
         EntityAlpha P\part,P\alpha#
      End If
      
      RotateMesh p\part, 0,0,p\r#;<----------------------------drehen
      
      MoveEntity p\part, Sin(p\xt#)*30,p\yt#,0
      If p\alpha# = 0 Then
         FreeEntity P\part
         Delete P
      End If

   Next

End Function


könnt ihr mir helfen? Hab schon ziemlich viel ausprobiert und hab auch das gefühl dass das eig ganz simpel sein müsste...aber iwi komm ich nicht drauf

Danke und mfg
kddc.l3usch
  • Zuletzt bearbeitet von KddC am Do, Okt 04, 2007 18:50, insgesamt einmal bearbeitet

Markus2

BeitragDo, Okt 04, 2007 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
turnentity mußte benutzen , du benutzt doch CopyEntity ,
wenn du immer das original mesh drehst kein Wunder ...


und bei Sprites RotateSprite sprite,angle#


! so wie das jetzt ist könnte Alpha negativ werden,
du könntest dir die zweite Prüfung sparen weil es bei <0.1 gelöscht wird
If p\alpha# > 0 Then
p\alpha#=p\alpha#-Rnd(0.003,0.004)


Code: [AUSKLAPPEN]

For p.partikel = Each partikel   
      p\alpha#=p\alpha#-Rnd(0.003,0.004)
      If p\alpha# <= 0 Then
         FreeEntity P\part
         Delete P           
      else
         turnentity p\part, 0,0,p\r#;<----------------------------drehen
         EntityAlpha P\part,P\alpha#
         MoveEntity p\part, Sin(p\xt#)*30,p\yt#,0
      End If
Next

KddC

BeitragDo, Okt 04, 2007 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ouh....wusste doch es ist einfach...danke Very Happy .....
wieso kann alpha negativ werden wenn alpha kleiner 0.1 ist wird das ding doch gelöscht....außerdem wäre das denn schlimm?

Noch ne frage kann mann den Drehpunkt von entitys verändern? weil im moment wird das partikel immer um die ecke oben links gedreht...

mfg

Markus2

BeitragDo, Okt 04, 2007 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mir deinen Quelltext angesehen und da war Alpha<0 erstmal
unsinn , würde das Entity nicht danach gelöscht hätte es sichbar werden können .
Kann aber auch sein das die Funk. aus <0 wieder 0 macht
aber darauf sollte man sich nicht verlassen .

Wenn du die Eckpunkte richtig verteilen würdest (um die Mitte!)
dann würde es auch um die Mitte rotieren .
Setze einfach eine variable ein bei x und y, dann kannste mit + - arbeiten
bei den UV(=XY für Texture) Werten ist 0,0 links oben und 1,1 rechts unten .

Mit PositionMesh könntest du die Eckpunkte auch einmalig verschieben.

KddC

BeitragDo, Okt 04, 2007 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit den uv koordinaten hab ich verstanden....kann auch texturen auf diese meshs setzen....aber wie soll mir das bei dem drehpunkt helfen? welches x und welches y meinst du in dem Fall, also bei welchem befehl? sry der nachfrage aber i-wie
verstehe ich das nicht so richtig...... Embarassed

Mit positionmesh habe ich es bei einem einfachen Quad probiert was dann auch funktioniert hat....bei demProgramm allerdings funktioniert das nicht...

mfg und danke für deine Geduld

Ps: das mit alpha stimmte....sollte aber eig anders sein..war auch bei meinem vorherigem test so...kp wann und warum ich das geändert habe Very Happy

Markus2

BeitragDo, Okt 04, 2007 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
0,0,0 ist die Mitte von dem Mesh
darum ist x < 0 links und x >0 rechts
oder -x links und x rechts
guckst du bei AddVertex

PositionMesh bewegt(verändert) alle Eckpunkte
und EntityPosition zeigt sie einfach nur an einer Stelle ohne
das die Eckpunkte verändert werden .

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group