Движение камеры

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Движение камеры

Сообщение GLEB » 17.07.2005 (Вс) 22:22

У меня камера перемещается с рывками, не могу понять в чем дело, использую вот эту процедуру, может быть дело в ней?

D3DXMatrixRotationX Mtrx, Diff
d3ddevice.SetTransform D3DTS_VIEW, Mtrx
D3DXMatrixRotationY Mtrx, Angle
d3ddevice.MultiplyTransform D3DTS_VIEW, Mtrx
D3DXMatrixTranslation Mtrx, CamPos.x, CamPos.y, CamPos.z
d3ddevice.MultiplyTransform D3DTS_VIEW, Mtrx

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 18.07.2005 (Пн) 10:12

попробуй перемещать камеру так

Код: Выделить всё
Public Sub SetupMatrices()

CameraX = x
CameraZ = z
CameraY = y

D3DXMatrixLookAtLH matView, vec3(CameraX, CameraY, CameraZ), vec3(0, 0, 0), vec3(0, 1, 0)
d3ddevice.SetTransform D3DTS_VIEW, matView

D3DXMatrixPerspectiveFovLH matProj, pi / 5, 1, 1, 1000
d3ddevice.SetTransform D3DTS_PROJECTION, matProj
End Sub

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 18.07.2005 (Пн) 13:44

GLEB
Этот код многократно проверен - работал нормально. Значит рывки где-то ВНЕ этого кода.
Ты по чему синхронизируешься, не по таймеру?

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 18.07.2005 (Пн) 14:10

В смысле синхронизируешься? Не понял. Таймеров никаких не использую.

Anatron
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 21.08.2002 (Ср) 20:22
Откуда: Златоуст, Челябинская обл.

Сообщение Anatron » 18.07.2005 (Пн) 23:04

Ну в смысле когда происходит изменение положения камеры? По методу MouseMove, при каждой прорисовке или ещё как?

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 19.07.2005 (Вт) 20:08

Через DirectInput получаю координаты мыши и в основном цикле устанавливаю камере новое положение. Но я понял что дело тут в другом. Эти рывки возникают при ограничении кадров (fps). Использую пустой цикл. На 640х480 вроде нормально, а на 800х600 идет рывками. Когда-то делал подобное в Retained Mode никаких проблем не было.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 20.07.2005 (Ср) 8:45

GLEB
Использую пустой цикл

Давно такого не встречал :lol: !

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 20.07.2005 (Ср) 20:06

А как еще ограничить FPS? Я знаю что пустой цикл это не совсем правильно.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 20.07.2005 (Ср) 21:19

зачем ограничивать фпс :?:

ну если надо то рендерь не в цикле а по таймеру

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 21.07.2005 (Чт) 10:18

Так с таймером еще хуже работает. А ограничив ФПС до 60 все объекты перемещаются с одинаковой скоростью как на Riva TNT так и на Radeon 9700.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.07.2005 (Чт) 10:32

А нефиг скорость к fps привязывать...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 21.07.2005 (Чт) 13:28

Vse lechitsya ochen' prosto. V pustom cykle tozhe proveryaj input i problem ne budet.
ХЎ

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 21.07.2005 (Чт) 20:23

Не совсем понял. То есть рисовать в одном цикле, а все перемещения в другом? Или что?
Может тогда сделать так:

Time0=15


'Главный цикл


Do
DoEvents

nowTime = timeGetTime

If nowTime - LastTick > Time0 Then
LastTick = nowTime
Call MoveCamera
End If


Call Render

Loop While Not PTerminate


Работает вроде неплохо, только если Fps будет довольно низкий (время одного кадра ниже Time0) это ведь опять повлияте на скорость перемещения.
Или я опять не то делаю?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 24.07.2005 (Вс) 22:09

ты говорил, что ограничиваешь fps вложенным циклом. вот в этом цикле ТОЖЕ, не убирая из основного поставь вызов MoveCamera . Чем больше проверяется DI, тем более точными будут результаты. Ты хоть десять раз проверку за цикл поставь - только точность увеличится.
ХЎ


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList