ФОРУМ

Список разделов форума => Статьи => : Robot 01 Mar 2008 - 20:14:05



: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Robot 01 Mar 2008 - 20:14:05
Водная поверхность в трехмерных приложениях (на DirectX и C++)
Артём Мерец "Scart"
Реализация водной поверхности в 3D приложениях с освещением, волнами и
отражением от объекта на C++ и DirectX.


http://www.uraldev.ru/articles/id/21 (http://www.uraldev.ru/articles/id/21)


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: alex f 07 Apr 2008 - 02:46:45
: Робот
Водная поверхность в трехмерных приложениях (на DirectX и C++)
Мерец Артем "Scart"
Реализация водной поверхности в 3D приложениях с освещением, волнами и
отражением от объекта на C++ и DirectX.


http://www.uraldev.ru/articles/index.php?id=21 (http://www.uraldev.ru/articles/index.php?id=21)
Хотелось бы сказать по данному примеру пару слов. Сразу отмечу, что кодингом под DX9 начал заниматься недавно. В общем, исходник не компилится. Выдает ошибку при загрузке эффекта. Да, и еще-- в  Direct-е я не нашел механизма реализации "BeginPass() и EndPass()". Подскажите, плиииз, в чем дело? Очень уж хочется взять пример за основу в написании задуманной мною игры.


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Scart 11 Apr 2008 - 14:08:04
Загрузка эффекта не относится к компиляции, поэтому хотельось бы уточнить - действительно исходник не компилится?
Ошибку, естественно, надо было показать (желательно скрином), ибо у меня пример отлично работает без всяких ошибок.
Вся работа с эффектами в отдельном header'е (EffectClass.h). Реализация BeginPass и EndPass у меня быть не должно, ибо это функция не моя, а microsoft'цев (в файле d3dx9effect.h). Сюдя потому, что тебя беспокоит это и невозможность компиляции эффекта, рискну предположить, что DXSDK у тебя не установлен или старая версия стоит.


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: alex f 12 Apr 2008 - 03:13:54
Откомпилить проект всетаки удалось. Но при запуске приложения вылетает следуюющая ошибка: "EFFECT_Water.fx(86): error X3000: syntax error: unexpected token ';' ". Ошибку, по видимому, возвращает процедура D3DXCreateEffectFromFile в pBufferError, тоесть при инициализации файла эффекта. Естественно, дальнейшая работа с эффектом просто невозможна.
DX SDK у меня под DirectX 9 от 2002г. , но D3DXCreateEffectFromFile там есть, да и компилю на Visual C++ 2008.   ???????????????????????


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Scart 19 Apr 2008 - 14:01:05
На самом деле SDK от 2002 года уже, мягко говоря, старовато. Я только что еще раз запустил и скомпилировал проект - все гладко. Более того, на всякий случай, скачал пример, которые на сайте (быть может отправил сюда не ту версию), но нет - все также отлично работает.
Советую просто скачать SDK посвяжее (и еще, я компилировал в 2003 студии, но это, думаю, не имеет никакого отношения к проблеме). Если нет возможности скачать SDK целиком, то хотябы заголовочные файлы и библиотеки.


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: keYMax 21 Apr 2008 - 23:21:28
[!--quoteo--][div class=\'quotetop\']Цитата[/div][div class=\'quotemain\'][!--quotec--]и еще, я компилировал в 2003 студии, но это, думаю, не имеет никакого отношения к проблеме[/quote]

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


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Mikle 22 Apr 2008 - 19:32:52
Я так понял, EXEшник в статье не финальный, а первой стадии? Или где там преломления?
Просто у меня нет Визуал студии, не могу сам скомпилировать.
Еще создается впечатление, что программа неоправданно тормозит, к сожалению нет счетчика FPS. Железо - Athlon64 3000, GF6600 GT. Или, возможно, это из-за некорректной обработки ввода (мыши).
Не понял, там есть зависимость коэффициентов отражения и преломления от угла зрения?
Хотелось бы посмотреть не работу кода, описанного в статье, чтобы было видно дно, а так же предметы, частично погруженные в воду.
Я сам хотел принять участие в конкурсе, но, что-то, так и не собрался. Вот демка:
http://tuapse-mikle.narod.ru/WaterDemo.rar (http://tuapse-mikle.narod.ru/WaterDemo.rar)
1 мб.
Тут есть и отражения, и преломления, и, главное, коэффициенты зависят от угла зрения.
Управление стандартное, "I" - инверсия мыши, "Home"\"End" - регулировка волнения.
В Висте не пойдет без dx8vb.dll из состава DirectX8.


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Elec3C 26 Jun 2008 - 20:41:50
Есть трабл: при повороте вдоль оси z, отражение начинает пемещаться.
Нужно исправлять здесь (Water.h->CWATER::PreRenderForReflection(Camera *Cam)):

...
D3DXVECTOR3 CamPos = Cam->GetCamPos();
D3DXVECTOR3 ViewPos = Cam->GetViewPos();

Cam->GetViewMat(&oldMatView);
D3DXVECTOR3 h = CamPos;
float tmp = CamPos.y-ObjPos.y;
h.y = CamPos.y - 2*tmp;
D3DXVECTOR3 hv = ViewPos;
float tmpv = ViewPos.y-ObjPos.y;
hv.y = ViewPos.y - 2*tmpv;

D3DXMATRIX MatrixView;
D3DXMatrixLookAtLH(&MatrixView,&h,&hv, &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
...


: Водная поверхность в трехмерных приложениях (на DirectX и C++)
: Scart 23 Sep 2009 - 14:37:55
Так как меня уже третий человек просит скинуть заголовочные файлы от sdk, под котором писалась демо-сцена - покажу ссылку на них тут (http://dump.ru/file/3462985).

P.S. Насчет самой демки, у меня много различных демо-сцен с водной поверхностью, так как в свое время очень плотно этим занимался, но, к сожалению, демки с такой сценой не нашел, виною тому срок времени, прошедшего с того времени... Если есть конкретные вопросы - с радостью помогу, лучше через мыло или лс. А сейчас я занят несколько другой областью, хотя, по прежнему, связанной с приложениям, моделирующими виртуальную реальность, но теперь скорее со взаимодействием оной с человеком, так сказать, работаем над интерактивностью. Взаимодействием человека в реальности с виртуальным миром по средствам двух видео камер)