forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Управление камерой: (http://forum.boolean.name/showthread.php?t=14254)

}{@KeR 17.02.2011 19:40

Управление камерой:
 
PHP код:

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

l=CreateLight()
c=CreateCamera()
TurnEntity c,45,0,0
MoveEntity c
,0,100,0
CreateWorld
()

Repeat
If KeyDown(30Then MoveEntity c,-1,0,0
If KeyDown(32Then MoveEntity c,1,0,0
If KeyDown(31Then MoveEntity c,0,0,-1
If KeyDown(17Then MoveEntity c,0,0,


RenderWorld
()
Flip()
Until KeyHit(1)
End 

Function CreateWorld()
        
wtex=CreateTexture(256,256)
        
SetBuffer TextureBuffer(wtex)
        
Color 10,100,10
        Rect  15
,15,226,226
        SetBuffer BackBuffer
()
        
ScaleTexture wtex,10,10
        plane
=CreatePlane()
        
EntityTexture plane,wtex
        EntityType plane
,poltype
        EntityPickMode plane
,2,1
        FreeTexture wtex
End 
Function 

Видите TurnEntity c,45,0,0
Когда камера наклонена на х=45 то если нажать клавишу W(вперёд) то камера летит под plain ....как сделать чтобы она летала ровно....словно без TurnEntity

EvilChaotic 17.02.2011 19:46

Ответ: Управление камерой:
 
TranslateEntity.

}{@KeR 17.02.2011 20:11

Ответ: Управление камерой:
 
Ещё пару вопросиков

1.как теперь также реализовать с поворотом камеры влево и вправо?
2.Как на колёсик мышки приближать и отдалять?

}{@KeR 17.02.2011 20:33

Ответ: Управление камерой:
 
Вот сделал что объект выделяется рамкой и куда нажмёшь(ПКМ) туда и двигается.....если (ЛКМ) то сбрасывается
но всёравно как-то коряво.....помогите пожалуйста
Например если рамка проходит центр куба то он всёравно выделяется


PHP код:

Graphics3D 1024,768,32,2


CreateWorld
()

Global 
movepiv
Global centpiv
Global campiv
Global camera
Global mic
Global speed#
Global deltaT
Global userTime
Global newTime
Global wLog

Global f_key=17
Global b_key=31
Global l_key=30
Global r_key=32

Global CubSelect 
Global Ramkax1Ramkay1,Ramkax2Ramkay2

Const  playertype=1,poltype=2

CreatePlayer
(600,3,-600)

cub=CreateCube()
ScaleEntity cub,2,4,2
;CameraProject(camera,EntityX(cub),EntityY(cub),EntityZ(cub))



Repeat

        dvigok
()
        
        
PositionEntity cub,EntityX#(movepiv,1),EntityY#(movepiv,1),EntityZ#(movepiv,1)
        
RotateEntity cub,0,EntityYaw(movepiv,1),0
         
        
;mouselook(camera)               
        
UpdateWorld()
        
RenderWorld()
        
Ramka()
        
Flip()
        
Until KeyHit(1)=1
End

Function CreateWorld()
        
wtex=CreateTexture(256,256)
        
SetBuffer TextureBuffer(wtex)
        
Color 10,100,10
        Rect  15
,15,226,226
        SetBuffer BackBuffer
()
        
ScaleTexture wtex,10,10
        plane
=CreatePlane()
        
EntityTexture plane,wtex
        EntityType plane
,poltype
        EntityPickMode plane
,2,1
        FreeTexture wtex
End 
Function

Function 
CreatePlayer(x#=0,y#=0,z#=0)
        
movepiv=CreatePivot() 
        
PositionEntity movepiv,x#,y#+4,z# 
        
EntityRadius movepiv,3,4.5 
        EntityType movepiv
,playertype 
        centpiv
=CreatePivot() 
        
PositionEntity centpiv,x#+4,y#+2,z#+4  
        
camera=CreateCamera() 
        
PositionEntity camera,600,100,-670 
        TurnEntity camera
,45,0,0,
        CameraClsColor camera
,10,10,150 
        mic
=CreateListener(camera,0.05,0.05,0.08
        
Collisions playertype,poltype,2,
End 
Function

Function 
dvigok()
        ;
PositionEntity campiv,EntityX#(movepiv,1),EntityY#(movepiv,1),EntityZ#(movepiv,1) 
        
If KeyHit(60Then wLog=Not wLog Wireframe wLog 
        
If userTime=0 userTime=MilliSecs() 
        
newTime=MilliSecs()  
        
deltaT=newTime-userTime 
        userTime
=newTime 
        speed
#=0.04*deltaT
 
        
If KeyDown(f_keyThen 
                TranslateEntity camera
,0,0,speed
        
Else 
                If 
KeyDown(b_keyThen TranslateEntity camera,0,0,-speed#
        
EndIf 
        If 
KeyDown(l_keyThen 
                TranslateEntity camera
,-speed#,0,0 
        
Else
                If 
KeyDown(r_keyThen TranslateEntity camera,speed#,0,0 
        
EndIf
  
         
        
CameraPick camera,MouseX(),MouseY() 
        
                ;If 
MouseHit(2)=1 Then 
                
;        PositionEntity centpiv,PickedX#(),PickedY#()+2,PickedZ#()  
                
;EndIf 
        
        If 
EntityDistance(movepiv,centpiv)>3 Then 
                PointEntity movepiv
,centpiv 
                MoveEntity movepiv
,0,0,speed
        
EndIf 
        
TranslateEntity movepiv,0,-1,
End 
Function

Function 
Ramka() 
    If 
MouseHit(1Then  
        Ramkax1
=MouseX() 
        
Ramkay1=MouseY() 
    EndIf  
    If 
MouseDown(1Then 
        Color 0
,200,
        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  
         
        If (
GraphicsWidth()*0.5<Ram1x And GraphicsWidth()/0.5>Ram2x)
           ; 
EntityAlpha cub,1
            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
        
        If 
CubSelect=True Then 
           
If MouseHit(2)=1 Then 
                PositionEntity centpiv
,PickedX#(),PickedY#()+2,PickedZ#()  
           
EndIf 
        EndIf                   
End Function 

Ещё вот: (Что не так?)
PHP код:

If MouseZSpeed()=1 Then
MoveEntity camera
,0,0,3
ElseIf MouseZSpeed()=-1 Then
MoveEntity camera
,0,0,-3
EndIf 


mr.DIMAS 17.02.2011 23:11

Ответ: Управление камерой:
 
1. создаешь ПИВОТ, привязываешь камеру к нему, наклоняешь камеру на нужный угол, распологаешь на нужной высоте. когда нужно повернуть камеру - крутиш пивот.
2. Двигаешь КАМЕРУ по оси Z. MouseZSpeed в помощь

+ почитай книгу Роберта Мартина "Чистый код"

Leowey 18.02.2011 01:26

Ответ: Управление камерой:
 
mr.DIMAS, золотые слова...


}{@KeR, на заметку: Если ты собираешься использовать в своём проекте физикс, то тебе потребуется физическая - капсульная модель игрока.
На, кури! http://forum.boolean.name/showthread...566#post105566

}{@KeR 18.02.2011 12:52

Ответ: Управление камерой:
 
Если что , то свой вопрос я всё время обновляю

}{@KeR 18.02.2011 15:47

Ответ: Управление камерой:
 
Как сделать чтобы Image всегда было радо с объектом??

Nex 18.02.2011 17:05

Ответ: Управление камерой:
 
Как то так
Цитата:

CameraProject camera,EntityX (entity),EntityY (entity),EntityZ (entity)
DrawImage image,ProjectedX (),ProjectedZ ()

mr.DIMAS 18.02.2011 17:23

Ответ: Управление камерой:
 
только не так!!! это тормозно( Юниты -> UP. FPS -> DOWN ) . загружаешь image как текстуру, создаешь квад ( или спрайт ), привязываешь к объекту, натягиваешь текстуру. если квад - то юзай PointEntity. Если спрайт - он сам поворачивается к камере )). В общем, лучше 2д графику блица сразу в топку отправить - уж очень медленная. Лучше квадами с текстурами

}{@KeR 18.02.2011 19:14

Ответ: Управление камерой:
 
Я просто хочу выбирать объекты рамкой через ImagesCollide....больше у мя ни как неполучается выбирать

mr.DIMAS 18.02.2011 19:30

Ответ: Управление камерой:
 
оу щит, порой по форуму. тем таких поднималось много. сам выделение рамкой не делал - по-этому ничего сказать не могу

}{@KeR 18.02.2011 19:33

Ответ: Управление камерой:
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 179403)
оу щит, порой по форуму. тем таких поднималось много. сам выделение рамкой не делал - по-этому ничего сказать не могу

Искал уже.....точто надо не нашёл
Всёравно спасибо :)

Alex_Noc 18.02.2011 22:35

Ответ: Управление камерой:
 
нууу, может я смогу помоч теоретикой %) , кароч:
Как тебе нужно выделение чтоб рисовалось? На экране квадрат вид спереди или на поверхности в перспективе?

}{@KeR 19.02.2011 07:49

Ответ: Управление камерой:
 
Цитата:

Сообщение от Alex_Noc (Сообщение 179422)
нууу, может я смогу помоч теоретикой %) , кароч:
Как тебе нужно выделение чтоб рисовалось? На экране квадрат вид спереди или на поверхности в перспективе?

1.Мне нужно выделить объект(юнит)-рамкой
2.потом чтобы нажать куда-нить на свободном месте от объект и сам этот объект деактивировался

Короче так....как в стратегиях бывает!!!!!!!!!!!!!!!


Часовой пояс GMT +4, время: 05:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot