Author Topic: Schneegestöber in 3D  (Read 10961 times)

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
Schneegestöber - ein erster zaghafter Versuch
« Reply #15 on: 2008-Apr-26 »
*ggg* ja Schranzor, dein RAND ist fester Bestandteil aller Spielereien, die ich mit GL so verunstalte äh veranstalte. Gernot sollte das als festen Befehl mit einbauen ;)

ja WP, das wäre vielleicht ein weitere nette Spielerei. Wie soll mans umsetzen? Per Zufall? Newton raff ich noch nicht.

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1667
    • View Profile
    • http://lostrevenant.blogspot.com
Schneegestöber - ein erster zaghafter Versuch
« Reply #16 on: 2008-Apr-26 »
Einfach einen Wind von Richtung x oder so, dachte ich.

Also

Windrichtung_x = 0.15
Windrichtung_y = 0.80

oder so. Da es ja nach unten fällt, kann der Wind von vorne/hinten oder links/rechts kommen. Dann könnte man es ja total cool in ein Spiel einbauen. :D
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

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5013
  • O Rly?
    • View Profile
Schneegestöber - ein erster zaghafter Versuch
« Reply #17 on: 2008-Apr-26 »
Kannste auch so schon
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1667
    • View Profile
    • http://lostrevenant.blogspot.com
Schneegestöber - ein erster zaghafter Versuch
« Reply #18 on: 2008-Apr-26 »
Muss mir mal das ganze Programm ansehen. Wird wohl eher morgen werden... :)
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

Tenorm

  • Guest
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #19 on: 2008-May-18 »
Hi Quentin,

da mein Schnee in einer meiner Projekte stark angezweifelt wurde =D , wollt ich mal fragen, ob man deinen Schnee in ein Projekt einbauen darf (einfach nehmen wär irgendwie fies...).

Gruß

Tenorm

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5013
  • O Rly?
    • View Profile
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #20 on: 2008-May-18 »
Codeschnippel sind frei verfügbar!
Alles was unter dieser Rubrik zu finden ist, ist opensource ;) daher auch für jeden der es brauch einsetztbar.  =)
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #21 on: 2008-May-18 »
hab ich dir schon in deinem Thread zu Helix Bugs beantwortet. Selbstverständlich darfst du, daür stehen die Dinger doch hier  =)
hab nur nicht gedacht, daß mein Schneetreiben zu irgendetwas nütze wäre

Genau Schranzor, das wollte ich damit sagen  :booze:

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1667
    • View Profile
    • http://lostrevenant.blogspot.com
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #22 on: 2008-May-18 »
Kannst du vielleicht wirklich einen Wind oder so einbauen? Oder mir zumindest sagen, wo ich den einsetzen muß? Ich blick da nämlich ehrlich gesagt nicht ganz durch...  :nw:
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

Tenorm

  • Guest
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #23 on: 2008-May-21 »
Wenn du nicht zu anspruchsvoll bist kannst du ja so tun als wäre KEY(203) oder KEY(205) immer TRUE, dann bewegt sich das ganze immer schön in eine Richtung (links oder rechts, jenachdem) :lol:

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5013
  • O Rly?
    • View Profile
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #24 on: 2008-May-21 »
Wind ist total simpel, doch der Code an sich erlaubt das nicht ganz ;)
Sonnst zieht der Schnee vorbei, und du stehst im trocken :P
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #25 on: 2008-Aug-02 »
und bitteschön, 3D-Schnee mit Wind.

Die Kamera blickt beim Programstart nach Norden. Mit den Tasten N, S, W, E kann man den Wind aus verschiedenen Himmelsrichtungen wehen lassen. Solange man eine der Tasten gedrückt hält, wird der Wind beständig stärker bis zu seiner Maximalgeschwindigkeit (hier 3). Lässt man die Taste los, flaut der Wind langsam wieder ab. Durch gleichzeitiges Drücken verschiedener Tasten kannman die Zwischenhimmelsrichtungen wie Nord-Ost oder Südwest simulieren.

Damit man, wie Schranzor so schön sagte, bei starkem Wind nicht auf einmal im trockenen steht, werden die Schneeflocken ab einer bestimmten Entfernung auf der gegenüberliegenden Seite wieder gezeigt.

Code: GLBasic [Select]
// --------------------------------- //
// Project: 3D-Schnee
// Start: Monday, April 14, 2008
// IDE Version: 5.204

