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

Timon 29.09.2006 21:09

как сделать плавные повороты
 
млин надо сделать плавные поворты, точнее я их уже сделал, только при повышении "плавности" - тормоза ужасные.:wallbash:

делал, кажется, по примеру Diplomat'а.

мож есть другие варианты, а-то казан совсем не варит:)

jimon 29.09.2006 22:09

Re: как сделать плавные повороты
 
всмысле тормозят ? ...
покажи код

alcoSHoLiK 29.09.2006 22:48

Re: как сделать плавные повороты
 
Подойдет?
[highlight=blitzbasic]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam, 0, 20, 0
RotateEntity cam, 90, 0, 0

lit=CreateLight()
PositionEntity lit, 0, 10, 0
RotateEntity lit, 90, 0, 0

Global player=CreateCone (32)
RotateEntity player, 90, 0, 0



Global orient=0 ;0 - up
;1 - right
;2 - down
;3 - left
Global lim=0
Global turnstep=0

While Not KeyHit (1)
moving%=0
If KeyDown (200) Then dir=0: moving=1
If KeyDown (208) Then dir=2: moving=1
If KeyDown (203) Then dir=3: moving=1
If KeyDown (205) Then dir=1: moving=1
If moving Then Move (dir)

RenderWorld
Flip
Wend

Function Move (dir)
sign=0
stat=dir-orient

lim=0
If stat=1 Or stat=-3 ;turn right
lim=90
sign=2
ElseIf stat=-1 Or stat=3 ;turn left
lim=-90
sign=-2
Else
If stat<>0 Then lim=180: sign=2 ;turn around
End If

If lim
TurnEntity player, 0, -sign, 0, 1
turnstep=turnstep+sign
If turnstep=lim Then orient=dir: lim=0: turnstep=0
Else
MoveEntity player, 0, .1, 0 ;move if dir=orient
End If
End Function

End
[/highlight]

Timon 29.09.2006 23:02

Re: как сделать плавные повороты
 
млин, спросил неправильно.
плавный разворот-в смысле плавный PointEntity, ну типа плавное разворачивание одного в сторону другого объекта

а код был с испльзованием for q=0 to 10000 и DeltaYaw(),DeltaPitch().

jimon 29.09.2006 23:15

Re: как сделать плавные повороты
 
for q=0 to 10000
теперь ясно почему тттормозиттт :lol:

переделка кода нада :)

tormoz 30.09.2006 01:04

Re: как сделать плавные повороты
 
я на блитц рр ответил уже. 2 строчки :)

HolyDel 30.09.2006 01:53

Re: как сделать плавные повороты
 
Graphics3D 800,600
SetBuffer BackBuffer()

obj1=CreateSphere()

obj2=CreateCone()
RotateMesh obj2,90,0,0

p=CreatePlane()
EntityAlpha p,0.5
EntityColor p,255,0,0

cam=CreateCamera()
PositionEntity cam,0,10,-20
RotateEntity cam,45,0,0

l=CreateLight()

PositionEntity obj2,0,0,0
PositionEntity obj1,4,4,4

EntityBox p,-10000,-2,-10000,20000,2,20000
EntityPickMode p,3

While Not KeyDown(1)

If MouseDown(1)
CameraPick(cam,MouseX(),MouseY())
cx#=PickedX()
cz#=PickedZ()
PositionEntity obj1,cx,4,cz
EndIf

curvepointentity(obj2,obj1,5,5)
MoveEntity obj2,0,0,0.3
RenderWorld
Flip

Wend

Function CurvePointEntity(ent1,ent2,speedx#=1,speedy#=1)
dx#=DeltaPitch(ent1,ent2)
dy#=DeltaYaw(ent1,ent2)
If Abs(dx#)>speedx# Then TurnEntity ent1,speedx#*Sgn(dx),0,0 Else TurnEntity ent1,dx,0,0
If Abs(dy#)>speedy# Then TurnEntity ent1,0,speedy#*Sgn(dy),0 Else TurnEntity ent1,0,dy,0
End Function

Собственно ent1 - который надо повернуть, ent2 - на который надо повернуть,speedx - скорость поворота по оси х (за один вызов функции),speedy - скорость поворота по оси Y (за один вызов функции).

Timon 30.09.2006 13:34

Re: как сделать плавные повороты
 
всем БОЛЬШОЙ БОЛЬШОЙ СПАСИБ!!!


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

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