Подскажите! Почему кубик не летает за камерой?

Тема в разделе "WASM.DirectX", создана пользователем kryndach, 29 май 2007.

  1. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Вообщем у меня есть координаты объекта и координаты камеры. Вычитаю х с х, у с у, z с z. Получившиеся результаты умножаю на коэфициент и полученные числа складываю с координатами куба.
    Вначале все нормально - куб летит на меня. Но как только я меняю положение камеры(я делаю это с помощью клавы) этот куб летит по старой траектории.
    Посмотрите на исходник(он на MASMе) там понятней. Искать надо рядом с коментарием "изменение куба"

    Я уже загнан в тупик и не знаю в чем может быть проблема. Толи камера стоит на месте - что невозможно(я её двигаю), толи некоторые функции неработают что невозможно впринципе. Уже какой день ПАРЮСЬ.
    Если кого не затруднит - помогите пожалуйста!
     
  2. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Форум!! Аллё. Есть кто дома.
    Или вообще вас загрузил что ответить не можите?
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    kryndach

    Да. Ты задал очень сложный вопрос. Мы все думаем. Я написал письмо главе комитета ARB, чтобы он дал разъяснения. Подожди еще недельку - что-нибудь решим!
     
  4. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Не, я не прошу вас прям Срочно ответить. Хотя-бы какие-то идеи где может быть ошибка. Или у кого такое бывало мог-бы сказать где у него раньше была ошибка. Но хоть что-то.
    Меня просто бесит это ГЛУХОЕ молчание.
    Если чтото не понятно - могу разжевать по мелочам как я сделал алгоритм.
     
  5. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
  6. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    kryndach
    нифига не понял в твоем коде (особенно "понравилось" SetTransform(D3DTS_WORLD) после DrawPrimitive).

    в качестве предположения: сделай D3DTS_WORLD единичной матрицей и не именяй ее, а потом будешь изменять вершины куба и матрицу камеры.

    эти примеры видел:
    Dxsdk81\MAL\Samples
    ?
     
  7. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    kryndach
    только что запустил твой пример и не понял, чем ты не доволен? куб летит и вертится, если двигать камеру, то он тоже смещается.
    двигается не так, как ты задумал? ну бывает такое :)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Kozyr__
    Зачем здесь вообще менять вершины куба - это в корне не верно. Как раз всё надо свести к манипуляциям мартицами и SetTransform.

    kryndach
    Можно сделать примерно так.
    Взять матрицу камеры, вытащить из неё те элементы которые отвечают за перемещение, то же самое с объектом.
    Затем получить их разницу (матриц), умножить на коэффициент, и прибавить полученную к матрице объекта.
    Коэффициент можно расчитать в зависимости от расстояния между ними. Или можно придумать что-то подобное (получше).
     
  9. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    А чего собственно непонравилось?
    Код (Text):
    1. d3dev8  SetTransform, pd3dDevice, D3DTS_WORLD, ADDR WorldMatrix
    Это я возвращаю матрицу мира в первоначальное положение.

    Я так понял - менять куб повершинно? Я раньше так делал - но умный человек сказал что это мазахизм. Я меняю матрицу вида потом рисую куб а потом возращаю матрицу вида обратно.
    А насчет единичной матрицы, кажется она делается следующим образом:
    invoke D3DXMatrixRotationY,ADDR WorldMatrix, 0

    А вы на каком языке программируете? Программисту на Си сложно понять MASMенный код.
     
  10. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Я примерно тоже самое и делаю, с разницей в том что я вытаскиваю данные не из матриц а из мною созданной структуры. Нет разницы откуда вытаскивать - всеравно данные из структуры попадают в матрици камеры и объекта.
    Для пояснения:
    Camera.POLOJ.x == {Матрица Камеры}._41
    Cube1par.POLOJ.y == {Матрица Куба}._42

    Но спасибо за совет. Через некоторое время сделаю именно так как ты сказал, а пока надо разобраться с этой проблемой.
     
  11. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Я и использую коэфициент ( равен 0,1f )
    Коэфициент постоянен. Я просто нормализую полученный вектор ( разница матриц) и умнажаю на этот постоянный коэфициент. Думаю это логичнее.
     
  12. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Извини, забыл уточнить что камеру я нетолько вращаю , но и еще перемещаю. Просто надо понажимать на кнопки Q и A (вперед и назад соотвецтвенно).
    Видимо ты не заметил в коде обработку действий этих кнопок.
     
  13. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Урааааа!!!
    Нашел ошибку!!
    Как всегда нелепую - у камеры то отрицательное значение координат в матрице!!
    Просто поминял их - и всё!
    Большооооооое спасибо уважаемому Booster - ваще не знаю чем блогадарить, и объекты научил меня делать и сдесь помог! Еще раз тебе СПАСИБО!
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kryndach

    По логике впринципе всё правильно.
    Наверно косяк в реализации.
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    kryndach

    Спасибо за благодарности, просто интересуюсь DirectX. Правда работаю в телекомуникационной компании. А графика просто очень захватывающа и интересна.
     
  16. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    Booster
    Зачем здесь вообще менять вершины куба - это в корне не верно. Как раз всё надо свести к манипуляциям мартицами и SetTransform

    ага, а то что он делает на каждом шаге Lock - это верно, да?
    если он оставит в покое матрицу мира, он быстрее поймет что ему нужно, имхо.

    kryndach
    Это я возвращаю матрицу мира в первоначальное положение
    а-а-а, просто я бы это делал после BeginScene (хотя это не принципиально, конечно)

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

    1. изменить мировую матрицы
    2. найти ее обратную матрицу
    3. обратную матрицу умножить на новую матрицу камеры - получишь матрицу камеры

    зы. еще подумаю, может завтра отпишу
     
  17. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55
    Это точно!
    До работы мне далеко - еще экзамены надо сдать 8-)
    А Kozyr_ мне напоминает меня в первые дни изучения DirectX. Вообще, не зная броду не суйся в воду :P. Не хочу обидеть но Booster написал дело в отличаи от тебя.

    Тема закрыта и надо прекращать этот флейм
     
  18. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    гы, пока я тут парился по работе, вы уже все решили.
     
  19. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    kryndach
    мне напоминает меня в первые дни изучения DirectX

    ну-ну...
     
  20. kryndach

    kryndach New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    55