Code archives/3D Graphics - Mesh/Fish!

This code has been declared by its author to be Public Domain code.

Download source code

Fish! by Ion2009
Generates "fishes" with a little variation
;********************************
; Fishes! by Ion
; Copyright (c) 2009 E.Sandberg (Ion)
; This code is free to the public domain
;
;********************************

;Funny variables
Type TFish
	Field Entity, Yaw#, Speed#
End Type
Global fishes.TFish[999]

;Initialize
Graphics3D 1024, 768, 16, 2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
WireFrame False
HidePointer

;A little light
light = CreateLight()

;Set up the camera
camera = CreateCamera()
campiv = CreatePivot()
EntityParent camera, campiv
PositionEntity camera, 0, 50, -50
RotateEntity camera, 45, 0, 0
CameraClsColor camera, 64, 64, 255
CameraFogMode camera, 1
CameraFogColor camera, 64, 64, 255
CameraFogRange camera, 10, 100

;Create 100 fishes!
For i = 0 To 99
	f.TFish = New TFish
	f\Entity = CreateFish()
	f\Yaw = Rnd(-1, 1)
	f\Speed = Rnd(0.1, 0.5)
	PositionEntity f\Entity, Rand(-50, 50), Rand(-50, 50), Rand(-50, 50)
	RotateEntity f\Entity, 0, Rand(0, 360), Rand(-45, 45)
	fishes[i] = f
Next

;Gameloop
While Not KeyHit(1)
	TurnEntity campiv, 0, -MouseXSpeed(), 0
	For i = 0 To 99
		AnimateFish(fishes[i]\Entity, an + 90*i)
		MoveEntity fishes[i]\Entity, fishes[i]\Speed, 0, 0
		TurnEntity fishes[i]\Entity, 0, fishes[i]\Yaw, 0
	Next
	
	an = an + Rnd(10, 20)
	an = an Mod 360
	
	MoveMouse 320, 240
	RenderWorld
	Flip
Wend

;Create a fish!
Function CreateFish()
	mesh = CreateMesh()
	surf = CreateSurface(mesh)
	
	v0 = AddVertex(surf, 1, 0, 0)
	v1 = AddVertex(surf, 0, -0.5, 0)
	v2 = AddVertex(surf, 0, 0.5, 0)
	v3 = AddVertex(surf, -1, 0, -0.5)
	v4 = AddVertex(surf, -1, 0, 0.5)
	v5 = AddVertex(surf, -2, 0.5, 0)
	v6 = AddVertex(surf, Rand(-2.5, -1), Rand(1, 1.2), 0)
	v7 = AddVertex(surf, -2, -0.5, 0)
	v8 = AddVertex(surf, -3, -0.8, 0)
	v9 = AddVertex(surf, -3.5, -0.5, 0)
	v10 = AddVertex(surf, -3.5, 1.5, 0)
	v11 = AddVertex(surf, -1, Rand(0.5, -1), 0)
	
	;Head
	AddTriangle surf, v3, v2, v0
	AddTriangle surf, v0, v2, v4
	AddTriangle surf, v1, v3, v0
	AddTriangle surf, v0, v4, v1
	AddTriangle surf, v3, v5, v2
	AddTriangle surf, v2, v5, v4

	;Fin
	AddTriangle surf, v5, v6, v2
	AddTriangle surf, v2, v6, v5
	
	;Body
	AddTriangle surf, v3, v7, v5
	AddTriangle surf, v5, v7, v4
	AddTriangle surf, v3, v1, v7
	AddTriangle surf, v7, v1, v4
	
	;Back-fin
	AddTriangle surf, v7, v10, v5
	AddTriangle surf, v5, v10, v7
	AddTriangle surf, v7, v9, v10
	AddTriangle surf, v10, v9, v7
	AddTriangle surf, v8, v9, v7
	AddTriangle surf, v7, v9, v8
	
	;Under-fin
	AddTriangle surf, v11, v7, v1
	AddTriangle surf, v1, v7, v11

	UpdateNormals mesh
	
	;Color fish!
	For i = 0 To 10
		VertexColor surf, i, Rnd(0, 255), Rnd(0, 255), Rnd(0, 255)
	Next
	EntityFX mesh, 2
	Return mesh
End Function

;Stops a fish's animation!
Function StopFish(mesh)
	surf = GetSurface(mesh, 1)
	VertexCoords surf, 10, VertexX(surf, 10), VertexY(surf, 10), 0
	VertexCoords surf, 9, VertexX(surf, 9), VertexY(surf, 9), 0
	VertexCoords surf, 8, VertexX(surf, 8), VertexY(surf, 8), 0
	VertexCoords surf, 6, VertexX(surf, 6), VertexY(surf, 6), 0
	VertexCoords surf, 5, VertexX(surf, 5), VertexY(surf, 5), 0
	VertexCoords surf, 7, VertexX(surf, 7), VertexY(surf, 7), 0
	VertexCoords surf, 11, VertexX(surf, 11), VertexY(surf, 11), 0
	
	VertexCoords surf, 3, VertexX(surf, 3), VertexY(surf, 3), -0.5
	VertexCoords surf, 4, VertexX(surf, 4), VertexY(surf, 4), 0.5
	VertexCoords surf, 2, VertexX(surf, 2), VertexY(surf, 2), 0
	VertexCoords surf, 1, VertexX(surf, 1), VertexY(surf, 1), 0
End Function

;Animate a fish!
Function AnimateFish(mesh, an#)
	surf = GetSurface(mesh, 1)
	VertexCoords surf, 10, VertexX(surf, 10), VertexY(surf, 10), Sin(an)*0.5
	VertexCoords surf, 9, VertexX(surf, 9), VertexY(surf, 9), Sin(an)*0.5
	VertexCoords surf, 8, VertexX(surf, 8), VertexY(surf, 8), Sin(an)*0.5
	VertexCoords surf, 6, VertexX(surf, 6), VertexY(surf, 6), Cos(an)*-0.2
	VertexCoords surf, 5, VertexX(surf, 5), VertexY(surf, 5), Cos(an)*-0.2
	VertexCoords surf, 7, VertexX(surf, 7), VertexY(surf, 7), Cos(an)*-0.2
	VertexCoords surf, 11, VertexX(surf, 11), VertexY(surf, 11), Cos(an)*-0.2
		
	VertexCoords surf, 3, VertexX(surf, 3), VertexY(surf, 3), -0.5+Cos(an)*-0.1
	VertexCoords surf, 4, VertexX(surf, 4), VertexY(surf, 4), 0.5+Cos(an)*-0.1
	VertexCoords surf, 2, VertexX(surf, 2), VertexY(surf, 2), Sin(an)*-0.1
	VertexCoords surf, 1, VertexX(surf, 1), VertexY(surf, 1), Sin(an)*-0.1
End Function

Comments

Guy Fawkes2009
Ur fish code PAWNS! can u edit it so if the fishes "hear" or "see" the camera, they get scared and swim away? that would be SO COOL! =D


Nate the Great2009
cool lol, I wish my neural network code was in b3d so I could give em some brains lol


Stevie G2009
Excellent!


Code Archives Forum