my camera size and position seems compatible with my draw positions or ConvertPositon3DTo2D() function...
see my entire code:
Code:
Option Explicit

'Get Key state:
Const KEY_DOWN As Integer = &H8000
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As KeyCodeConstants) As Integer

'GDI pens and brushes:
Private Declare Function SelectObject Lib "GDI32.dll" ( _
ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function GetDCBrushColor Lib "GDI32.dll" ( _
ByVal hDC As Long) As Long
Private Declare Function SetDCBrushColor Lib "GDI32.dll" ( _
ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function CreateSolidBrush Lib "GDI32.dll" (ByVal crColor As Long) As Long

'Draw array Vertices:
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function Polygon Lib "gdi32" (ByVal hDC As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long

Private Enum Coordenates
    None
    Z
    X
    Y
End Enum

Private Type Position3D
    X As Double
    Y As Double
    Z As Double
End Type

Private Type Angle3D
    X As Double
    Y As Double
    Z As Double
    RotationPosition3D As Position3D
End Type

Private Type Size3D
    Width As Double
    Height As Double
    ZDepth As Double
    distance As Double
End Type

Private Type Player
    Position As Position3D
    Movement As Position3D
    Size As Size3D
    Angle As Angle3D
    MoveCoordenates As Coordenates
End Type

Private Type Camera
    Position As Position3D
    Size As Size3D
End Type

Private Const Pi As Double = 3.14159265358979
Dim Angletest As Angle3D

Dim Player1 As Player
Dim camera1 As Camera

Private Function IsKeyDown(ByVal nVirtKey As KeyCodeConstants) As Boolean
    If GetKeyState(nVirtKey) And KEY_DOWN Then
        IsKeyDown = True
    Else
        IsKeyDown = False
    End If
End Function

Private Sub LetPoint3dArray(la() As Position3D, ParamArray va() As Variant)
    ' No error trapping, so use with caution.
    Dim i       As Long
    Dim j       As Long
    Dim k      As Long

    k = (UBound(va) + 1) \ 3 - 1
    ReDim la(k)
    For i = 0& To k
        la(i).X = va(j): j = j + 1
        la(i).Y = va(j): j = j + 1
        la(i).Z = va(j): j = j + 1
    Next
End Sub

Private Sub FillPosition2D(Position As POINTAPI, X As Long, Y As Long)
    Position.X = X
    Position.Y = Y
End Sub

Private Sub FillPosition3D(Position As Position3D, X As Double, Y As Double, Z As Double)
    Position.X = X
    Position.Y = Y
    Position.Z = Z
End Sub

Private Sub FillSize3D(Size As Size3D, Width As Double, Height As Double, ZDepth As Double)
    Size.Width = Width
    Size.Height = Height
    Size.ZDepth = ZDepth
End Sub

Private Function GetLinePosition(Origin As Position3D, Destiny As Position3D, ActualPosition As Double, Optional WhatCoordenate As Coordenates = Z) As Position3D
    
    'Getting the AB vector(B-A or Destiny-Origin):
    Dim AB As Position3D
    AB.X = Destiny.X - Origin.X
    AB.Y = Destiny.Y - Origin.Y
    AB.Z = Destiny.Z - Origin.Z
    
    Dim NewPosition As Position3D
    Dim T As Double
    'depending on player movement(for get 1 coordenate and the T), we get the point coordenate:
    If (WhatCoordenate = X) Then
        'P.x = O.x + t*AB.x
        't = (P.x - O.x) / AB.x
        If (AB.X = 0) Then
            T = 0
        Else
            T = (ActualPosition - Origin.X) / AB.X
        End If
        NewPosition.X = ActualPosition
        NewPosition.Y = Origin.Y + AB.Y * T
        NewPosition.Z = Origin.Z + AB.Z * T
        
    ElseIf (WhatCoordenate = Y) Then
        'P.y = O.y + t*AB.y
        't = (P.y - O.y) / AB.y
        
        If (AB.Y = 0) Then
            T = 0
        Else
            T = (ActualPosition - Origin.Y) / AB.Y
        End If
        NewPosition.Y = ActualPosition
        NewPosition.X = Origin.X + AB.X * T
        NewPosition.Z = Origin.Z + AB.Z * T
    ElseIf (WhatCoordenate = Z) Then
        'P.z = O.z + t*AB.z
        't = (P.z - O.z) / AB.z
        
        If (AB.Z = 0) Then
            T = 0
        Else
            T = (ActualPosition - Origin.Z) / AB.Z
        End If
        NewPosition.Z = ActualPosition
        NewPosition.X = Origin.X + AB.X * T
        NewPosition.Y = Origin.Y + AB.Y * T
    End If
    GetLinePosition = NewPosition
End Function


Private Function ConvertPositon3DTo2D(Position As Position3D, World3DSize As Size3D) As POINTAPI
    Dim ConvertedPosition As POINTAPI
    Dim PosZZDepth As Long
    
    PosZZDepth = Position.Z + World3DSize.distance
    
    If (PosZZDepth = 0) Then PosZZDepth = 1 'avoiding division by zero
    Dim Width As Double
    Dim Height As Double
    Width = World3DSize.Width / 2
    If (Width = 0) Then Width = 0
    Height = World3DSize.Height / 2
    If (Height = 0) Then Height = 0
    ConvertedPosition.X = (Position.X * World3DSize.distance / PosZZDepth) + Width
    ConvertedPosition.Y = (Position.Y * World3DSize.distance / PosZZDepth) + Height
    ConvertPositon3DTo2D = ConvertedPosition
End Function

Private Function IsOnCamera(VerticePosition As Position3D, CameraPosition As Position3D, CameraSize As Size3D) As Boolean
    If (((VerticePosition.Z) >= CameraPosition.Z) And ((VerticePosition.Z) <= (CameraPosition.Z + CameraSize.ZDepth)) _
    And (((VerticePosition.Y) >= CameraPosition.Y) And ((VerticePosition.Y) <= (CameraPosition.Y + CameraSize.Height))) _
    And (((VerticePosition.X) >= CameraPosition.X) And ((VerticePosition.X) <= (CameraPosition.X + CameraSize.Width)))) Then
        IsOnCamera = True
    Else
        IsOnCamera = False
    End If
End Function
    
Private Function IsCollision3D(ObjectPosition1 As Position3D, ObjectSize1 As Size3D, ObjectPosition2 As Position3D, ObjectSize2 As Size3D) As Boolean
  IsCollision3D = ((ObjectPosition1.X <= (ObjectPosition2.X + ObjectSize2.Width)) And ((ObjectPosition1.X + ObjectSize1.Width) >= ObjectPosition2.X)) And ((ObjectPosition1.Y <= (ObjectPosition2.Y + ObjectSize2.Height)) And ((ObjectPosition1.Y + ObjectSize1.Height) >= ObjectPosition2.Y)) And ((ObjectPosition1.Z <= (ObjectPosition2.Z + ObjectSize2.ZDepth)) And ((ObjectPosition1.Z + ObjectSize1.ZDepth) >= ObjectPosition2.Z))
End Function

Private Function ConvertDegreesToRadians(Rotation As Angle3D) As Angle3D
    Dim deg2Rad As Double
    deg2Rad = Pi / 180
    
    ConvertDegreesToRadians.X = Rotation.X * deg2Rad
    ConvertDegreesToRadians.Y = Rotation.Y * deg2Rad
    ConvertDegreesToRadians.Z = Rotation.Z * deg2Rad
End Function

Private Function Rotate(Position As Position3D, Rotation As Angle3D, PositionRotated As Position3D) As Position3D
    Dim ConvertedPosition As Position3D
    Dim RotationInRads As Angle3D
    
    'Convert degrees to Radians
    'Rotation works on Radians
    RotationInRads = ConvertDegreesToRadians(Rotation)
    
    'Convert the actual position to zero, using the rotation position:
    ConvertedPosition = Position
    ConvertedPosition.X = Position.X - PositionRotated.X
    ConvertedPosition.Y = -(PositionRotated.Y - Position.Y)  'reversed because Y increments down
    ConvertedPosition.Z = Position.Z - PositionRotated.Z
    
    
    'Rotate the position, but the Z axis must be the 1st:
    Dim T As Position3D
    
    'Z axis  (Roll)
    T = ConvertedPosition
        ConvertedPosition.X = T.X * Cos(RotationInRads.Z) - T.Y * Sin(RotationInRads.Z)
        ConvertedPosition.Y = T.X * Sin(RotationInRads.Z) + T.Y * Cos(RotationInRads.Z)
    
    'X axis  (Pitch)
    T = ConvertedPosition
        ConvertedPosition.Y = T.Y * Cos(RotationInRads.X) - T.Z * Sin(RotationInRads.X)
        ConvertedPosition.Z = T.Y * Sin(RotationInRads.X) + T.Z * Cos(RotationInRads.X)
  
    'Y axis  (Yaw)
    T = ConvertedPosition
        ConvertedPosition.X = T.Z * Sin(RotationInRads.Y) + T.X * Cos(RotationInRads.Y)
        ConvertedPosition.Z = T.Z * Cos(RotationInRads.Y) - T.X * Sin(RotationInRads.Y)
        
        'Convert to the rotated original position:
        ConvertedPosition.X = ConvertedPosition.X + PositionRotated.X
        ConvertedPosition.Y = ConvertedPosition.Y + PositionRotated.Y
        ConvertedPosition.Z = ConvertedPosition.Z + PositionRotated.Z
        
        'Convert to Camera Coordinates\Position:
        'ConvertedPosition.X = ConvertedPosition.X - Player1.Position.X
        'ConvertedPosition.Y = ConvertedPosition.Y - Player1.Position.Y
        'ConvertedPosition.Z = ConvertedPosition.Z - Player1.Position.Z
        
    Rotate = ConvertedPosition
End Function

Private Sub DrawCube(Position As Position3D, Size As Size3D, Rotation As Angle3D, WorldSize As Size3D)
    Dim Vertices(11) As POINTAPI
    
    Dim NewPoint As POINTAPI
    
    Dim NewPosition3D As Position3D
    Dim sized As Size3D
    Dim RotatedPosition As Position3D
    Static FixedPoint0(4) As Position3D
    
    'FillPosition3D RotatedPosition, Position.X + Size.Width / 2, Position.Y + Size.Height / 2, Position.Z + Size.ZDepth / 2
    With Player1.Position
       FillPosition3D RotatedPosition, .X, .Y, .Z  'Camera Position
    End With
    If (IsOnCamera(NewPosition3D, camera1.Position, camera1.Size) = False) Then Exit Sub
    
    'Floor:
    
    
    'Vector1
    FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(0) = NewPoint
    
    'Vector2
    FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(1) = NewPoint
    
    'Vector3
    'FillPosition3D NewPosition3D, 105000, 0, 224000
    FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(2) = NewPoint
    
    'Vector4
    'FillPosition3D NewPosition3D, 105000, 0, 204000
    FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(3) = NewPoint
    
    
    'Roof:
    'Vector1
    'FillPosition3D NewPosition3D, 95000, -6000, 204000
    FillPosition3D NewPosition3D, Position.X, Position.Y + Size.Height, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(4) = NewPoint
    
    'Vector2
    'FillPosition3D NewPosition3D, 95000, -6000, 224000
    FillPosition3D NewPosition3D, Position.X, Position.Y + Size.Height, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(5) = NewPoint
    
    'Vector3
    'FillPosition3D NewPosition3D, 105000, -6000, 224000
    FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y + Size.Height, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(6) = NewPoint
    
    'Vector4
    'FillPosition3D NewPosition3D, 105000, -6000, 204000
    FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y + Size.Height, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(7) = NewPoint
    
    'Left:
    'Vector1
    'FillPosition3D NewPosition3D, 95000, 0, 204000
    FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(8) = NewPoint
    
    'Vector2
    'FillPosition3D NewPosition3D, 95000, -6000, 204000
    FillPosition3D NewPosition3D, Position.X, Position.Y + Size.Height, Position.Z
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(9) = NewPoint
    
    'Vector3
    'FillPosition3D NewPosition3D, 95000, -6000, 224000
    FillPosition3D NewPosition3D, Position.X, Position.Y + Size.Height, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(10) = NewPoint
    
    'Vector4
    'FillPosition3D NewPosition3D, 95000, 0, 224000
    FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z + Size.ZDepth
    NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition)
    NewPoint = ConvertPositon3DTo2D(NewPosition3D, WorldSize)
    Vertices(11) = NewPoint
    
    'FillStyle = vbFSSolid
    
    'FillColor = vbRed
    'If (IsCollisionVertice3D(NewPosition3D, Player1.Position, World3D) = True) Then
        Polygon Me.hDC, Vertices(0), 4
    'End If
      
    FillColor = vbBlue
    'If (IsCollisionVertice3D(NewPosition3D, Player1.Position, World3D) = True) Then
        Polygon Me.hDC, Vertices(4), 4
    'End If

    FillColor = vbGreen
    'If (IsCollisionVertice3D(NewPosition3D, Player1.Position, World3D) = True) Then
        Polygon Me.hDC, Vertices(8), 4
    'End If
End Sub

Private Sub DrawLine(Origin As Position3D, Destiny As Position3D, Rotation As Angle3D, WorldSize As Size3D)
    Dim Points(2) As POINTAPI
    Dim NewPosition3D(2) As Position3D
    Dim RotatedPosition As Position3D

    With Player1.Position
       FillPosition3D RotatedPosition, .X, .Y, .Z  'rotate using camera Position
    End With
    
    'Line:
    'Calculate Vector1:
    FillPosition3D NewPosition3D(0), Origin.X, Origin.Y, Origin.Z
    NewPosition3D(0) = Rotate(NewPosition3D(0), Rotation, RotatedPosition)
    
    'Calculate Vector2:
    FillPosition3D NewPosition3D(1), Destiny.X, Destiny.Y, Destiny.Z
    NewPosition3D(1) = Rotate(NewPosition3D(1), Rotation, RotatedPosition)
    
    'Testing If Vector0 and Vector1 are inside of camera:
    
    
    
    If (IsOnCamera(NewPosition3D(0), camera1.Position, camera1.Size) = False And _
        IsOnCamera(NewPosition3D(1), camera1.Position, camera1.Size) = False) Then
        Exit Sub
    End If
    
    If (IsOnCamera(NewPosition3D(0), camera1.Position, camera1.Size) = False) Then
        NewPosition3D(0) = GetInCamVector(NewPosition3D(0), NewPosition3D(1))
    End If
    
   If (IsOnCamera(NewPosition3D(1), camera1.Position, camera1.Size) = False) Then
        NewPosition3D(1) = GetInCamVector(NewPosition3D(1), NewPosition3D(0))
    End If
    
    'Convert the Vector1 to 2D:
    Points(0) = ConvertPositon3DTo2D(NewPosition3D(0), camera1.Size)
    
    'Convert the Vector2 to 2D:
    Points(1) = ConvertPositon3DTo2D(NewPosition3D(1), camera1.Size)
    Polygon Me.hDC, Points(0), 2
    
End Sub


Private Sub DrawPlane(Position As Position3D, Size As Size3D, Rotation As Angle3D, WorldSize As Size3D)
    Dim Points(4) As POINTAPI
    Dim NewPoint As POINTAPI
    Dim NewPosition3D(4) As Position3D
    Dim RotatedPosition As Position3D
    
    'Rotate from player position:
    With Player1.Position
       FillPosition3D RotatedPosition, .X, .Y, .Z  'Camera Position
    End With
    
    'Get the four vectors
    
    'Floor:
    'Vector1
    FillPosition3D NewPosition3D(0), Position.X, Position.Y, Position.Z
    NewPosition3D(0) = Rotate(NewPosition3D(0), Rotation, RotatedPosition)
    
    
    'Vector2
    FillPosition3D NewPosition3D(1), Position.X, Position.Y, Position.Z + Size.ZDepth
    NewPosition3D(1) = Rotate(NewPosition3D(1), Rotation, RotatedPosition)
    
    'Vector3
    FillPosition3D NewPosition3D(2), Position.X + Size.Width, Position.Y, Position.Z + Size.ZDepth
    NewPosition3D(2) = Rotate(NewPosition3D(2), Rotation, RotatedPosition)
    
    
    'Vector4:
    'getting the wrong vector X :(
    FillPosition3D NewPosition3D(3), Position.X + Size.Width, Position.Y, Position.Z
    NewPosition3D(3) = Rotate(NewPosition3D(3), Rotation, RotatedPosition)
    
    'Testing if the plane is on screen:
        
    If ((IsOnCamera(NewPosition3D(0), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(1), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(2), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(3), camera1.Position, camera1.Size) = False)) Then
        Exit Sub
    End If

    
    'Convert all 3D vectors to 2D vectors(for screen):
    Dim i As Integer
    For i = 0 To 3
        Points(i) = ConvertPositon3DTo2D(NewPosition3D(i), WorldSize)
    Next i
    
    
    FillStyle = vbFSSolid
    
    FillColor = vbRed
    Polygon Me.hDC, Points(0), 4
End Sub

Private Function Ceil(dInput As Double) As Double
    ' Ceiling, defined as: the smallest integer that is not smaller than x.
    ' Works for both positive and negative.
    Ceil = Int(dInput): If Ceil <> dInput Then Ceil = Ceil + 1#
End Function

Private Function GetInCamVector(Origin As Position3D, Destiny As Position3D) As Position3D
    Dim Steps As Double
    Steps = Math.Sqr(Math.Abs(Destiny.X - Origin.X) ^ 2 + Math.Abs(Destiny.Y - Origin.Y) ^ 2 + Math.Abs(Destiny.Z - Origin.Z) ^ 2)
    Steps = Ceil(Steps)
    
    Dim increment As Position3D
    increment.X = (Destiny.X - Origin.X) / Steps
    increment.Y = (Destiny.Y - Origin.Y) / Steps
    increment.Z = (Destiny.Z - Origin.Z) / Steps
    
    Dim nextpoint As Position3D
    nextpoint = Origin
    Dim i As Integer
    
    Dim inter As Position3D
    Dim Size As Size3D
    For i = 1 To Steps
        nextpoint.X = nextpoint.X + increment.X
        nextpoint.Y = nextpoint.Y + increment.Y
        nextpoint.Z = nextpoint.Z + increment.Z
        inter.X = Math.Round(nextpoint.X)
        inter.Y = Math.Round(nextpoint.Y)
        inter.Z = Math.Round(nextpoint.Z)
        If (IsOnCamera(inter, camera1.Position, camera1.Size) = True) Then
            GetInCamVector = inter
            Exit For
        End If
    Next i
End Function

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If (KeyCode = vbKeyEscape) Then End
End Sub

Private Sub Form_Load()
    ScaleMode = vbPixels
    AutoRedraw = True
    FillPosition3D Player1.Position, Me.ScaleWidth / 2, Me.ScaleHeight / 2, 0 'Camera Position
    camera1.Size.Height = Me.ScaleHeight
    camera1.Size.Width = Me.ScaleWidth
    camera1.Position.X = -Me.ScaleWidth / 2 - 100
    camera1.Position.Y = -Me.ScaleHeight / 2 - 100
    camera1.Position.Z = 100
    camera1.Size.ZDepth = 20000
    camera1.Size.distance = 100
    ScrollChanged
End Sub

Sub ScrollChanged()
    Me.Cls
    'Angletest.X = HScroll1.Value
    'Angletest.Y = VScroll1.Value
    'Angletest.Z = HScroll2.Value
    
    Label1.Caption = Angletest.X & ", " & Angletest.Y & ", " & Angletest.Z
    Label1.Caption = Label1.Caption & vbNewLine & Player1.Position.X & ", " & Player1.Position.Y & ", " & Player1.Position.Z
    
    Dim RecPosition As Position3D
    Dim RecPositiond As Position3D
    Dim RecSize As Size3D
    FillPosition3D RecPosition, Player1.Position.X - 775, Player1.Position.Y, Player1.Position.Z + 100
    FillSize3D RecSize, 800, 100, 2000
    DrawPlane RecPosition, RecSize, Angletest, camera1.Size
    
    Me.Refresh
End Sub

Private Sub Form_Resize()
    'ScaleMode = vbPixels
    'AutoRedraw = True
    FillPosition3D Player1.Position, Me.ScaleWidth / 2, Me.ScaleHeight / 2, 0 'Camera Position
    camera1.Size.Height = Me.ScaleHeight + 200
    camera1.Size.Width = Me.ScaleWidth
    camera1.Position.X = -Me.ScaleWidth / 2
    camera1.Position.Y = -Me.ScaleHeight / 2
    camera1.Position.Z = -100
    camera1.Size.ZDepth = 20000
    camera1.Size.distance = 100
    ScrollChanged
End Sub

'yes i use a timer for get the keyboard control:
Private Sub Timer1_Timer() 
     Const Speed As Integer = 10
     Player1.MoveCoordenates = None
     If IsKeyDown(vbKeyEscape) = True Then
        End
     End If
     
     If IsKeyDown(vbKeyA) = True Then
        Angletest.Y = Angletest.Y + 1
        If (Angletest.Y >= 360) Then Angletest.Y = 0
        Player1.MoveCoordenates = Y
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyD) And KEY_DOWN Then
        Angletest.Y = Angletest.Y - 1
        If (Angletest.Y <= -360) Then Angletest.Y = 0
        Player1.MoveCoordenates = Y
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyLeft) And KEY_DOWN Then
        Player1.Position.X = Player1.Position.X + Speed
        Player1.MoveCoordenates = X
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyRight) And KEY_DOWN Then
        Player1.Position.X = Player1.Position.X - Speed
        Player1.MoveCoordenates = X
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyW) And KEY_DOWN Then
        Player1.Position.Y = Player1.Position.Y - Speed
        Player1.MoveCoordenates = Y
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyS) And KEY_DOWN Then
        Player1.Position.Y = Player1.Position.Y + Speed
        Player1.MoveCoordenates = Y
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyUp) And KEY_DOWN Then
        Player1.Position.Z = Player1.Position.Z - Speed
        Player1.Movement.Z = Player1.Movement.Z - Speed
        Player1.MoveCoordenates = Z
        ScrollChanged
    End If
    
    If IsKeyDown(vbKeyDown) And KEY_DOWN Then
        Player1.Position.Z = Player1.Position.Z + Speed
        Player1.Movement.Z = Player1.Movement.Z + Speed
        Player1.MoveCoordenates = Z
        ScrollChanged
    End If