GLOBAL KEY_LEFT = 203     // turn camera left
GLOBAL KEY_RIGHT = 205    // turn camera right
GLOBAL KEY_UP = 200       // turn camera up
GLOBAL KEY_DOWN = 208     // turn camera down
GLOBAL KEY_SPACE = 57     // make wind
GLOBAL MAX_SNOW = 5000

GLOBAL KEY_N = 49         // wind from north
GLOBAL KEY_S = 31         // wind form south
GLOBAL KEY_W = 17         // wind from west
GLOBAL KEY_E = 18         // wind from east
GLOBAL MAX_WIND = 3       // maximum speed of wind
GLOBAL MAX_RANGE = 1000   // max range of snowflakes from camera position
                         
// the current speed of the wind from all directions
GLOBAL cur_wind_north, cur_wind_south, cur_wind_west, cur_wind_east


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

// init snow
FOREACH s IN snow[]
  s.x = RAND(-1000, 1000)
  s.y = RND(1000)
  s.z = RAND(-1000, 1000)
  s.speed = RND(10) / 10 + 1
  s.angx = RND(360)
  s.angz = RND(360)
NEXT


// 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

  // make wind with keys N, S, W, E
  IF KEY(KEY_N)
    IF cur_wind_north < MAX_WIND THEN INC cur_wind_north, .01
  ELSE
    IF cur_wind_north > 0 THEN DEC cur_wind_north, .01
  ENDIF
  IF KEY(KEY_S)
        IF cur_wind_south < MAX_WIND THEN INC cur_wind_south, .01
  ELSE
        IF cur_wind_south > 0 THEN DEC cur_wind_south, .01
  ENDIF
  IF KEY(KEY_W)
        IF cur_wind_west < MAX_WIND THEN INC cur_wind_west, .01
  ELSE
        IF cur_wind_west > 0 THEN DEC cur_wind_west, .01
  ENDIF
  IF KEY(KEY_E)
    IF cur_wind_east < MAX_WIND THEN INC cur_wind_east, .01
  ELSE
    IF cur_wind_east > 0 THEN DEC cur_wind_east, .01
  ENDIF

  // calculate new camera position
  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
  FOREACH s IN snow[]
    X_MOVEMENT s.x, s.y, s.z
    X_ROTATION angle, 1, 0, 1
    X_DRAWOBJ 1, 0
    INC s.angx, 2
    IF s.angx > 359 THEN s.angx = 0
    INC s.angz, 2
    IF s.angz > 359 THEN s.angz = 0
    // add the wind to the x and z coordinates
    // if a snowflake is out of range, set it to the opposite site
    s.x = s.x + SIN(s.angx) / 2 + cur_wind_west - cur_wind_east
    s.z = s.z + SIN(s.angz) / 2 + cur_wind_north - cur_wind_south
    IF s.x < -MAX_RANGE THEN s.x = MAX_RANGE
    IF s.x > MAX_RANGE THEN s.x = -MAX_RANGE
    IF s.z < -MAX_RANGE THEN s.z = MAX_RANGE
    IF s.z > MAX_RANGE THEN s.z = -MAX_RANGE
    DEC s.y, s.speed
    // if a snowflake reaches the groud, create a new one
    IF s.y < 0
      s.x = RAND(-1000, 1000)
      s.y = 1000
      s.z = RAND(-1000, 1000)
      s.speed = RND(10) / 10 + 1
      s.angx = RND(360)
      s.angz = RND(360)
    ENDIF
  NEXT

  INC angle, 1
  IF angle > 359 THEN angle = 0

  X_MAKE2D
  PRINT "Wind from north:  " + FORMAT$(4, 2, cur_wind_north), 0, 0
  PRINT "Wind from south:  " + FORMAT$(4, 2, cur_wind_south), 0, 20
  PRINT "Wind from west:   " + FORMAT$(4, 2, cur_wind_west), 0, 40
  PRINT "Wind from east:   " + FORMAT$(4, 2, cur_wind_east), 0, 60

  SHOWSCREEN

WEND

// ------------------------------------------------------------- //
// ---  RAND  ---
// ------------------------------------------------------------- //
FUNCTION RAND: minimum, maximum
  RETURN minimum + RND(-minimum + maximum)
ENDFUNCTION // RAND
 
« Last Edit: 2008-Aug-04 by Quentin »

Offline WPShadow

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1667
    • View Profile
    • http://lostrevenant.blogspot.com
Re: Schneegestöber - ein erster zaghafter Versuch
« Reply #26 on: 2008-Aug-04 »
Sieht super aus! Das baue ich gleich ein, wenn ich soweit mal alles hingekommen habe...  :good:
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