|
3D-программирование Вопросы, касающиеся программирования 3D мира |
29.09.2006, 21:09
|
#1
|
ПроЭктировщик
Регистрация: 12.09.2006
Сообщений: 120
Написано 0 полезных сообщений (для 0 пользователей)
|
как сделать плавные повороты
млин надо сделать плавные поворты, точнее я их уже сделал, только при повышении "плавности" - тормоза ужасные.
делал, кажется, по примеру Diplomat'а.
мож есть другие варианты, а-то казан совсем не варит
|
(Offline)
|
|
29.09.2006, 22:09
|
#2
|
|
Re: как сделать плавные повороты
всмысле тормозят ? ...
покажи код
|
|
|
29.09.2006, 22:48
|
#3
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
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 (20 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]
|
(Offline)
|
|
29.09.2006, 23:02
|
#4
|
ПроЭктировщик
Регистрация: 12.09.2006
Сообщений: 120
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как сделать плавные повороты
млин, спросил неправильно.
плавный разворот-в смысле плавный PointEntity, ну типа плавное разворачивание одного в сторону другого объекта
а код был с испльзованием for q=0 to 10000 и DeltaYaw(),DeltaPitch().
|
(Offline)
|
|
29.09.2006, 23:15
|
#5
|
|
Re: как сделать плавные повороты
for q=0 to 10000
теперь ясно почему тттормозиттт
переделка кода нада
|
|
|
30.09.2006, 01:04
|
#6
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: как сделать плавные повороты
я на блитц рр ответил уже. 2 строчки
__________________
|
(Offline)
|
|
30.09.2006, 01:53
|
#7
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
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 (за один вызов функции).
|
(Offline)
|
|
30.09.2006, 13:34
|
#8
|
ПроЭктировщик
Регистрация: 12.09.2006
Сообщений: 120
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как сделать плавные повороты
всем БОЛЬШОЙ БОЛЬШОЙ СПАСИБ!!!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Как сделать? |
vadim2 |
2D-программирование |
11 |
10.01.2008 16:56 |
Как сделать? |
mobilla |
Основной форум |
4 |
05.10.2007 19:15 |
Как сделать?? |
_maxim_ |
3D-программирование |
12 |
18.11.2006 18:05 |
Повороты |
SubZer0 |
Алгоритмика |
3 |
06.08.2006 19:32 |
Плавные повороты |
Guest |
3D-программирование |
8 |
08.04.2006 01:52 |
Часовой пояс GMT +4, время: 18:16.
|