![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
Здравствуйте!
Реально ли совместить в одном проекте для Visual C++ DirectX (3D) и PhysX ??? Например, PhysX - создаёт физику и обрабатывает эффекты, а Direct3D - это всё выводит на экран. (А то в SDK PhysX'a есть примеры работы только с OpenGL, но он мне не подходит). Спасибо! |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Библиотека PhysX и создана для того чтобы интегрировать её с графической - сама-по-себе PhysX не имеет средств для вывода.
В общем смысле каждый этап симуляции выглядит так: 1 - шаг симуляции физического мира 2 - получение матриц/кватернионов вращения объектов и их координат 3 - поворот и перемещение всех графических объектов согласно этим полученным значениям их физических эквивалентов В примерах использована OpenGL потому что это открытая (бесплатная) библиотека. ![]() |
|||
|
||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
Вот только нашёл PhysXViewer и написан он на DirectX DXUT. Но чего-то не могу ничего толкового по нём найти (книги, уроки). Я так понимаю, DXUT - аналог GLUT, но только для DirectX ? Получается нужно учить DXUT ! Если кто-то знаком с ним, прошу, дайте, пожалуйста, ссылки по DXUT для DirectX 9.
З.Ы. Где-то читал, что что-то несовместимо между DirectX 9 DXUT и PhysX, то ли матрицы преобразования...? Буду тоже продолжать искать инфу. Как кто-то говорил, лучший учебник для программиста - исходный код. Если у кого-то есть исходники PhysX + DXUT, то дайте, пожалуйста, тоже. У меня на PhysX SDK 2.8.1 даже этот PhysXViewer не компилируется. |
|||
|
||||
BEOWOLF |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 24.8.2007 Репутация: нет Всего: 2 |
dehax, при установке DirectX SDK, устанавливаются также примеры работы под директ. Все эти примеры используют тот самый DXUT - простой движок с открытым исходным кодом, исходники есть там же. Описание этих примеров есть в хэлпе к DirectX SDK. Кстати, очень неплохой и удобный движок, его легко использовать, и на его основе разрослись движки некоторых игр. А вообще DirectX & PhysX - это лучший выбор графики и физики. Скачать DirectX SDK можно с сайта микрософта, версия за август 2009 - последняя, поддерживающая XP+SP2, те что выше - под SP3 и семёрку. Ещё для написания сценариев игр могу посоветовать Lua: при рендеринге каждого фрейма вызываешь луа-функцию, которая возобновляет работу луа-потоков, выполняющих какие-то действия по логике игры.
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 1 Всего: 10 |
Это очень спорное утверждение. Не буду говорить по поводу DirectX, тут пусть каждый решает для себя сам, а вот PhysX имеет один серьезный объективный недостаток: он работает только на карточках nv. В противовес ему разработан открытый движок Bullet, благодаря AMD теперь использующий открытый стандарт OpenCL, одинаково обрабатываемый как nv, так и ATI-карточками. Но если не требуется физика жидкостей или физика мягких тел, вполне можно обойтись процессорным Havok'ом. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
BEOWOLF, BorisVorontsov, спасибо за информацию!
я тоже так думал, пока не прочитал следующий пост:
этого я не знал! у меня стоит видеокарта NV и с такими проблемами не сталкивался. Полазил в Инете и нарыл кучу информации, что уже некоторые карты ATI (напр. Radeon) поддерживают PhysX, думаю в будущем ATI будет выпускать все карты с поддержкой PhysX. А пока что у меня возник такой вопрос: можно ли в одной игре использовать и PhysX, и Bullet ? (хотя думаю, что нет). Или же можно, используя PhysX сделать так, чтобы если есть аппаратная поддержка PhysX, то физику расчитывает GPU, а если нет - то CPU ??? P.S. Я играл в GTA IV (Bullet) и в MassEffect 2 (PhysX). И там, и там физика очень понравилась! P.P.S. Lua понравился, оказывается с ним много игр было написано! P.P.P.S. BEOWOLF, BorisVorontsov, а вы писали (или пробовали писать) игры с физикой? Если да, то что использовали? Это сообщение отредактировал(а) dehax - 29.8.2011, 20:39 |
|||
|
||||
BorisVorontsov |
|
||||||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 1 Всего: 10 |
Никакие карты ATI не поддерживают PhysX, потому что он работает на CUDA, проприетарной технологии nv.
Одновременно? Зачем?
Можно, конечно. Но CPU не способен обсчитать физику сложнее физики твердых тел с более-менее приемлемой производительностью И там и там примитивная физика твердых тел Писал, но использовал собственную физику -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
||||||
|
|||||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
Познакомился с Bullet, посмотрел демки и уже хотел перейти с PhysX на него, но как посмотрел исходники примеров...
![]() Это называется, да здравствует Glut ! ![]() BorisVorontsov, спасибо ещё раз! |
|||
|
||||
BEOWOLF |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 24.8.2007 Репутация: нет Всего: 2 |
Нужно уточнить: у NVidea есть аппаратная поддержка PhysX, и в этом огромное преимущество. Если видеокарта без аппаратной поддержки, то есть ниже 9800, то PhysX будет работать точно также, как и все остальные физические движки - чисто программно ;) Вообще PhysX разрабатывается давно, и раньше распространялся под брендом Ageia, они даже выпускали никому неизвестные физические карты под этот движок, и в это время назревал вопрос интеграции физики на видеокарты. Всё изменилось пару лет назад, когда Ageia была выкуплена NV. Раньше использовал движок от newtondynamics - отличный движок для эмуляции физики сплошных твёрдых тел. На сегодняшний день подобные движки использовать можно только в простых задачах, там заметна большая нагрузка на процессор при попытке рендеринга на больших fps.
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 1 Всего: 10 |
А ты уверен, что тебе нужен именно такой комбайн, как Bullet или PhysX? Подозреваю, что для твоих задач хватит Intel'овского Havok'а Это сообщение отредактировал(а) BorisVorontsov - 30.8.2011, 21:48 -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
Я всё же остановлюсь на DirectX9 DXUT + PhysX. Думаю в серьёзно заняться разработкой игр, так что буду учиться на примерах, набираться опыта.
Сейчас хотел в DXUT для Direct3D 9 создать примитив Box. В DXUT\Optional есть DXUTShape.cpp, в котором есть функция:
но используется только ID3D10Device, а мне нужно для 9, а не 10 версии. Я так понимаю, придётся вручную писать функцию аналог, или импортировать из *.x (X-mesh) ? |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 1 Всего: 10 |
Если уж решил остановиться на PhysX, то учти работу своей программы на системах с видеокартами ATI/AMD. И в перспективе PhysX вряд ли на них заработает, для этого нет никаких предпосылок
Функция просто оборачивает низкоуровневую MakeBox, оперирующую буфером вершин. Ты можешь задействовать её непосредственно -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
то есть, если есть карта NVidia, то нужно сделать "главным" GPU, а если нет - CPU, или это всё само будет обрабатываться? (мне кажется, что само) Да, и если главным будет CPU, то можно будет как-нибудь это проверить, чтобы вообще тогда отключить физику, которая сложнее физики твёрдых тел, а будет просчитываться только остальная физика? |
|||
|
||||
BEOWOLF |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 24.8.2007 Репутация: нет Всего: 2 |
Можно работать и с 10-м и 9-м директиксом в одном коде, вобщем-то DXUT так и делает... Что касается физики, то например движок Newton представляет собой только одну DLL, экспортирующую функции для расчётов, PhysX - устанавливает ещё драйвера, работающие или не работающие с железом. Существует также возможность установить 2 видеокарты от NV по технологии SLI, так, чтоб одна занималась только физикой, другая только графикой. Кстати, это ещё даст возможность подключения больше 2 мониторов... А вообще при разработке больше времени тратится на графику и логику игры, а физические модели - значительно проще графических мешей.
|
|||
|
||||
dehax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 5.1.2011 Репутация: нет Всего: 1 |
Нашёл ещё один учебник "Франк Луна - Введение в программирование трехмерных игр с DirectX9". И там познакомился с функцией:
В примере SimpleSample (DXUT) я использовал эту функцию. Но вместо изображения чайника получил непонятно что: ![]() Почему так получается? P.S. Когда использовал эту функцию в обычном примере (без DXUT), то получался чайник. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |