Schneegestöber in 3D

Previous topic - Next topic

Quentin

Neuauflage: Die meisten Beiträge sind leider leer :(

BumbleBee

Cool.
Let it snow, let it snow...Tralala :D
Ich würde das auch bei Code Snippets reintun und den Code mit englischen Kommentaren versehen.  
Sieht auf jeden Fall wirklich gut aus.

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Antidote

Schade,
bei mir wird folgendes ausgegeben:
Quote"Grafikanzeige.gbas"(97) error : wrong argument type : INC, arg no: 1
TYPE  is not declared
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

Quentin

Auweia, übersetzen, na mal sehen.

@Antidote
seltsam, hast das neueste Update gezogen? Ansonsten versuch vielleicht mal in der Funktion Update_Snow() statt
Code (glbasic) Select
LOCAL lsnow

LOCAL lsnow AS tSnowFlake
zu schreiben, vielleicht hilfts

Antidote

@Quentin
Ahhh, ich war nicht up2date ;)
Geht aber auch schneller als man gucken kann mit diesen Updates :))


Schöne Schneeflocken, einfach nur gecodet...toll
PC Core2Duo e4300, 2GBRam, Geforce 8800GT-1gb, XPsp3
GP2x, Wii, XBox360, Wiz, psp, ps3 usw.

mannybass

Sieht toll aus!
Sauber gecodet, gut dokumentiert.

Schranz0r

jopp ganz nett, aber noch paar schönheitsfehler drin:

Code (glbasic) Select
 // Schneeflocke zeichnen
  FILLRECT 0,0,10,10, RGB(0xff, 0x00, 0x80)
  DRAWLINE 0, 5, 10, 5, RGB(RND(255), 255, 255)
  DRAWLINE 5, 0, 5, 10, RGB(RND(255), 255, 255)
  DRAWLINE 1, 1, 9, 9, RGB(RND(255), 255, 255)
  DRAWLINE 9, 1, 1, 9, RGB(RND(255), 255, 255)
Damit sind die Zwischenräume durchsichtig!

und ich häts wohl mit  DIM gemacht anstat mit Types.
Types sind in GLB schau schnell, darum gehts mit deinem Code auch gut, aber versuchs mal in Blitz3D oder so, da haste 0 Chance .....
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

sitmmt auf Transparenz hab ich hierbei gar nicht geachtet, ist mir aber bei dem Gewimmel auch nicht aufgefallen. Thx für den Hinweis.

Wieso DIM statt TYPEs? Sind die Geschwindigkeitsunterschiede wirklich so enorm? Hier war mir aber auch die bessere Lesbarkeit wichtiger als das letzte Quentchen Performance.
In BlitzMax hatte ich aber auch schon etliche hundert Ojbkete gleichzeitig über den Bildschirm bewegt (mit TYPEs). Konnte keine Geschwindigkeitsprobleme sehen, wobei ich zugeben muss, daß ich auch keine genauen Messungen vorgenommen habe.

Schranz0r

In Blitz haste gleich mal paar laggs, schmieren die FPS gleich ab...

DIM ist die resourcensparende variante,
Types beanspruchen mehr .....


Aber schön haste es Programmiert, schön eingerückt & Kommentiert
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Gefällt mir gut! Gibt's das auch in 3D? hehehe

War bloß ein Scherz. Ist wirklich super Arbeit! =)
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

Quote from: WPShadowGefällt mir gut! Gibt's das auch in 3D? hehehe
yep, sobald ich einen Schimmer von 3D in GLBasic hab ;-)

Schranz0r

ist doch wirklich einfach :D
3D mein ich jetzt , da musste gernet viel ändern am Code
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

so, muss den alten Wirsing hier noch mal ausgraben, denn endlich gibt es jetzt 3D-Schnee, worauf die ganze GL-Community nicht gewartet hat ;)

Code (glbasic) Select
// --------------------------------- //
// Project: 3D-Schnee
// Start: Monday, April 14, 2008
// IDE Version: 5.204

GLOBAL KEY_LEFT = 203
GLOBAL KEY_RIGHT = 205
GLOBAL KEY_UP = 200
GLOBAL KEY_DOWN = 208
GLOBAL MAX_SNOW = 5000

