[B3D] Schnelle Stars-Sphere erzeugen

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: [B3D] Schnelle Stars-Sphere erzeugen

BeitragDo, Jan 25, 2007 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Puhh, brauche mal ein wenig Pause von Buggy, so habe ich mal was anderes gemacht. Hier eine Stars-Sphere für Weltraumshooter etc.

Der Vorteil dieser Sphere ist, das sie - bei mir zumindest - wesentlich schneller (edit2> kann aber bei unterschiedlichen Systemen auch anders rum sein, siehe dazu den Beitragsverlauf <edit2) ist als eine gewöhnliche SkyBox mit Sternentextur überzogen. Zudem wird eine wesentlich höhere 'Auflösung' der einzelnen Sterne dargestellt, als es zB mit einer 2048er Textur möglich währe. Denoch sind die Sterne nicht so klein, dass sie flimmern würden, dieses wird vom Code automatisch der jeweiligen Bildschirmauflösung angepasst.

Erzeugt wird eine neue Sphere mit StarsSphere(anz,rnd)

- anz - gibt die Anzahl der Sterne*160 an. Als maximum ist eine Angabe von 100 möglich. Mehr geht deshalb nicht, weil jeder Stern aus zwei Polygonen besteht, und da ist bei 32768 schluss. anz=0 löscht vorhandene StarsSphere.

- rnd - gibt die Position des Zufallsgenerators wieder. Falls man zB für ein Level immer nur den gleichen Hintergrund haben möchte, so gibt man für jeweiligen Level immer die jeweilige rnd-Nummer.

edit1: Mit der Taste -Space- kann man neue Sternenkonstelationen erzeugen. Eventuell währen damit auch Sternennebel möglich... Hmmm...

Code: [AUSKLAPPEN]
;Grafik
Const gfx=1280
Const gfy=gfx*.75
Graphics3D gfx,gfy,0,1
SetBuffer BackBuffer()

;Kamera erstellen
camera=CreateCamera()
PositionEntity camera,0,0,0
CameraRange camera,.1,1000

;Standard-Stars-Sphere-Kramm
Global ssb_mesh=CreateMesh()
Global ssb_brush=CreateBrush()
Global ssb_texture=CreateTexture(2,2,3)
WritePixel 0,0,$00ffffff,TextureBuffer(ssb_texture)
WritePixel 1,0,$ffffffff,TextureBuffer(ssb_texture)
WritePixel 0,1,$00ffffff,TextureBuffer(ssb_texture)
WritePixel 1,1,$00ffffff,TextureBuffer(ssb_texture)
ScaleTexture ssb_texture,2,2
BrushTexture ssb_brush,ssb_texture
Global ssb_face=CreateSurface(ssb_mesh,ssb_brush)
FreeTexture ssb_texture
EntityFX ssb_mesh,3;19




;1.Wert-Maximal-%-Anzahl-Sterne
;2.Wert-Sternenkonstelation
StarsSphere(100,7)

mx#=0
my#=0
mz#=0

;HAUPTSCHLEIFE
While Not KeyHit(1)

 ;Maus-Bewegungs-Kramm
 mx=mx-MouseXSpeed()/500.0
 my=my+MouseYSpeed()/500.0
 MoveMouse gfx/2,gfy/2
 mx=mx*.99
 my=my*.99

 ;Mit-Space-Neuen-Sternenkramm
 If KeyHit(57) StarsSphere(100,MilliSecs())

 ;Mit-Maustasten-Kamera-Bewegen
 If MouseDown(1) MoveEntity camera,0,0,-.1
 If MouseDown(2) MoveEntity camera,0,0,.1

 ;Mit-Maus-Kamera-Drehen
 TurnEntity camera,my,mx,0

 ;3D-Kramm
 RenderWorld

 ;Frames-Anzeiger
 ms=MilliSecs():Text 0,0,fps
 If ms>mt mt=ms+254:fps=frame:frame=0 Else frame=frame+4
 Flip 0
Wend
End




