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

Guest 07.04.2006 15:22

Спасибо, молодец то написал, я на этом учиться буду))) Но есть один вопрос. как седлать плавные развороты? до точки... ну я пытаюсь космическую стрелялку сделать. так вот, надо чтоб объект летящий (бегущий) на тебя достигнув предельно близкого расстояния выбирал другую точку в пространстве и медленно к ней поворачивался. причем желательно чтоб эта точка выбиралась так что объект как бы "уворачивался от столкновения с тобой", а не проходил сквозь...

ZanoZa 07.04.2006 15:52

Цитата:

Originally posted by Guest@7.4.2006, 13:22
Спасибо, молодец то написал, я на этом учиться буду))) Но есть один вопрос. как седлать плавные развороты? до точки... ну я пытаюсь космическую стрелялку сделать. так вот, надо чтоб объект летящий (бегущий) на тебя достигнув предельно близкого расстояния выбирал другую точку в пространстве и медленно к ней поворачивался. причем желательно чтоб эта точка выбиралась так что объект как бы "уворачивался от столкновения с тобой", а не проходил сквозь...

Чтоб не проходил сквозь там надо менять колизию, помоему с 2,3 на 2,1

alcoSHoLiK 07.04.2006 20:27

Эти посты были перемещены из темы "Создаем свой FPS". В первом посте гость благодарит impersonalis'а.

P.S. Просьба в дальнейшем не задавать вопросы в FAQ, тем более, если они не по теме.

SubZer0 07.04.2006 21:02

если в кратце объяснить, без кода, то:

запоминаешь углы корабля, юзаешь PointEntity, теперь вычитаешь из новых координат старые (или наоборот, хз, протестить надо), результат умножаешь допустим на 0.1 (будет типа скорость чем больше тем быстрей будет поворот)... и теперь поворачиваешь свой корабль на старые углы + результат после умножения... вот тебе и будет медленный поворот...

насчет выбора цели:

хммм... надо подумать... :)

impersonalis 07.04.2006 23:11

цикл пока Модуль_разности_текушего_угла_и_нужного_угла<Дельт а
повернуть_модель на дельта*сигнум(разность_углов)
ХХХ
конец цикла
повернуть_модель на нужный_угол


нужный_угол - берём из pointEntity
текущий - pitch или yaw или roll (см. по какой оси поваричаешь)
вместо ХХХ - или оператор delay или оператор выхода (см. логику алгоритма - блокируется логика других объектов на время поворта, или алгоритм - "многопоточный")

Diplomat 07.04.2006 23:37

Думаю, простейший код всё обьяснит. Как в плане производительности, так и в плане обьема.
Код:

Graphics3D 320,240,16,2
SetBuffer BackBuffer()

Obj1=CreateCube()
Obj2=CreateSphere()
MoveEntity Obj2,1,2,3

Cam=CreateCamera()
MoveEntity Cam,0,0,-5

Sun=CreateLight(1)

Scaner=CreatePivot()

;1---------------------
;Variant1: PointEntity
While Not KeyHit(1)
 m=MilliSecs()
 For q=1 To 10000
        PositionEntity Scaner,EntityX(Obj1),EntityY(Obj1),EntityZ(Obj1)
        PointEntity Scaner,Obj2
        TurnEntity Obj1,(EntityPitch(Scaner)-EntityPitch(Obj1))*0.00001,(EntityYaw(Scaner)-EntityYaw(Obj1))*0.00001,0
 Next
 m=MilliSecs()-m
        RenderWorld()
        Text 10,10,"POINTENTITY TEST"
        Text 10,20,"Millisecs: "+m
        Flip(1)
        Cls
Wend
TurnEntity Obj1,45,45,0

;2---------------------
;Variant2: RotateEntity
While Not KeyHit(1)
 m=MilliSecs()
 For q=1 To 10000
        RotateEntity Obj1,EntityPitch(Obj1)+DeltaPitch(Obj1,Obj2)*0.00001,EntityYaw(Obj1)+DeltaYaw(Obj1,Obj2)*0.00001,0
 Next
 m=MilliSecs()-m       
        RenderWorld()
        Text 10,10,"ROTATEENTITY TEST"
        Text 10,20,"Millisecs: "+m
        Flip(1)
        Cls
Wend
End


impersonalis 08.04.2006 00:23

Да - выглядит лучше.

Diplomat 08.04.2006 00:39

Цитата:

Да - выглядит лучше.
В сущности, внешний вид вторичен.
Во втором случае производительность в полтора-два раза выше.
А в старых версиях Блица за ПойнтЁнтити я замечал порою просто дикие тормоза. Да и сейчас насчет него меня терзают смутные сомнения: "перестройка" с варианта1 на вариант2 сэкономила в проекте до 10 ФПС.
ПойнтЁнтити я бы рекомендовал использовать только в простейших тестах, где производительность не важна: команда непредсказуема... хотя, может это мои очередные глюки. :)

impersonalis 08.04.2006 01:52

я раньше вообще через tan делал =)))


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

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