Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>В идеале по D3D. Я же все уже написал, господарь модератор SM>Надо определять, в какой объект на 3D сцене ткнули манипулятором ввода типа "мышь" SM>Если таких несколько — брать из них ближайший.
Те пользуешь 3D модели? Если да тогда так.
Камера в 3Д выглядит так: Глаз с определенным углом зрения по вертикали и горизонтали и плоскость экрана на которую проецируется изображение. Мишь бегает какраз по проекции. Для того чтобы определить в какой объект мы попали нам надо пустить луч из глаза через местоположение мыши на проекции. Луч можно посчитать по матрице вида как именно я не помню но я думаю это ты и сам вывести сможешь.
Имея луч можно пересечь с ним все модели на экране. Но это довольно долго проверять пересечение со всеми треугольниками по этому имеет смысл описать вокруг всех моделей сферу и перед тем как проверять пересечение с моделью проверить пересечение со сферой(hint находишь растояние от центра сферы до луча...). Далие сортируешь и начинаешь проверять пересечения с треугольниками. Если треугольников много то можно поделить модель на несколько сфер. Лучше всего сделать иерархию те сначало проверяем сферу которая описывает все треугольники, потом проверяем сферы которые польностью описысвают часть модели(внутренние сферы не обязательно должны полностью находится внутри внешней)и так далие хоть до бесконечности.
Если есть возможность сделать грубое представление модели те описать гуманойда так:
голова — шар
шея — цилинлр
туловище — цилиндр
рука — два цилиндра с шаром на конце
нога — три цилиндра
...
В большинстве случаев такое приближение приемлимо.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
В ранних SDK, как сейчас помню, было описание DirectDraw. А в DX9 SDK нет! Что, теперь DirectDraw исчез как явление или поглочен Direct3D? Тогда скажите, плиз, как теперь надо создавать кадровый буфер, и чем его блиттить на экран?
Заодно вопрос по D3D: какие есть средства определения того, проекции какого полигона сцены принадлежит данная точка растра? Иными словами, как мышью выбирать объекты?
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Куда дели DirectDraw?
От:
Аноним
Дата:
29.04.04 10:24
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM> SM>В ранних SDK, как сейчас помню, было описание DirectDraw. А в DX9 SDK нет!
Они закончили описывать его начиная с DX7.0 потому что последний интерфейс IDirectDraw7 был именно 7-ой версии, развивать его остановились и рекомендуют это уже делать все через Direct3D
Спасибо!
А где можно почитать о том, как средствами Direct3D получить доступ к буферу кадра? Мне всего-то и нужно осуществлять вывод двумерных изображений (и, возможно, каких-то дополнительных эффектов) с аппаратным ускорением.
В идеале, конечно, хотелось бы другого — но для этого надо выделять объекты мышью, а как это сделать, мне непонятно. Не обратной же трассировкой лучей!
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Странно было бы основывать свою программу на SDK 7, если уже есть SDK 9.
Вы мне лучше расскажите сказку про идентификацию объектов... Руки чешутся закросспостить в "Разработку игр"
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM> SM>Странно было бы основывать свою программу на SDK 7, если уже есть SDK 9.
Ну используй 9ый СДК но интерфейсы там всеравно будут седьмыми. Либо берешь два треугольника, натягиваешь на них текстуру и через Д3Д. SM>Вы мне лучше расскажите сказку про идентификацию объектов... Руки чешутся закросспостить в "Разработку игр"
Тебе надо по D3D или DDraw? Что за задача то?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
В идеале по D3D. Я же все уже написал, господарь модератор
Надо определять, в какой объект на 3D сцене ткнули манипулятором ввода типа "мышь"
Если таких несколько — брать из них ближайший.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM> SM>В ранних SDK, как сейчас помню, было описание DirectDraw. А в DX9 SDK нет! Что, теперь DirectDraw исчез как явление или поглочен Direct3D? Тогда скажите, плиз, как теперь надо создавать кадровый буфер, и чем его блиттить на экран?
В справке DX С++ пойдите в DirectShow->Appendixes->Multimedia Streaming->Multimedia Streaming Interfaces->IDirectDraw interface и удивитесь
Да блин понятно, у меня курсач по рейтрейсингу был Но какого черта! Почему было не ввести соответсвующие действия в движок? Тем более, что если задействован z-buffer, то можно и id треугольника сохранять. Зараза...
А сейчас придется выяснять, на какие именно матрицы умножаются вектора при проецировании, и раскручивать все это назад. То есть надо опять учитывать матрицу мировую, матрицу проекции и матрицу взгляда, и хорошо еще, если их хватит. Так ведь?
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Да блин понятно, у меня курсач по рейтрейсингу был Но какого черта! Почему было не ввести соответсвующие действия в движок? Тем более, что если задействован z-buffer, то можно и id треугольника сохранять. Зараза...
Ты прикинь сколько это дополнительно памяти потребует... И лишние действия при отрисовки тоже ни кому не нужны. SM>А сейчас придется выяснять, на какие именно матрицы умножаются вектора при проецировании, и раскручивать все это назад. То есть надо опять учитывать матрицу мировую, матрицу проекции и матрицу взгляда, и хорошо еще, если их хватит. Так ведь?
Угу. Иначе ни как.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Хе, спасибо, уже нашел, но вот как его поюзать, если теперь это элемент DirectShow — загадка. Сам DirectShow ведь мне не нужен.
SM>Slicer
Я бы юзал DX3D9, а именно спрайты... Накладываешь на них текстуры и выкладываешь в бакбуфер.. Флипаешь и радуешься... В результате тот же DD...
Ну а положение мышки по координатам думаю и сам знаешь как отследить )
По этим же координатам просматриваешь какие спрайты у тебя там выкладываются и делаешь выводы.. Андестенд? )
Кстати говоря, интерфейс DD7 в DX9 остался по принципу преемственности. Сам не проверял , но насколько понимаю — писать ты можешь и на SDK9 используя интерфейс DD7. Хотя кажется даже проверял )) Только давно это было...
Хелпа в новых МСДНах по DD7 нет... Но это и понятно — на кой он нужен если то же самое может и D3D делать? Но если очень надо по старинке, можно юзать старый МСДН за 1999 год... Как я делал год-два назад )))