;StarsSphere-Funktion
Function StarsSphere(ssb_anz,ssb_rnd)
 If ssb_anz>100 ssb_anz=100
 ClearSurface ssb_face
 SeedRnd ssb_rnd

 ;Los-Gehts
 If ssb_anz>0

  ;Hilfs-Positionen
  ssb_pm=CreatePivot()
  ssb_p0=CreatePivot()
  ssb_p1=CreatePivot(ssb_p0)
  ssb_p2=CreatePivot(ssb_p0)
  ssb_p3=CreatePivot(ssb_p0)
  ssb_p4=CreatePivot(ssb_p0)

  ;Hilfs-Formationen
  PositionEntity ssb_p1,0,+1,0
  PositionEntity ssb_p2,-1,0,0
  PositionEntity ssb_p3,0,-1,0
  PositionEntity ssb_p4,+1,0,0

  ;Variablen
  ssb_x#=0
  ssb_y#=0
  ssb_z#=0
  ssb_s#=0

  ;Alle-Sterne-Einzeichnen
  For ssb_q=0 To ssb_anz*160

   ;Nicht-Alle-Gleich
   If ssb_q>ssb_anz*80

    ;Sternen(Häufungen)
    ssb_x=ssb_x+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
    ssb_y=ssb_y+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
    ssb_z=ssb_z+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
   Else

    ;Sternen(Verteilung)
    ssb_x=ssb_x+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
    ssb_y=ssb_y+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
    ssb_z=ssb_z+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
   End If

   ;Stern-Position-Normalisieren
   TFormNormal ssb_x,ssb_y,ssb_z,0,0
   ssb_x=TFormedX()
   ssb_y=TFormedY()
   ssb_z=TFormedZ()

   ;Sternen-Farben
   If Rand(0,4)=0 ssb_fm=Rand(1,5)*40 Else ssb_fm=Rand(1,3)*40
   ssb_fr=Rand(0,55)+ssb_fm
   ssb_fg=Rand(0,55)+ssb_fm
   ssb_fb=Rand(0,55)+ssb_fm

   ;Sternen-Skallierung-Und-Ausrichtung
   ssb_s=((320+ssb_fm)/90.0)/GraphicsWidth()
   PositionEntity ssb_p0,ssb_x,ssb_y,ssb_z
   ScaleEntity ssb_p0,ssb_s,ssb_s,ssb_s
   PointEntity ssb_p0,ssb_pm

   ;Standard-Vertex-Positionierung
   ssb_v0=AddVertex(ssb_face,EntityX(ssb_p1,1),EntityY(ssb_p1,1),EntityZ(ssb_p1,1), 0.5,1.5)
   ssb_v1=AddVertex(ssb_face,EntityX(ssb_p2,1),EntityY(ssb_p2,1),EntityZ(ssb_p2,1), 2.5,1.5)
   ssb_v2=AddVertex(ssb_face,EntityX(ssb_p3,1),EntityY(ssb_p3,1),EntityZ(ssb_p3,1), 2.5,3.5)
   ssb_v3=AddVertex(ssb_face,EntityX(ssb_p4,1),EntityY(ssb_p4,1),EntityZ(ssb_p4,1), 0.5,3.5)

   ;Standard-Vertex-Colorierung
   VertexColor ssb_face,ssb_v0,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v1,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v2,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v3,ssb_fr,ssb_fg,ssb_fb,1

   ;Standard-Vertex-Ausrichtung
   VertexNormal ssb_face,ssb_v0,0,0,-1
   VertexNormal ssb_face,ssb_v1,0,0,-1
   VertexNormal ssb_face,ssb_v2,0,0,-1
   VertexNormal ssb_face,ssb_v3,0,0,-1

   ;Standard-Strangulierung:)
   AddTriangle(ssb_face,ssb_v0,ssb_v1,ssb_v2)
   AddTriangle(ssb_face,ssb_v2,ssb_v3,ssb_v0)
  Next

  ;Auf-Standard-Größe-Machen
  ScaleEntity ssb_mesh,100,100,100

  ;Zeug-Befreien
  FreeEntity ssb_p4
  FreeEntity ssb_p3
  FreeEntity ssb_p2
  FreeEntity ssb_p1
  FreeEntity ssb_p0
  FreeEntity ssb_pm
 End If
End Function
  • Zuletzt bearbeitet von hectic am Sa, Jan 27, 2007 1:10, insgesamt einmal bearbeitet
 

Steven

ehemals "Steven04"

BeitragFr, Jan 26, 2007 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Crass! Sieht richtig cool aus! Very Happy

Werde jetzt mal das in mein Spiel einzubauen und dann schaue ich mal, wie schnell es ist! Smile

Black Spider

