
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
c=CreateCamera()
Global cub=CreateCube()
MoveEntity cub,0,0,10
Global CubSelect
Global Ramkax1, Ramkay1,Ramkax2, Ramkay2
Repeat
Cls
CameraProject(c,EntityX(cub),EntityY(cub),EntityZ(cub)) ; определяем 2д проекцию из 3д
RenderWorld()
Ramka()
Flip()
Until KeyHit(1)
End
Function Ramka()
If MouseHit(1) Then
Ramkax1=MouseX()
Ramkay1=MouseY()
EndIf
If MouseDown(1) Then
Color 20,200,20
Ramkax2=MouseX()
Ramkay2=MouseY()
Line Ramkax1,Ramkay1,Ramkax2,Ramkay1
Line Ramkax1,Ramkay2,Ramkax2,Ramkay2
Line Ramkax1,Ramkay1,Ramkax1,Ramkay2
Line Ramkax2,Ramkay1,Ramkax2,Ramkay2
If Ramkax1>Ramkax2 Then
Ram1x=Ramkax1
Ram2x=Ramkax2
Else
Ram1x=Ramkax2
Ram2x=Ramkax1
EndIf
If Ramkay1>Ramkay2 Then
Ram1y=Ramkay1
Ram2y=Ramkay2
Else
Ram1y=Ramkay2
Ram2y=Ramkay1
EndIf
Text ProjectedX(),ProjectedY(),"# KY6" ; центр куба в 2д
If (ProjectedX()<Ram1x And ProjectedX()>Ram2x)
EntityColor cub,255,200,200
CubSelect=True
Else
EntityColor cub,255,255,255
CubSelect=False
EndIf
Else
Ramkax1=MouseX()
Ramkay1=MouseY()
If CubSelect=True
EntityColor cub,255,100,100
Else
EntityColor cub,255,255,255
EndIf
EndIf
End Function
о какой либо оптимизации и красоте кода особо не морочился..
так же тут пример на cub. А если их много будет по Type, тогда уже проходить по всем кубам на проекциию