Показать сообщение отдельно
Старый 19.02.2011, 11:30   #16
}{@KeR
ПроЭктировщик
 
Регистрация: 01.02.2011
Сообщений: 148
Написано 7 полезных сообщений
(для 8 пользователей)
Ответ: Управление камерой:

Почуму кубик не двигается???

Graphics3D 1024,768,32,2
SetBuffer BackBuffer
()

;
///////// Type ///////
Type unit
    Field ent
,sel
End Type

Global movepiv
Global celpiv
Global cam
Global pick
;////////End Type ///////

cam=CreateCamera()
PositionEntity cam,0,60,0
RotateEntity cam
,60,0,0
p
=CreatePlane()
EntityColor p,0,128,0


CreatePlayer
(-50,3,65)

Local ox#,oy#,cx#,cy#,tx#,ty#
While Not KeyDown(1)

Dvijenie()

    If 
MouseX()<5 Then TranslateEntity cam,-0.5,0,0
    
If MouseX()>1020 Then TranslateEntity cam,0.5,0,0
    
If MouseY()<5 Then TranslateEntity cam,0,0,0.5
    
If MouseY()>766 Then TranslateEntity cam,0,0,-0.5
    
    
For u.unit=Each unit
        
If u\sel=1 Then EntityColor u\ent,255,255,Else EntityColor u\ent,0,0,120
    Next
    RenderWorld
    
    
If MouseDown(1)
        
cx#=MouseX()
        
cy#=MouseY()
        
        
If ox>cx Then minx=cx:maxx=ox Else minx=ox:maxx=cx
        
If oy>cy Then miny=cy:maxy=oy Else miny=oy:maxy=cy
        
        Rect minx
,miny,maxx-minx,maxy-miny,0
        
For u.unit=Each unit
            CameraProject
(cam,EntityX(u\ent),EntityY(u\ent),EntityZ(u\ent))
            If 
ProjectedX()>minx And ProjectedX()<maxx And ProjectedY()>miny And ProjectedY()<maxy Then u\sel=Else u\sel=0
        Next
        
Else
        
ox#=MouseX()
        
oy#=MouseY()
    
EndIf
    
    
Oval MouseX()-3,MouseY()-3,5,5,0
    Flip
Wend
End 


Function CreatePlayer(x#=0,y#=0,z#=0)

    
u.unit=New unit
    u
\ent=CreateCube()
    
PositionEntity u\ent,x#,y#,z#
    
u\sel=0

        movepiv
=CreatePivot() 
        
PositionEntity movepiv,x#,y#+4,z# 
          
        
celpiv=CreatePivot() 
        
PositionEntity celpiv,x#+4,y#+2,z#+4  
  
End Function

Function 
Dvijenie()

pick=CameraPick(cam,MouseX(),MouseY()) 
For 
u.unit=Each unit
    
If u\sel=1 Then 
       
If MouseHit(2)=1 Then 
          PositionEntity celpiv
,PickedX#(),PickedY#()+2,PickedZ#()  
       
EndIf 
    EndIf 
Next 
 

If EntityDistance(movepiv,celpiv)>3 Then 
                PointEntity movepiv
,celpiv 
                MoveEntity movepiv
,0,0,1
        
EndIf  
 
End Function 

Последний раз редактировалось }{@KeR, 19.02.2011 в 13:46.
(Offline)
 
Ответить с цитированием