BeitragFr, Jan 26, 2007 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
schick schick,
aber das mit dem Sternennebel wäre net so zu empfehlen, da wären Sprites besser,
die könnte man dann ausblenden wenn man durchfliegt, usw...
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 26, 2007 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@Black Spider, Es soll davon auszugehen sein, dass die StarsSphere - eingesetzt im spiel - sich mit der Kamera verschiebt und nur die kameradrehung zu sehen sein soll. Warum ich es im Beispiel nicht schon so gemacht habe ist, dass ich der Comunity die Möglichkeit geben wollte zu sehen, wie diese aufgebaut ist. Daher sollte man im Spiel nicht 'durch irgendwas' fliegen können, was Bestandteil der St.Sphere ist.

Denn: selbst Lichtgeschwindigkeit würde nicht aussreichen um ein Stern in annehmabere zeit erreichen zu können, wenn man von der Zeitverzerrung mal absieht. Smile

Daher währe ein sternenhimmel schon Sinnvoll, da es dann auch als SingleSurface dargestellt wird. ^^

FireballFlame

BeitragFr, Jan 26, 2007 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyyy, danke!! Das kann ich gerade sehr gut gebrauchen!!! Surprised Very Happy

Ich bau grad ein paar simple "Nebel" ein, also dass jeder 2000ste Stern sehr dunkel (rot/violett/blau) gefärbt und auf das 100-500fache vergrößert wird, dann sieht das noch besser aus Smile

Aber wieso schneller als eine normale Skybox? o.O
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am So, Feb 04, 2007 3:58, insgesamt einmal bearbeitet

StepTiger

BeitragFr, Jan 26, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr sehr schön. Da folgendes:
Code: [AUSKLAPPEN]
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

SeedRnd MilliSecs()

cam=CreateCamera()

detail=GraphicsWidth()*.5
stars#=.1

boxtex=CreateTexture(detail,detail)

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

SetBuffer TextureBuffer(boxtex)
For x=0 To detail-1
   For y=0 To detail-1
      
      s#=Rnd(100)
      
      If s#<=stars#
         
         hel=Rand(0,255)
         
         Color hel,hel,hel
         
         Plot x,y
         
      EndIf
      
   Next
Next
SetBuffer BackBuffer()

box=CreateCube()
EntityFX box,1
ScaleEntity box,10,10,10
FlipMesh box
EntityTexture box,boxtex

While Not KeyHit(1)
   
   Cls
   
   TurnEntity cam,MouseYSpeed()*.05,-MouseXSpeed()*.05,0
   MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
   
   UpdateWorld
   RenderWorld
   
   Flip
   
Wend

End


aber wesentlich weniger prozessorlastig ist, werde ich wohl trotzdem diese Methode benutzen. Ist eigentlich für meine Zwecke ausreichend. Mich stört, dass deine Sterne in allen Farben auftauchen, wobei die gängigsten jedoch rot, weiß und gelb wären.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 26, 2007 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es bleibt jedem selbst überlassen, wie er es macht.

Aber:

- Dein Code ist etwa 3mal langsamer als meiner (deshalb habe ich es ja auch überhaupt gemacht).

edit1> In hohen Auflösungen zumindest. Bei niedrigen Auflösungen von etwa 640x480 bleibt es gleich <edit

- Bei deinem Code wird keine perspetivische Korretur in die Textur nahe der Ränder eingezeichnet, was dazu führt, dass die Sterne dort flimmern und man dadurch wieder die 'Box' als solche erkennt.

- Bei deinem Code ist die Struktur der Textur sechsmal vorhanden, dadurch ist es dem Spieler nicht möglich, sich in dem ohnehin schwer zu orientierbaren Weltall zu bewegen, da du generell auf Strukturen verzichten musst. Die habe ich bei mir extra ja noch eingebaut.

- Du hast die Möglichkeit die Farben der Sterne in meinem Code anzupassen, da der Code im Codearchive ja als solches 'frei' ist.

StepTiger

BeitragFr, Jan 26, 2007 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst meine Kritik nicht verkraften, was? xD
Ist natürlich nur Spaß.

Wieso sollte es nochmal langsamer sein? Ich denke, da hab ich wohl irgendwas nicht mitgeschnitten. Sind 8000 Vertices, die jede Schleife aktualisiert werden müssen denn wirklich schneller als die eine Textur?

Das es die Orientierung versaut, kann man nicht abstreiten. Man hat einfach keinen Durchblick mehr. Allerdings erkannte ich die Box nicht als solche!

