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=8275)

mumo1991 11.05.2009 03:09

Помогите с функцией!!!
 
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
camerapivot=CreatePivot(pivot) ;pivot
PositionEntity camerapivot,0,3,0
pivot=CreatePivot(camera)
camera=CreateCamera(camerapivot) ;camera on pivot
camerabank=CreateBank(48) ;camera bank variables
light=CreateLight()
plane=CreatePlane()
PositionEntity plane,0,0,0
player=CreateCube(pivot)
PositionEntity player,0,0,0
Repeat

UpdateWorld
RenderWorld
CameraMouseView(camerapivot,camera,camerabank)
Flip
Until KeyHit(1)
End

Function CameraMouseView(camerapivot,camera,camerabank,spee d#=0.05)
;camerapivot,camera,camerabank=valid handles, speed#=speed of view

Local movex,movey,camx#,camy#,camz#,pivx#,pivz#,angle#,x axis#,zaxis#

;error messages for invalid handles
If camerapivot=0 Then RuntimeError "Pivot entity is zero!"
If camera=0 Then RuntimeError "Camera entity is zero!"
If camerabank=0 Then RuntimeError "Bank handle is zero!"

;set default values
If speed#<0.01 Then speed#=0.01 ;min speed
If PeekFloat(camerabank,36)=0 Then PokeFloat camerabank,36,-10 ;no camz

;update mouse variables
PokeInt camerabank,0,PeekInt(camerabank,8) ;lastx=msex
PokeInt camerabank,4,PeekInt(camerabank,16) ;lasty=msey
PokeInt camerabank,8,MouseX() ;msex
PokeInt camerabank,16,MouseY() ;msey
PokeInt camerabank,20,MouseX()-PeekInt(camerabank,0) ;movex=msex-lastx
PokeInt camerabank,24,MouseY()-PeekInt(camerabank,4) ;movey=msey-lasty

;fill in the position/rotation variables
movex=PeekInt(camerabank,20)
movey=PeekInt(camerabank,24)
camx#=PeekFloat(camerabank,28)
camy#=PeekFloat(camerabank,32)
camz#=PeekFloat(camerabank,36)
pivx#=PeekFloat(camerabank,40)
pivz#=PeekFloat(camerabank,44)

If MouseDown(1) ;Left Mouse button
If KeyDown(29) ;Left Ctrl key, camera drag
angle#=camy# : xaxis#=speed# : zaxis#=speed# ;init xz axis
If angle#>90 And angle#<270 Then zaxis#=-zaxis# ;-z if 90..270
If angle#>180 Then angle#=360-angle# : xaxis#=-xaxis# ;-x if 180..360
If angle#>90 Then angle#=180-angle# ;reduce y angle to 90
angle#=angle#*0.011 ;y as fraction of 1, ie. 90->100
;set mouse xy movements by y fraction and add to pivot xz positions
pivx#=pivx#-(movex*(1-angle#)*zaxis#)-(movey*angle#*xaxis#)
pivz#=pivz#-(movex*angle#*xaxis#)+(movey*(1-angle#)*zaxis#)
ElseIf KeyDown(42) ;Left Shift key, camera zoom
camz#=camz#-movey*speed# ;-msey sets camera z mt
If camz#>-3 Then camz#=-3 ;limit zoom to 3mt
Else ;camera rotation
camx#=camx#+(movey*10*speed#) ;mousey sets camera x dg
If camx#>90 Then camx#=90 ;limit x to -90..90
If camx#<-90 Then camx#=-90
camy#=camy#-(movex*10*speed#) ;-mousex sets camera y dg
If camy#>359 Then camy#=0 ;limit y to 0..360
If camy#<0 Then camy#=359
EndIf
EndIf

camx#=camx#+(movey*10*speed#) ;mousey sets camera x dg
If camx#>90 Then camx#=90 ;limit x to -90..90
If camx#<-90 Then camx#=-90
camy#=camy#-(movex*10*speed#) ;-mousex sets camera y dg
If camy#>359 Then camy#=0 ;limit y to 0..360
If camy#<0 Then camy#=359

;update position/rotation variables
PokeFloat camerabank,28,camx#
PokeFloat camerabank,32,camy#
PokeFloat camerabank,36,camz#
PokeFloat camerabank,40,pivx#
PokeFloat camerabank,44,pivz#

;move pivot, rotate and zoom camera
PositionEntity camerapivot,pivx#,0,pivz# ;drag
RotateEntity camerapivot,camx#,camy#,0 ;rotate
PositionEntity camera,0,0,camz# ;zoom
End Function

Мой вопрос заключается в следующем: есть функция которая описывает как крутиться камера вокруг объекта, что мне надо дописать что-б я мог еще управлять(с клавиатуры вперед, назад, вправо, влево) моим объектом!!! Помогите пожалуйста!

Main Cry 11.05.2009 03:44

Ответ: Помогите с функцией!!!
 
Зачем использовать байтовые массивы для интерполированного изменения координат объекта относительно другого?

mumo1991 11.05.2009 03:48

Ответ: Помогите с функцией!!!
 
Я уже 2 месяца пытаюсь написать вид от третьего 3 лица и у меня ничего не получается вот нашел исходник с этой функцией и решил попробовать его !!

Main Cry 11.05.2009 03:52

Ответ: Помогите с функцией!!!
 
позиционируй через значение косинуса или синуса угла объекта.
угол модифицируй в цикле.

mumo1991 11.05.2009 03:53

Ответ: Помогите с функцией!!!
 
Спасибо!!!
если честно не сильно понимаю о чем ты!

Main Cry 11.05.2009 04:04

Ответ: Помогите с функцией!!!
 
PositionEntity camera,Cos(rX)+distance+EntityX(xx),Cos(rY)+distan ce+EntityY(xx),Sin(rZ)+distance+EntityZ(xx)

mumo1991 11.05.2009 04:06

Ответ: Помогите с функцией!!!
 
Теперь уже немного понятно!!!Спасибо!

jimon 11.05.2009 04:22

Ответ: Помогите с функцией!!!
 
mumo1991
за 2 месяца можно было бы изучить книжку по геометрии за 9 класс


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

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