Seite 1 von 1

Suche Code zur Simulation von Fischschwärmen

Verfasst: 19.12.2009 23:50
von mpz
Hallo Leute,

ich spiele gerade mit meinen Pseudo-fish Meshs rum und wollte fragen ob jemand einen guten Code für Simulationen von Fisch-Schwärme etc. kennt? Im Moment wuseln meine Fische etwas sinnlos in der Gegend rum und ich wollte Ihnen etwas Intelligenz einhauchen...

Man kann jedem Fisch eine Position, Geschwindigkeit und auch Achsneigung geben, fehlt nur noch die Intelligenz. :lol:

Gruß Michael



Zum testen unter Windows:
http://em.q-soft.ch/files/get/-wXiPrUIPX/fishes.exe

P.S. Jetzt mit Musik, damit soll ja alles besser gehen...


MP3D Code, wens interessiert...

Code: Alles auswählen


;-
;- ProgrammStart
;////////////////////////////////////////////////////////////////
;//
;// Project Title: MP Fishes!
;// File Title: MP_Fishes.pb
;// Created On: 19.12.2009
;// Updated On: 
;// Author: Michael Paulwitz
;// OS:Windows
;// 
;// pseudo-fish meshs 
;// 
;////////////////////////////////////////////////////////////////

;Funny variables

Structure TFish
  
  Entity.i
  Yaw.f
  Speed.f
  
EndStructure

;Create a fish!
Procedure CreateFish()
	mesh = MP_CreateMesh()
	
	v0 = MP_AddVertex(mesh, 1, 0, 0,0,0)
	v1 = MP_AddVertex(mesh, 0, -0.5, 0,0,0)
	v2 = MP_AddVertex(mesh, 0, 0.5, 0,0,0)
	v3 = MP_AddVertex(mesh, -1, 0, -0.5,0,0)
	v4 = MP_AddVertex(mesh, -1, 0, 0.5,0,0)
	v5 = MP_AddVertex(mesh, -2, 0.5, 0,0,0)
	v6 = MP_AddVertex(mesh, MP_RandomFloat(-2.5, -1), MP_RandomFloat(1, 1.2), 0,0,0)
	v7 = MP_AddVertex(mesh, -2, -0.5, 0,0,0)
	v8 = MP_AddVertex(mesh, -3, -0.8, 0,0,0)
	v9 = MP_AddVertex(mesh, -3.5, -0.5, 0,0,0)
	v10 = MP_AddVertex(mesh, -3.5, 1.5, 0,0,0)
	v11 = MP_AddVertex(mesh, -1, MP_RandomFloat(0.5, -1), 0,0,0)
	
	;Head
	MP_AddTriangle (mesh, v3, v2, v0)
	MP_AddTriangle (mesh, v0, v2, v4)
	MP_AddTriangle (mesh, v1, v3, v0)
	MP_AddTriangle (mesh, v0, v4, v1)
	MP_AddTriangle (mesh, v3, v5, v2)
	MP_AddTriangle (mesh, v2, v5, v4)

	;Fin
	MP_AddTriangle (mesh, v5, v6, v2)
	MP_AddTriangle (mesh, v2, v6, v5)
	
	;Body
	MP_AddTriangle (mesh, v3, v7, v5)
	MP_AddTriangle (mesh, v5, v7, v4)
	MP_AddTriangle (mesh, v3, v1, v7)
	MP_AddTriangle (mesh, v7, v1, v4)
	
	;Back-fin
	MP_AddTriangle (mesh, v7, v10, v5)
	MP_AddTriangle (mesh, v5, v10, v7)
	MP_AddTriangle (mesh, v7, v9, v10)
	MP_AddTriangle (mesh, v10,v9, v7)
	MP_AddTriangle (mesh, v8, v9, v7)
	MP_AddTriangle (mesh, v7, v9, v8)
	
	;Under-fin
	MP_AddTriangle (mesh, v11, v7, v1)
	MP_AddTriangle (mesh, v1, v7, v11)

  MP_EntitySetNormals (Mesh)
	
	;Color fish!
	For i = 0 To 10
	    MP_VertexSetColor(mesh, i ,RGB(MP_RandomInt(0, 255),MP_RandomInt(0, 255),MP_RandomInt(0, 255)))
	Next
	
	ProcedureReturn mesh
EndProcedure