Soll aber nicht heißen, dass ich den Code schöner finde als deinen.
Da ich grundlegend keine Weltraumspiele mag, also solche auch nicht programmieren werde, ist es mir relativ egal.

Dein Code ist jedenfalls besser als meiner, dafür ist meiner kürzer. Für Schreibfaule wie mich genau das Richtige.
Ich benutze sowas eh nur für Spielereien, also ist es mir mehr oder weniger gleichgültig.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

FireballFlame

BeitragFr, Jan 26, 2007 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
StepTiger hat Folgendes geschrieben:
Dein Code ist jedenfalls besser als meiner, dafür ist meiner kürzer. Für Schreibfaule wie mich genau das Richtige.

Gerade wenn du so schreibfaul bist, warum bastelst du dann eigenen Code und nimmst nicht hectics? Rolling Eyes Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 27, 2007 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jepp, dafür ist ja das Codearchive ja da, um anderen die Arbeit zu erleichtern. Aber um auf die Frage zurück zu kommen: Ja, es stimmt das bei meinem Code biszu 32000 Triangles gezeichnet werden, was viel erscheint und es auch ist. Es ist aber schon ein grundlegender grafischer Abschnitt, wo nicht mehr allzuviel hinzu kommen muß im Spiel. Es stimmt aber auch, das eine Weltraumtextur 99 % Bildschirmfüllend einfach nur schwarz zeichnen MUSS was sich Fillrate nennt.

Ausserdem, teste doch mal die Geschwindigkeit. Würde mich sogar mal interessieren, da unterschiedliche Grafikkarten sicherlich unterschiedliche Ergebnisse ergeben werden. Die einen sind vielleicht gut in Fillrate und die anderen gut in Vertexpositionierung... Deshalb schrieb ich ja auch ganz zu Anfang '''Der Vorteil dieser Sphere ist, das sie - bei mir zumindest - wesentlich schneller ist als eine...'''

Hier meine Messungen (Auflösung, Deine FPS, Meine FPS):
Code: [AUSKLAPPEN]
 320 x  240, 2560,  500
 640 x  480,  652,  484
 800 x  600,  452,  488
1024 x  768,  288,  440
1280 x  960,  144,  360
1600 x 1200,   72,  212
2048 x 1536,   32,   96


Kritik vertrage ich gut, solange sie angebracht ist. Ein Code durch ein schlechteren zu vermiesen, ist nicht schön. Mal von der 320er Auflösung abgesehen (wird eh niemand in dieser spielen wollen), ist mein Code ab der 800er schneller und schöner. Auch habe ich bei den Messungen auf 100 % -Anzahl gesetzt, um für mich die ungünstigste Situation zu wählen, was bei der 320er Auflösung vielzuviel Sterne bedeutend war.

Wem der Code nicht gefällt, einfach ignorieren. Wer ein besseren hat, kann ihn ja mal vorstellen oder erwähnen wie es besser geht, dann bemühe ich mich, um das maximum an meiner zZ Möglichen Qualität etc. für's Codearchive zur Verfügung zu stellen.

StepTiger

BeitragSa, Jan 27, 2007 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
320 240 2500 828
640 480 1631 761
800 600 1003 680
1024 768 870 690
1280 960 631 566
1600 1200 410 573


Ich wollte deinen Code nicht vermiesen, sondern eine einfache Alternative zeigen.
Aber ist gut! Ignoriert meinen bösen Code, denn hectic hat eh den besseren. (Nein, kein Sarkasmus.)
Deiner ist zwar bei niedrigen Auflösungen wesentlich langsamer, aber während meine FPS nach Erwartungen stark sinken, sind deine relativ konstant.

Hier die Codes zur Messung:
Code: [AUSKLAPPEN]
Graphics3D 800,600,32,1
SetBuffer BackBuffer()

SeedRnd MilliSecs()

cam=CreateCamera()

detail=512
stars#=.1

boxtex=CreateTexture(detail,detail)

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

SetBuffer TextureBuffer(boxtex)
For x=0 To detail-1
   For y=0 To detail-1
      
      s#=Rnd(100)
      
      If s#<=stars#
         
         hel=Rand(0,255)
         
         Color hel,hel,hel
         
         Plot x,y
         
      EndIf
      
   Next
Next
SetBuffer BackBuffer()

