Suche Code zur Simulation von Fischschwärmen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Suche Code zur Simulation von Fischschwärmen

Beitrag 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

Working on :lol: - LibSGD - MP3D Engine - 8)
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag von dige »

Unter Win7 passiert gar nix... Programm scheint nicht zu starten
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag 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
Working on :lol: - LibSGD - MP3D Engine - 8)
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag 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
Working on :lol: - LibSGD - MP3D Engine - 8)
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag von Christian+ »

Also bei mir unter Windows 7 64 Bit läuft es.
mfg Christian+
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag 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.
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag von jojo1541 »

Boids könnte dir helfen. :wink:
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Suche Code zur Simulation von Fischschwärmen

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten