3D Schneeflocken

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Sparx

Betreff: 3D Schneeflocken

BeitragDo, Dez 25, 2003 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab fuer ein eigenes Project 3D Schneeflocken entwickelt. Ich weisz, dass das aussehen der Schneeflocken noch deutlich verbessert werden muss und wenn einer von euch eine schneeflocke designed hat, bitte hier posten. Jetzt zum Code:
Das ganze hinter der initialisierung vom 3D Graphics mode
BlitzBasic: [AUSKLAPPEN]

Global snowtex = CreateSnowTex()

Type Flokke
Field x#
Field y#
Field z#
Field ys#
Field sprite
Field active%
End Type

;
;
;
;
;
;
;
;
;
;


Function CreateSnowtex()
snowtex=CreateTexture(16,16)
gbuff = GraphicsBuffer()

SetBuffer TextureBuffer(snowtex)
Color 255,255,255
Oval 0,0,16,16
SetBuffer gbuff
Return snowtex
End Function

Function CreateSnow(amount%)
For i = 0 To amount%-1
snow.flokke = New flokke
snow\sprite = CreateSprite()
EntityTexture snow\sprite,snowtex
EntityFX snow\sprite,1+8
EntityBlend snow\sprite,3

ScaleSprite snow\sprite,.2,.2

SpriteViewMode snow\sprite,4

snow\active = 0
Next


End Function

Function UpdateSnow(cam)

For snow.flokke = Each flokke
If Not snow\active

snow\x = EntityX(cam)+Rnd(-150,150)
snow\y = EntityY(cam)+80
snow\z = EntityZ(cam)+Rnd(-150,150)
snow\ys = (Rnd(2,5)+Rnd(2,5))/40
snow\active = 1
End If
snow\y = snow\y - snow\ys*60/fps
PositionEntity snow\sprite,snow\x,snow\y,snow\z
SpriteViewMode snow\sprite, 3
If snow\y < -5 Then snow\active = 0

Next
End Function


Einfach vorher kurz CreateSnow(x) wobei x die anzahl der Flocken ist. Und dann noch einfach vor jedem RenderWorld ein UpdateSnow, Fertig!

[EDIT]
Hier noch ein kleiner Screenshot:
user posted image
[/EDIT]
User posted image
 

Heiko

BeitragDi, Okt 14, 2008 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab grad versucht, das in eine andere sprache zu konvertieren, aber irgendwie hängt es damit : GLOBAL snowtex = CreateSnowtex()

weil ja snowtex auch in dieser Funktion drin vorkommt.

irgendeine idee, wie man das umgehen kann?

ToeB

BeitragSa, Okt 18, 2008 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Funzt iwie net :

Code: [AUSKLAPPEN]
Graphics3D 800,600,16,1
SetBuffer BackBuffer()

Global snowtex = CreateSnowTex()

Type Flokke
Field x#
Field y#
Field z#
Field ys#
Field sprite
Field active%
End Type

;
;
;
;
;
;
;
;
;
;


Global CAM = CreateCamera()
CameraRange Cam,0.1,1000

CreateSnow(10000)
Repeat   
   UpdateSnow(CAM)
   RenderWorld()
   Flip
Until KeyHit(1)
End
   


Function CreateSnowtex()
snowtex=CreateTexture(16,16)
gbuff = GraphicsBuffer()

SetBuffer TextureBuffer(snowtex)
Color 255,255,255
Oval 0,0,16,16
SetBuffer gbuff
Return snowtex
End Function

Function CreateSnow(amount%)
For i = 0 To amount%-1
snow.flokke = New flokke
snow\sprite = CreateSprite()
EntityTexture snow\sprite,snowtex
EntityFX      snow\sprite,1+8
EntityBlend     snow\sprite,3

ScaleSprite   snow\sprite,.2,.2
       
SpriteViewMode snow\sprite,4

snow\active = 0
Next


End Function

Function UpdateSnow(cam)

For snow.flokke = Each flokke
If Not snow\active

snow\x = EntityX(cam)+Rnd(-150,150)
snow\y = EntityY(cam)+80
snow\z = EntityZ(cam)+Rnd(-150,150)
snow\ys = (Rnd(2,5)+Rnd(2,5))/40
snow\active = 1
End If
snow\y = snow\y - snow\ys*60/fps
PositionEntity snow\sprite,snow\x,snow\y,snow\z
SpriteViewMode snow\sprite, 3
If snow\y < -5 Then snow\active = 0

Next


So jetzt funzt es :
Code: [AUSKLAPPEN]
Graphics3D 800,600,16,1
SetBuffer BackBuffer()

Global snowtex = CreateSnowTex()
Global fps

Type Flokke
Field x#
Field y#
Field z#
Field ys#
Field sprite
Field active%
End Type

;
;
;
;
;
;
;
;
;
;


Global CAM = CreateCamera()
CameraRange Cam,0.1,1000

CreateSnow(10000)
Repeat   
   FPS1 = FPS1 + 1
   If FPS2 <= MilliSecs() -999 Then FPS3 = FPS1 : FPS1 = 0 : FPS2 = MilliSecs()
   FPS = FPS3
   UpdateSnow(CAM)
   RenderWorld()
   Flip
Until KeyHit(1)
End
   


Function CreateSnowtex()
snowtex=CreateTexture(16,16)
gbuff = GraphicsBuffer()

SetBuffer TextureBuffer(snowtex)
Color 255,255,255
Oval 0,0,16,16
SetBuffer gbuff
Return snowtex
End Function

Function CreateSnow(amount%)
For i = 0 To amount%-1
snow.flokke = New flokke
snow\sprite = CreateSprite()
EntityTexture snow\sprite,snowtex
EntityFX      snow\sprite,1+8
EntityBlend     snow\sprite,3

ScaleSprite   snow\sprite,.2,.2
       
SpriteViewMode snow\sprite,4

snow\active = 0
Next


End Function

Function UpdateSnow(cam)

For snow.flokke = Each flokke
If Not snow\active

snow\x = EntityX(cam)+Rnd(-150,150)
snow\y = EntityY(cam)+80
snow\z = EntityZ(cam)+Rnd(-150,150)
snow\ys = (Rnd(2,5)+Rnd(2,5))/40
snow\active = 1
End If
snow\y = snow\y - snow\ys*60/fps
PositionEntity snow\sprite,snow\x,snow\y,snow\z
SpriteViewMode snow\sprite, 3
If snow\y < -5 Then snow\active = 0

Next
End Function


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!

SYSThern

BeitragSa, Okt 18, 2008 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
also naja

am anfang läufts gut mit 58-60 fps bei mir dann nach ein paar sekunden nur noch 20-25fps??

rate dir keine sprites zu verwenden...

und bau ein lodsystem ein so kannst du es auch machen das der schnee nicht in der häfte des bildschirms verschwindet....
Tools and Programms
--------------------
www.systhern.de

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group