box=CreateCube()
EntityFX box,1
ScaleEntity box,10,10,10
FlipMesh box
EntityTexture box,boxtex

f#=0
time=MilliSecs()

While Not KeyHit(1)
   
   f=f+1
   
   Cls
   
   TurnEntity cam,Rnd#(5)-2.5,Rnd(5)-2.5,0;MouseYSpeed()*.05,-MouseXSpeed()*.05,0
   MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
   
   UpdateWorld
   RenderWorld
   
   Color 255,255,255
   Text 1,1,f#/(MilliSecs()-time)*1000.
   
   Flip
   
Wend

End


Code: [AUSKLAPPEN]
;Grafik
Const gfx=800
Const gfy=gfx*.75
Graphics3D gfx,gfy,0,1
SetBuffer BackBuffer()

;Kamera erstellen
camera=CreateCamera()
PositionEntity camera,0,0,0
CameraRange camera,.1,1000

;Standard-Stars-Sphere-Kramm
Global ssb_mesh=CreateMesh()
Global ssb_brush=CreateBrush()
Global ssb_texture=CreateTexture(2,2,3)
WritePixel 0,0,$00ffffff,TextureBuffer(ssb_texture)
WritePixel 1,0,$ffffffff,TextureBuffer(ssb_texture)
WritePixel 0,1,$00ffffff,TextureBuffer(ssb_texture)
WritePixel 1,1,$00ffffff,TextureBuffer(ssb_texture)
ScaleTexture ssb_texture,2,2
BrushTexture ssb_brush,ssb_texture
Global ssb_face=CreateSurface(ssb_mesh,ssb_brush)
FreeTexture ssb_texture
EntityFX ssb_mesh,3;19




;1.Wert-Maximal-%-Anzahl-Sterne
;2.Wert-Sternenkonstelation
StarsSphere(100,7)

mx#=0
my#=0
mz#=0

f#=0
time=MilliSecs()

;HAUPTSCHLEIFE
While Not KeyHit(1)
 
 f=f+1
 
 ;Maus-Bewegungs-Kramm
 mx=mx-MouseXSpeed()/500.0
 my=my+MouseYSpeed()/500.0
 MoveMouse gfx/2,gfy/2
 mx=mx*.99
 my=my*.99

 ;Mit-Space-Neuen-Sternenkramm
 If KeyHit(57) StarsSphere(100,MilliSecs())

 ;Mit-Maustasten-Kamera-Bewegen
 If MouseDown(1) MoveEntity camera,0,0,-.1
 If MouseDown(2) MoveEntity camera,0,0,.1

 ;Mit-Maus-Kamera-Drehen
 TurnEntity camera,Rnd#(5)-2.5,Rnd(5)-2.5,0;my,mx,0

 ;3D-Kramm
 RenderWorld
 Text 10,20,f#/(MilliSecs()-time)*1000.

 ;Frames-Anzeiger
 ms=MilliSecs():Text 0,0,fps
 If ms>mt mt=ms+254:fps=frame:frame=0 Else frame=frame+4
 Flip 0
Wend
End




