[B3D] Masse-Feder-Spielerei (realtime physics)

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Krümel

Betreff: [B3D] Masse-Feder-Spielerei (realtime physics)

BeitragDi, Feb 07, 2006 9:16
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,
hier ein programm das ich vor längerer zeit erstellt habe.
ein simples, interaktives masse-feder-modell in 3d.


Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2

HidePointer

;gravitation
Global grav_x#= 0
Global grav_y#=-0.08
Global grav_z#= 0

;höhe des bodens
Global ground%=-5

Global camera=CreateCamera()
PositionEntity camera,0,1,-24

Global light=CreateLight()
LightColor light,200,200,200

;spiegelnder untergrund
plane=CreatePlane()
PositionEntity plane,0,ground,0
EntityColor plane,20,20,100
EntityAlpha plane,0.85
mirror=CreateMirror(plane)
MoveEntity mirror,0,0.01,0


Type mass
   Field x#,y#,z#
   Field xs#,ys#,zs#
   Field xo#,yo#,zo#
   Field fix%
End Type

Type spring
   Field m1%,m2%
   Field l#
End Type

Type face
   Field surf%
   Field m1%,m2%,m3%,m4%
   Field v1%,v2%,v3%,v4%
End Type

Dim cube(6)
Dim texture(6)

Function add_mass(x#,y#,z#,f%)
   m.mass=New mass
   m\x=x
   m\y=y
   m\z=z
   m\fix=f
   Return Handle(m)
End Function

Function add_spring(m1%,m2%)
   ma1.mass = Object.mass(m1)
   ma2.mass = Object.mass(m2)

   s.spring = New spring
   s\m1 = m1
   s\m2 = m2
   s\l = ( ( ma1\x - ma2\x )^2 + ( ma1\y - ma2\y )^2 + ( ma1\z - ma2\z )^2 )

   Return Handle(s)
End Function

Function add_face(mesh%, m1%,m2%,m3%,m4%)
   ma1.mass = Object.mass(m1)
   ma2.mass = Object.mass(m2)
   ma3.mass = Object.mass(m3)
   ma4.mass = Object.mass(m4)

   f.face=New face
   f\surf=CreateSurface(mesh)
   f\m1=m1
   f\m2=m2
   f\m3=m3
   f\m4=m4
   f\v1=AddVertex (f\surf,ma1\x,ma1\y,ma1\z, 0,0)
   f\v2=AddVertex (f\surf,ma2\x,ma2\y,ma2\z, 1,0)
   f\v3=AddVertex (f\surf,ma3\x,ma3\y,ma3\z, 1,1)
   f\v4=AddVertex (f\surf,ma4\x,ma4\y,ma4\z, 0,1)
   AddTriangle f\surf,f\v1,f\v2,f\v3
   AddTriangle f\surf,f\v1,f\v3,f\v4
End Function

Function update_object()
   ;update federn
   For t=1 To 3
   For s.spring = Each spring
      m1.mass = Object.mass(s\m1)
      m2.mass = Object.mass(s\m2)

      lx# = ( m1\x + m1\xs ) - ( m2\x + m2\xs )
      ly# = ( m1\y + m1\ys ) - ( m2\y + m2\ys )
      lz# = ( m1\z + m1\zs ) - ( m2\z + m2\zs )

      lg# = ( lx * lx + ly * ly + lz * lz )
      ld# =  0.2 * ( s\l - lg )  / lg

      lx = ( lx * ld )
      ly = ( ly * ld )
      lz = ( lz * ld )

      m1\xs = m1\xs + lx
      m1\ys = m1\ys + ly
      m1\zs = m1\zs + lz
      m2\xs = m2\xs - lx
      m2\ys = m2\ys - ly
      m2\zs = m2\zs - lz
   Next
   Next

   ;update massen
   For m.mass = Each mass
      m\xo = m\x
      m\yo = m\y
      m\zo = m\z
      If ( m\y + m\ys ) > ground Then
         m\xs = m\xs + grav_x
         m\ys = m\ys + grav_y
         m\zs = m\zs + grav_z

         If m\fix = False Then
            m\x = m\x + m\xs
            m\y = m\y + m\ys
            m\z = m\z + m\zs
         Else
            m\xs = 0
            m\ys = 0
            m\zs = 0
         EndIf
      Else
         m\y = ground
         m\xs = 0
         m\ys = 0
         m\zs = 0
      EndIf     
   Next

   ;update faces
   For f.face = Each face
      ma1.mass = Object.mass(f\m1)
      ma2.mass = Object.mass(f\m2)
      ma3.mass = Object.mass(f\m3)
      ma4.mass = Object.mass(f\m4)
      VertexCoords f\surf,f\v1,ma1\x,ma1\y,ma1\z
      VertexCoords f\surf,f\v2,ma2\x,ma2\y,ma2\z
      VertexCoords f\surf,f\v3,ma3\x,ma3\y,ma3\z
      VertexCoords f\surf,f\v4,ma4\x,ma4\y,ma4\z         
   Next

   For t=0 To 5
      UpdateNormals cube(t)
   Next 
End Function


Function check_mouse()
   For m.mass=Each mass
      If m\y<=ground Then floor_hit=True:Exit
   Next

   If floor_hit Then
      mx# = MouseXSpeed() * 0.02
   my# = MouseYSpeed() * 0.02
   MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
   If MouseHit(1) Then mz#=15
      m.mass = Last mass
      m\xs = m\xs + mx
      m\zs = m\zs - my
      m\ys = m\ys + mz 
   EndIf
End Function

Function Create_Cube()

   ;massenpunkte festlegen
   m0 = add_mass (-5, 5,-5, False)
   m1 = add_mass ( 5, 5,-5, False)
   m2 = add_mass ( 5,-5,-5, False)
   m3 = add_mass (-5,-5,-5, False)
   m4 = add_mass (-5, 5, 5, False)
   m5 = add_mass ( 5, 5, 5, False)
   m6 = add_mass ( 5,-5, 5, False)
   m7 = add_mass (-5,-5, 5, False)
   mm = add_mass ( 0, 0, 0, False)

   ;massen mit federn verbinden
   add_spring (mm,m0)
   add_spring (mm,m1)
   add_spring (mm,m2)
   add_spring (mm,m3)
   add_spring (mm,m4)
   add_spring (mm,m5)
   add_spring (mm,m6)
   add_spring (mm,m7)
   add_spring (m0,m1)
   add_spring (m1,m2)
   add_spring (m2,m3)
   add_spring (m3,m0)
   add_spring (m4,m5)
   add_spring (m5,m6)
   add_spring (m6,m7)
   add_spring (m7,m4)
   add_spring (m0,m4)
   add_spring (m1,m5)
   add_spring (m2,m6)
   add_spring (m3,m7)
   add_spring (m0,m6)
   add_spring (m1,m7)
   add_spring (m5,m3)
   add_spring (m4,m2)
   add_spring (m0,m2)
   add_spring (m1,m3)
   add_spring (m4,m6)
   add_spring (m5,m7)
   add_spring (m0,m7)
   add_spring (m3,m4)
   add_spring (m1,m6)
   add_spring (m5,m2)
   add_spring (m0,m5)
   add_spring (m1,m4)
   add_spring (m2,m7)
   add_spring (m3,m6)

   ;würfelmesh + texturen erstellen
   SetFont LoadFont("arial",300)

   For t=0 To 5
      cube(t)=CreateMesh()
      EntityFX cube(t),4
      EntityShininess cube(t),0.5
   
      texture(t)=CreateTexture(256,256)
      SetBuffer TextureBuffer(texture(t))
      Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
      ClsColor ColorRed(),ColorGreen(),ColorBlue():Cls
      Color 255-ColorRed(),255-ColorGreen(),255-ColorBlue()
      Text 128,128,t+1,1,1
   Next

   add_face (cube(0),m0,m1,m2,m3)
   add_face (cube(1),m6,m5,m4,m7)
   add_face (cube(2),m5,m6,m2,m1)
   add_face (cube(3),m0,m3,m7,m4)
   add_face (cube(4),m4,m5,m1,m0)
   add_face (cube(5),m3,m2,m6,m7)

   For t=0 To 5
      EntityTexture cube(t),texture(t)
   Next
End Function

create_cube()

SetBuffer BackBuffer()

Color 255,255,255
SetFont LoadFont("arial",20)

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

While Not KeyHit(1)

  update_object()
  check_mouse()

  Delay(15)

  RenderWorld()
  Text 0,0,"Maus bewegen, Mausknopf drücken"
  Flip
Wend

End


~Editiert~ Habe dem Titel einen Hinweis verpasst, dass das ein 3D Code ist. MfG D2006
 

#Reaper

Newsposter

BeitragDi, Feb 07, 2006 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Huuuiii! Shocked
Is ja mal fett!
Respekt! Very Happy
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Lord_Vader

BeitragDi, Feb 07, 2006 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Sau geil!
 

TACITUS

BeitragDi, Feb 07, 2006 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Holy shit is das geil! Shocked Shocked Shocked
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Feb 07, 2006 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir läufts nich... Sad
(oder isses normal, das mein Rechner nicht mehr reagiert, wenn ich F5 drück...(?))
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

Schnuff

BeitragDi, Feb 07, 2006 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Was haste fürn rechner? haste darauf Win98 oder Dos? Twisted Evil
2. Welche BlitzVersion: 0.1?
Bitte nicht zu ernst nehmen! Confused
ich finde dass toll!(das mit der Schwerkraft,...)
Programmers dont die. They gosub without return...

Hagbard

BeitragDi, Feb 07, 2006 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
klein aber oho...als ich diese Menge Code sah und dann das Ergebnis war ich sehr positiv überrasht...und gleich zur persönlichen Codesammlung hinzugefügt...GEILES TEIL!!!

mfg
 

TACITUS

BeitragMi, Feb 08, 2006 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, also auf meinem PC läuft es perfekt Twisted Evil Twisted Evil *nase_hoch*

PS: Guckst du also in Signatur Twisted Evil
AMD Athlon 64 X2 4200+ Dual Core Prozessor _ 1024 MB Dual Channel DDR RAM _ GeForce 7800 GT PCI Express 256 MB GDDR3 RAM _ Festplatte 410 GB _ DirectX 9.0c
User posted image

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Feb 08, 2006 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Als ob mein Rechner sooo schlecht ist!
Ist warscheinlich besser als der von vielen hier Razz

Ne, läuft aber wirklich nich Sad
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Lord_Vader

BeitragMi, Feb 08, 2006 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Der rechner nicht. Aber wer weis wie sauber dein system is Wink
Bei mir läufts. Sogar in der schule an nem 1000 Mhz PC mit onboardgrafik...
 

Krümel

BeitragMi, Feb 08, 2006 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
so rechenintensiv ist das programm eigentlich nicht.
wenns nicht läuft liegts bestimmt an den grafikeinstellungen.
versuchs mal mit anderen graphics3d-einstellungen.

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Feb 08, 2006 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werds dann noch ma in verschiedenben Auflösungen, und auch im Vollbild testen, aber bis jetzt hatte ich mit 800*600 noch nie Probleme...Sad

EDIT:
Mit
Code: [AUSKLAPPEN]
Graphics3D 1280,1024,32,1

läufts.....
Naja, is auf alle Fälle saugeil^^, und das is ja die Hauptsache!
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

ke^kx

BeitragMi, Feb 08, 2006 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, ist wirklich cool! Muss ich mir gleichmal angucken, wie du das gemacht hast^^

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Fuchsi

BeitragMi, Feb 08, 2006 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Worte ............................................................ !
Doch es muss einfach raus:

GEIL OHNE ENDE!!!!!!!! Very Happy
 

Krümel

BeitragMi, Feb 08, 2006 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für all das lob! Razz
bin grad dabei mehrere würfel+kollision
zu programmieren. wenn das läuft zeig ichs mal...
 

BlackError

BeitragSa, März 18, 2006 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow shit. ist das genial. Könnt ich stundenlang machen. Fast lustiger als jedes Spiel.
Respekt Razz

Ich finds gut, wie elastisch der Würfel Wirkt
 

$tankY

BeitragSo, März 19, 2006 12:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Will auch ma sehn *heul* hab nur b+ Crying or Very sad

Markus2

BeitragSo, März 19, 2006 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt Super!!! Shocked
Damit könnte man nen geiles Würfelspiel machen Cool

Sebastian

BeitragSo, März 19, 2006 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
*boar*
*staun*
Cooles Teil Exclamation
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Best-Möchtegern

BeitragSo, März 19, 2006 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht echt geil aus
Die Idee macht das Spiel.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group