DreiDe - 3D Engine

BlitzMax Forums/BlitzMax Programming/DreiDe - 3D Engine

It's a type Vector3D. I put the position of the vertex into a vector.

I use an array because it's more easy to use with matrix.

Here his my type Vector3D. If you have suggestion for a nicer code. I'm interested :-)

Type Vector3D

Field Vector : Float[3]

Method SetVector3D( x : Float, y : Float, z : Float)
Self.vector[0] = x
Self.vector[1] = y
Self.vector[2] = z
End Method

Method GetVectorX:Float()
Return Self.Vector[0]
End Method

Method GetVectorY:Float()
Return Self.Vector[1]
End Method

Method GetVectorZ:Float()
Return Self.Vector[2]
End Method

Method SetVectorX( X : Float)
Self.Vector[0] = X
End Method

Method SetVectorY( Y : Float)
Self.Vector[0] = Y
End Method

Method SetVectorZ( Z : Float)
Self.Vector[0] = Z
End Method

Method Addition:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] + vector.Vector[0]
Self.Vector[1] = Self.Vector[1] + vector.Vector[1]
Self.Vector[2] = Self.Vector[2] + vector.Vector[2]
Return Self
End Method

Method Substraction:Vector3D( vector : Vector3D)
Self.Vector[0] = Self.Vector[0] - vector.Vector[0]
Self.Vector[1] = Self.Vector[1] - vector.Vector[1]
Self.Vector[2] = Self.Vector[2] - vector.Vector[2]
Return Self
End Method

Method Multiply:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] * k
Self.Vector[1] = Self.Vector[1] * k
Self.Vector[2] = Self.Vector[2] * k
Return Self
End Method

Method Divide:Vector3D( k : Float)
Self.Vector[0] = Self.Vector[0] / k
Self.Vector[1] = Self.Vector[1] / k
Self.Vector[2] = Self.Vector[2] / k
Return Self
End Method

Method Equal:Byte( vector : Vector3D)
If (Self=vector) Return True
End Method

Method Negative:Vector3D( )
Self.Vector[0] = -Self.Vector[0]
Self.Vector[1] = -Self.Vector[1]
Self.Vector[2] = -Self.Vector[2]
Return Self
End Method

Method SquareMagnitude:Float()
Local Magnitude : Float
Magnitude = Self.Vector[0]*Self.Vector[0] + Self.Vector[1]*Self.Vector[1] + Self.Vector[2]*Self.Vector[2]
Return Magnitude
End Method

Method Magnitude:Float()
Return (sqr ( Self.SquareMagnitude()))
End Method

Method Normalized:Vector3D()
Return ( Self.divide (Self.Magnitude()))
End Method

Method CrossProduct:Vector3D( Vector1 : Vector3D)
Local result : Vector3D
result = New Vector3D
result.Vector[0] = Self.Vector[1]*Vector1.Vector[2] - Self.Vector[2]*Vector1.Vector[1]
result.Vector[1] = Self.Vector[2]*Vector1.Vector[0] - Self.Vector[0]*Vector1.Vector[2]
result.Vector[2] = Self.Vector[0]*Vector1.Vector[1] - Self.Vector[1]*Vector1.Vector[2]
Return result
End Method

Method DotProduct: Float( Vector1 : Vector3D)
Local result : Float
result = Self.Vector[0]*Vector1.Vector[0] + Self.Vector[1]*Vector1.Vector[1] + Self.Vector[2]*Vector1.Vector[2]
Return result
End Method

End type