For this I'd recommend using CameraProject and drawing the rectangle in a 2D way. That way you dont need to worry about scaling or resizing. Here's some dummy code:
Graphics3D 640, 480
SetBuffer BackBuffer()
Global cam = CreateCamera()
Global cube = CreateCube()
RotateEntity cube, 0, 45, 30
Repeat
If KeyDown(200) TurnEntity cube, 0, 0, 1
If KeyDown(208) TurnEntity cube, 0, 0, -1
RenderWorld
Color 255, 0, 0
BoxMesh( cam, cube )
Flip
Until KeyHit(1)
; BoxMesh function (BlitzSupport's code)
; Available from code archives with example code.
Function BoxMesh (usecam, mesh)
If EntityInView (mesh, usecam)
largestx = 0: largesty = 0
gw = GraphicsWidth (): gh = GraphicsHeight ()
smallestx = gw: smallesty = gh
For s = 1 To CountSurfaces (mesh)
surf = GetSurface (mesh, s)
For vert = 0 To CountVertices (surf) - 1
vx# = VertexX (surf, vert)
vy# = VertexY (surf, vert)
vz# = VertexZ (surf, vert)
TFormPoint (vx, vy, vz, mesh, 0)
CameraProject usecam, TFormedX (), TFormedY (), TFormedZ ()
vx2 = ProjectedX ()
vy2 = ProjectedY ()
If vx2 > largestx
largestx = vx2
Else
If vx2 < smallestx
smallestx = vx2
EndIf
EndIf
If vy2 > largesty
largesty = vy2
Else
If vy2 < smallesty
smallesty = vy2
EndIf
EndIf
Next
Next
If smallestx < 0 Then smallestx = 0
If smallesty < 0 Then smallesty = 0
If largestx > gw Then largestx = gw
If largesty > gh Then largesty = gh
Rect smallestx, smallesty, largestx - smallestx, largesty - smallesty, False
EndIf
End Function
|