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

KrümelBetreff: [B3D] Masse-Feder-Spielerei (realtime physics) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huuuiii! ![]() Is ja mal fett! Respekt! ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sau geil! | ||
TACITUS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Holy shit is das geil! ![]() ![]() ![]() |
||
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 |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir läufts nich... ![]() (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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. Was haste fürn rechner? haste darauf Win98 oder Dos? ![]() 2. Welche BlitzVersion: 0.1? Bitte nicht zu ernst nehmen! ![]() ich finde dass toll!(das mit der Schwerkraft,...) |
||
Programmers dont die. They gosub without return... |
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, also auf meinem PC läuft es perfekt ![]() ![]() PS: Guckst du also in Signatur ![]() |
||
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 |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als ob mein Rechner sooo schlecht ist!
Ist warscheinlich besser als der von vielen hier ![]() Ne, läuft aber wirklich nich ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der rechner nicht. Aber wer weis wie sauber dein system is ![]() Bei mir läufts. Sogar in der schule an nem 1000 Mhz PC mit onboardgrafik... |
||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so rechenintensiv ist das programm eigentlich nicht.
wenns nicht läuft liegts bestimmt an den grafikeinstellungen. versuchs mal mit anderen graphics3d-einstellungen. |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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...![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Worte ............................................................ !
Doch es muss einfach raus: GEIL OHNE ENDE!!!!!!!! ![]() |
||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für all das lob! ![]() bin grad dabei mehrere würfel+kollision zu programmieren. wenn das läuft zeig ichs mal... |
||
BlackError |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wow shit. ist das genial. Könnt ich stundenlang machen. Fast lustiger als jedes Spiel.
Respekt ![]() Ich finds gut, wie elastisch der Würfel Wirkt |
||
$tankY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Will auch ma sehn *heul* hab nur b+ ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Echt Super!!! ![]() Damit könnte man nen geiles Würfelspiel machen ![]() |
||
![]() |
Sebastian |
![]() Antworten mit Zitat ![]() |
---|---|---|
*boar*
*staun* Cooles Teil ![]() |
||
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf ! |
![]() |
Best-Möchtegern |
![]() Antworten mit Zitat ![]() |
---|---|---|
sieht echt geil aus | ||
Die Idee macht das Spiel. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group