End Sub
i don't understand why these calculation error, but i belive that is on Rotate() and ConvertPositon3DTo2D() functions.
how i see these problem!?!
is on DrawPlane() function:
Code:
If ((IsOnCamera(NewPosition3D(0), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(1), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(2), camera1.Position, camera1.Size) = False) _
        And (IsOnCamera(NewPosition3D(3), camera1.Position, camera1.Size) = False)) Then
        Exit Sub
    End If
if all vectors are outside the camera, they can't be drawed.... if i comment these 'if'. the plane is drawed inside the form...
heres the camera size and position:
Code:
Private Sub Form_Load()
    ScaleMode = vbPixels
    AutoRedraw = True
    FillPosition3D Player1.Position, Me.ScaleWidth / 2, Me.ScaleHeight / 2, 0 'Camera Position
    camera1.Size.Height = Me.ScaleHeight
    camera1.Size.Width = Me.ScaleWidth
    camera1.Position.X = -Me.ScaleWidth / 2 - 100
    camera1.Position.Y = -Me.ScaleHeight / 2 - 100
    camera1.Position.Z = 100
    camera1.Size.ZDepth = 20000
    camera1.Size.distance = 100
    ScrollChanged
End Sub

'and:
'yes they appear be different, because the 'Resize' is the last event and i'm testing.. unless i'm wrong here too:
Private Sub Form_Resize()
    'ScaleMode = vbPixels
    'AutoRedraw = True
    FillPosition3D Player1.Position, Me.ScaleWidth / 2, Me.ScaleHeight / 2, 0 'Camera Position
    camera1.Size.Height = Me.ScaleHeight + 200
    camera1.Size.Width = Me.ScaleWidth
    camera1.Position.X = -Me.ScaleWidth / 2
    camera1.Position.Y = -Me.ScaleHeight / 2
    camera1.Position.Z = -100
    camera1.Size.ZDepth = 20000
    camera1.Size.distance = 100
    ScrollChanged
End Sub