;StarsSphere-Funktion
Function StarsSphere(ssb_anz,ssb_rnd)
 If ssb_anz>100 ssb_anz=100
 ClearSurface ssb_face
 SeedRnd ssb_rnd

 ;Los-Gehts
 If ssb_anz>0

  ;Hilfs-Positionen
  ssb_pm=CreatePivot()
  ssb_p0=CreatePivot()
  ssb_p1=CreatePivot(ssb_p0)
  ssb_p2=CreatePivot(ssb_p0)
  ssb_p3=CreatePivot(ssb_p0)
  ssb_p4=CreatePivot(ssb_p0)

  ;Hilfs-Formationen
  PositionEntity ssb_p1,0,+1,0
  PositionEntity ssb_p2,-1,0,0
  PositionEntity ssb_p3,0,-1,0
  PositionEntity ssb_p4,+1,0,0

  ;Variablen
  ssb_x#=0
  ssb_y#=0
  ssb_z#=0
  ssb_s#=0

  ;Alle-Sterne-Einzeichnen
  For ssb_q=0 To ssb_anz*160

   ;Nicht-Alle-Gleich
   If ssb_q>ssb_anz*80

    ;Sternen(Häufungen)
    ssb_x=ssb_x+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
    ssb_y=ssb_y+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
    ssb_z=ssb_z+Rnd(-8.0/ssb_anz,8.0/ssb_anz)
   Else

    ;Sternen(Verteilung)
    ssb_x=ssb_x+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
    ssb_y=ssb_y+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
    ssb_z=ssb_z+Rnd(-16.0/ssb_anz,16.0/ssb_anz)
   End If

   ;Stern-Position-Normalisieren
   TFormNormal ssb_x,ssb_y,ssb_z,0,0
   ssb_x=TFormedX()
   ssb_y=TFormedY()
   ssb_z=TFormedZ()

   ;Sternen-Farben
   If Rand(0,4)=0 ssb_fm=Rand(1,5)*40 Else ssb_fm=Rand(1,3)*40
   hel=Rand(0,255)
   ssb_fr=hel;Rand(0,55)+ssb_fm
   ssb_fg=hel;Rand(0,55)+ssb_fm
   ssb_fb=hel;Rand(0,55)+ssb_fm

   ;Sternen-Skallierung-Und-Ausrichtung
   ssb_s=((320+ssb_fm)/90.0)/GraphicsWidth()
   PositionEntity ssb_p0,ssb_x,ssb_y,ssb_z
   ScaleEntity ssb_p0,ssb_s,ssb_s,ssb_s
   PointEntity ssb_p0,ssb_pm

   ;Standard-Vertex-Positionierung
   ssb_v0=AddVertex(ssb_face,EntityX(ssb_p1,1),EntityY(ssb_p1,1),EntityZ(ssb_p1,1), 0.5,1.5)
   ssb_v1=AddVertex(ssb_face,EntityX(ssb_p2,1),EntityY(ssb_p2,1),EntityZ(ssb_p2,1), 2.5,1.5)
   ssb_v2=AddVertex(ssb_face,EntityX(ssb_p3,1),EntityY(ssb_p3,1),EntityZ(ssb_p3,1), 2.5,3.5)
   ssb_v3=AddVertex(ssb_face,EntityX(ssb_p4,1),EntityY(ssb_p4,1),EntityZ(ssb_p4,1), 0.5,3.5)

   ;Standard-Vertex-Colorierung
   VertexColor ssb_face,ssb_v0,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v1,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v2,ssb_fr,ssb_fg,ssb_fb,1
   VertexColor ssb_face,ssb_v3,ssb_fr,ssb_fg,ssb_fb,1

   ;Standard-Vertex-Ausrichtung
   VertexNormal ssb_face,ssb_v0,0,0,-1
   VertexNormal ssb_face,ssb_v1,0,0,-1
   VertexNormal ssb_face,ssb_v2,0,0,-1
   VertexNormal ssb_face,ssb_v3,0,0,-1

   ;Standard-Strangulierung:)
   AddTriangle(ssb_face,ssb_v0,ssb_v1,ssb_v2)
   AddTriangle(ssb_face,ssb_v2,ssb_v3,ssb_v0)
  Next

  ;Auf-Standard-Größe-Machen
  ScaleEntity ssb_mesh,100,100,100

  ;Zeug-Befreien
  FreeEntity ssb_p4
  FreeEntity ssb_p3
  FreeEntity ssb_p2
  FreeEntity ssb_p1
  FreeEntity ssb_p0
  FreeEntity ssb_pm
 End If
End Function
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 27, 2007 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, eben nicht. Bei dir ist mein Code wiederum recht schlecht. Kaum einer wird auf 1600x1200er Auflösung spielen. Ausserdem kannst du dein Code noch schneller machen, wenn du das blöde Cls da weg machst, macht bei mir +25%.

Was ich bei mir überhaupt nicht verstehen kann ist, warum mein Code langsamer wird, wenn man MoveMouse auskommentiert?!

Ich änder mal kurz den ersten Beitrag...

5k41

BeitragSa, Jan 27, 2007 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun hats mich auch mal interessiert!
Hier mal meine Messungen:
Code: [AUSKLAPPEN]

Höhe | Breite | Step | Hectic
320  | 240    | 3700 | 172
640  | 480    | 2280 | 172
800  | 600    | 1670 | 172
1024 | 768    | 1070 | 172
1280 | 960    | 724  | 172
1600 | 1200   | 456  | 172