TYPE t_snow
  x; y; z
  speed
  angx
  angz
ENDTYPE
LOCAL snow[] AS t_snow
DIM snow[MAX_SNOW]

// init snow
FOR i = 0 TO MAX_SNOW - 1
  snow[i].x = RAND(-1000, 1000)
  snow[i].y = RND(1000)
  snow[i].z = RAND(-1000, 1000)
  snow[i].speed = RND(10) / 10 + 1
  snow[i].angx = RND(360)
  snow[i].angz = RND(360)
NEXT


//DRAWRECT 0, 0, 255, 255, RGB(80, 80, 80)
//GRABSPRITE 0, 0, 0, 255, 255

// ground
X_OBJSTART 0
  X_OBJADDVERTEX -1000, 0, -1000, 0, 0, RGB(80, 80, 80)
  X_OBJADDVERTEX -000, 0, -1000, 0, 0, RGB(80, 80, 80)
  X_OBJADDVERTEX 1000, 0, 1000, 0, 0, RGB(80, 80, 80)
  X_OBJADDVERTEX -1000, 0, 1000, 0,0, RGB(80, 80, 80)
X_OBJEND

// snowflake
X_OBJSTART 1
  FOR i = 0 TO 360 STEP 45
    X_OBJNEWGROUP
      X_OBJADDVERTEX 0, 1, 0, 0, 0, RGB(255, 255, 255)
      X_OBJADDVERTEX SIN(i)*2, 0, COS(i)*2, 0, 0, RGB(255, 255, 255)
      X_OBJADDVERTEX 0, -1, 0, 0, 0, RGB(255, 255, 255)
      X_OBJADDVERTEX -SIN(i)*2, 0, -COS(i)*2, 0, 0, RGB(255, 255, 255)
  NEXT
X_OBJEND


LOCAL phi, psi    // angles for camera x-z and y-z
phi = 90

WHILE TRUE

  // for camera movement
  IF KEY(KEY_LEFT) THEN INC phi, 1
  IF KEY(KEY_RIGHT) THEN DEC phi, 1
  IF KEY(KEY_UP) THEN INC psi, 1
  IF KEY(KEY_DOWN) THEN DEC psi, 1
  IF phi > 359 THEN phi = 0
  IF phi < 0 THEN phi = 359
  IF psi > 45 THEN psi = 45
  IF psi < 0 THEN psi = 0
 
  dx = COS(phi) * COS(psi)
  dy = SIN(psi)
  dz = -SIN(phi) * COS(psi)  
 
  X_MAKE3D 1, 1000, 45
  X_CAMERA 0, 1, 0, dx, dy+1, dz
 
  // draw the ground
  X_DRAWOBJ 0, 0
 
  // draw the snowflakes
  FOR i = 0 TO MAX_SNOW - 1
    X_MOVEMENT snow[i].x, snow[i].y, snow[i].z
    X_ROTATION angle, 1, 0, 1
    X_DRAWOBJ 1, 0
    INC snow[i].angx, 2
    IF snow[i].angx > 359 THEN snow[i].angx = 0
    INC snow[i].angz, 2
    IF snow[i].angz > 356 THEN snow[i].angz = 0
    INC snow[i].x, SIN(snow[i].angx)/2
    INC snow[i].z, SIN(snow[i].angz)/2
    DEC snow[i].y, snow[i].speed
    IF snow[i].y < 0
      snow[i].x = RAND(-1000, 1000)
      snow[i].y = 1000
      snow[i].z = RAND(-1000, 1000)
      snow[i].speed = RND(10) / 10 + 1
      snow[i].angx = RND(360)
      snow[i].angz = RND(360)
    ENDIF
  NEXT
  INC angle, 1
  IF angle > 359 THEN angle = 0
 
  SHOWSCREEN
 
WEND

// ------------------------------------------------------------- //
// ---  RAND  ---
// ------------------------------------------------------------- //
FUNCTION RAND: minimum, maximum
  RETURN minimum + RND(-minimum + maximum)
ENDFUNCTION // RAND

Schranz0r

Wirklich erste Sahne!
Finds auch cool das du mein RAND auch immer schön benutzt :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Gefällt mir!

Geht das auch mit Seitenwind?
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est