;Animate a fish!
Procedure AnimateFish(mesh, an.f)

	MP_VertexSetZ(mesh, 10, Sin(an*0.017453)*0.5)
	MP_VertexSetZ(mesh, 9, Sin(an*0.017453)*0.5)
	MP_VertexSetZ(mesh, 8, Sin(an*0.017453)*0.5)
	MP_VertexSetZ(mesh, 6, Cos(an*0.017453)*-0.2)
	MP_VertexSetZ(mesh, 5, Cos(an*0.017453)*-0.2)
	MP_VertexSetZ(mesh, 7, Cos(an*0.017453)*-0.2)
	MP_VertexSetZ(mesh, 11, Cos(an*0.017453)*-0.2)
		
	MP_VertexSetZ(mesh, 3, -0.5+Cos(an*0.017453)*-0.1)
	MP_VertexSetZ(mesh, 4, 0.5+Cos(an*0.017453)*-0.1)
	MP_VertexSetZ(mesh, 2, Sin(an*0.017453)*-0.1)
	MP_VertexSetZ(mesh, 1, Sin(an*0.017453)*-0.1)

EndProcedure

Dim fishes.TFish(119)

MP_Graphics3D (800,600,0,2) ; Erstelle ein WindowsFenster #Window = 0
SetWindowTitle(0, "Fishes! with Purbasic and MP3D Engine") 

camera=MP_CreateCamera() ; Kamera erstellen
MP_CameraSetPerspective(camera, 90) 
MP_PositionEntity(camera,0,50,-50)
MP_RotateEntity (camera, 45, 0, 0)

light=MP_CreateLight(1)

MP_AmbientSetLight (RGB(64,64,255))
MP_Fog (RGB(64,64,255),10,100)

;Create 120 fishes!
For i = 0 To 119
  fishes(i)\Entity = CreateFish()
	fishes(i)\Yaw = MP_RandomFloat(-1, 1)
	fishes(i)\Speed = MP_RandomFloat(0.1, 0.5)
	MP_PositionEntity (fishes(i)\Entity, MP_RandomInt(-50, 50), MP_RandomInt(-50, 50), MP_RandomInt(-50, 50))
	MP_RotateEntity (fishes(i)\Entity, 0, MP_RandomInt(0, 360), MP_RandomInt(-45, 45))
Next


While Not MP_KeyDown(#PB_Key_Escape) And Not MP_WindowEvent() = #PB_Event_CloseWindow; Esc or close

    For i = 0 To 119
		  AnimateFish(fishes(i)\Entity, an + 90*i)
		  MP_MoveEntity( fishes(i)\Entity, fishes(i)\Speed, 0, 0)
		  MP_TurnEntity( fishes(i)\Entity, 0,0,fishes(i)\Yaw)
	  Next
	
	  an = an + MP_RandomFloat(10, 20)
	  an = an % 360

    MP_RenderWorld () ; Hier gehts los
    MP_Flip () ; 

Wend


Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 22.12.2009 13:53
von dige
Unter Win7 passiert gar nix... Programm scheint nicht zu starten

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 22.12.2009 15:07
von mpz
Hi Dige,

leider habe ich noch kein WIN7 installiert. Man benötigt auf jedem Fall DX9. Hast Du WIn7 64Bit oder 32Bit? Hat noch jemand anderes das mit WIN7 getestet?

Gruß Michael

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 22.12.2009 17:50
von mpz
Hi Dige,

es kann sein das noch eine DX9 Bibliothek fehlt. Versuche mal bitte die folgende Datei in da gleiche Verzeichnis zu kopieren (d3dx9_38.dll):
http://www.dll-files.com/dllindex/dll-f ... l?d3dx9_38

Gruß Michael

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 22.12.2009 18:03
von Christian+
Also bei mir unter Windows 7 64 Bit läuft es.
mfg Christian+

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 29.12.2009 12:26
von Rokur
Kommt drauf an wie komplex deine Simulation werden soll. Ich würds jetzt spontan irgendwie so angehen:

Zuerst einen "Leitfisch" erstellen, der schwimmt voraus und den bewegst du um deinen Schwarm zu lenken. Dieser fungiert als eine Art Knoten in einem Baum von Fischen, alle weiteren Fische sind Blätter oder Unterknoten von diesem Leitfisch. Jeder Fisch hält einen gewissen Abstand zu den anderen, folgt aber seinem Knotenfisch, wenn sich dieser bewegt.

Wenn du jetzt den Leitfisch bewegst, dann folgen alle anderen. Das Erscheinungsbild lässt sich dann evtl. anpassen, je nachdem ob die Fische den direkten Weg zu ihrem Knotenfisch nehmen, oder wie eine Kette von Anhängern (vgl. Snake) dessen Weg folgen, usw.

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 29.12.2009 15:45
von jojo1541
Boids könnte dir helfen. :wink:

Re: Suche Code zur Simulation von Fischschwärmen

Verfasst: 30.12.2009 19:09
von PMV
mpz hat geschrieben:Man benötigt auf jedem Fall DX9.
Und DX9 ist bei Vista und Win7 nicht automatisch installiert.
Hier wird (zumindest bei mir) nur das aktuellste DX geladen,
und die sind nicht mit DX9 kompatibel. :wink:
http://www.chip.de/downloads/DirectX_13002926.html
Nach dem ich DX9 installiert hab, funktionierts hier auch auf Win7.

MFG PMV