Mein Fazit ist, das Hectics hübscher, jedoch Steps schneller ist und man die Orientierungslosigkeit aus leicht beheben kann ( Cube mit 24 Verts und 6 Surfs erstellen und für jede Seite einen Brush erstellt ). Die Skybox Kanten konnte ich bei ganz genauem hinsehen auch erahnen, wäre mir jedoch nicht aufgefallen wenn ich nicht Explizip drauf geachtet hätte. Ich denke der Code sollte je nach gebrauch benutzt werden, da beide Codes ihre Vor- und Nachteile haben.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 27, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Boah, was ist das denn für ein krasser Unterschied?! Shocked Und was sind das für Grafikkarten, die ihr da habt? Ich habe eine ATI RADEON 9600SE auf Intel Pentium 4 HT mit 2,8GHz - schon ein bischen alt meine Hardware - aber so schlecht schneidet sie nicht ab.

Keine Ahnung, ob diese diskusion dem Moderatoren vielleicht auf den Senkel geht, aber ich hätte nichts dagegen wenn mein Code gelöscht werden würde, da es mit solchen Unterschieden zu Problemen kommen könnte, wenn andere ihn einsetzen...^^

StepTiger

BeitragSa, Jan 27, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
dein code ist wesentlich schöner Smile
Wenn, dann löscht meinen und den ganzen kram der dazu als diskussion diente Smile

An deinem Code lässt sich sicher noch Einiges optimieren, oder?

system siehe unten!
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 27, 2007 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Was mir zur Optimierung einfällt währe, jeden Stern aus einem Triangle darzustellen. Dieses hatte ich bereits schon vor, hatte es aber verworfen, weil - um ein Pixel einzuschliessen - die Grundfläche eines Sterns dann doppelt so groß währe, wie jetzt es mit zwei Triangles ist. Also die Fillrate würde pro Stern verdoppelt, dafür die Triangleszahl halbiert. Um die Sache auf dem Punkt zu bringen: Auf 'meinem' System währe es langsamer, auf 'eurem' wohl etwas schneller...

Noch eine Möglichkeit, eine Kugeloberfläche nur aus Triangles mit gleicher Kantenlänge (also 5 im Kreis um ein Bogen in der 3ten Dimension zu bekommen), und dann auf eine Textur per UV-Mapping so zugreifen, dass man pro Vertice auch mal die Richtung in der UV selber ändert. Dadurch hätte man eine Mischung aus Skybox und meinem Kramm und denoch keine grundlegende wiederholende Sternengrundformen (das war ja mein Ziel). Auch die Performence sollte sich dann auf allen Systemen in etwa Wage halten.

So wie es jetzt ist, 'mag' ich es nicht mehr anwenden. Denn bei mir ist es echt schneller, so bin ich von ausgegangen das es bei den meisten wohl auch so sein wird. Die Differenz bei 5k41 sagt mir, es blos nicht anzuwenden. Sad

edit1: Weiß jemand wie so eine Kugel heisst? Also so eine, die nur aus gleichen Dreiecken besteht und wie man sie berechnet?

FireballFlame

BeitragSo, Jan 28, 2007 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Neiin, skal, was hast du nur angerichtet???

Hier sind meine Werte - die durchschnittlichen FPS, mit Fraps gebenchmarkt ^^:
Code: [AUSKLAPPEN]
Auflösung | Step | Hectic
----------+------+-------
 320x240  | 46.8 | 252.3
 640x480  | 51.2 | 240.8
 800x600  | 51.8 | 251.7
1024x768  | 59.8 | 257.9
1280x960  | 60.4 | 250.2
1600x1200 | 48.8 | 249.2

!
Mir würde eine Verwendung deines Codes also sehr entgegenkommen...
Man kann es eh nie allen recht machen. Bei manchen Leuten ist der eine Code schneller, bei anderen der andere. Aber deiner sieht im Zweifalle halt einfach besser aus!!! ^^
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am So, Jan 28, 2007 15:01, insgesamt 4-mal bearbeitet

5k41

BeitragSo, Jan 28, 2007 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
zu meinem Rechner: Amd 64 3200+, 2 GB Kingston Ram,Asus Nvidia GeForce 6600 GT.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

moonworx

Betreff: Danke fürs teilen !

BeitragSo, Jan 28, 2007 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wunderhübsch hectic, vielen Dank !
Star Chasm
 

Schoasch

Betreff: videomode

BeitragMi, Jan 31, 2007 7:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Videomode not Supported

Sad((((

kan mir wer nen screnn schicken oder ins archiv laden?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group