Форум: "Игры";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизМультикамерный вывод. Найти похожие ветки
← →
MrAngel (2004-06-09 19:09) [0]3D MAX помните? Там есть четыре вида по умолчанию при открытии приложения.
По сути дела документ открыт как одна сцена, есть четыре камеры (с соответствующими настройками), которые "показывают" сцену в этих четырёх окошечках.
Вопрос простой как это сделать?
Есть вариант создать для каждого окошечка IDIRECT3DDEVICE9, где можно задать HWND окошечка. Но ! Тогда нам придётся дублировать данные всей сцены, там ведь нужно вертексные и инексные буффера заного создавать. По моему эти буффера использовать из первого созданного IDIRECT3DDEVICE9 нельзя. Следовательно нам нужно будет не мерено памяти для такого способа.
Есть вариант "каким то образом" подменивать HWND, куда будет выводиться картинка, во время рендера всей сцены. Но как ?
Есть какие-нибудь идеи ?
← →
Darthman © (2004-06-09 21:19) [1]В OpenGL через GLViewPorts делается.
← →
MrAngel (2004-06-09 23:49) [2]Не тут дело с директом связано. Но помоему я уже разобрался - надо IDirect3DSurface9 использовать.
← →
MrAngel (2004-06-11 00:55) [3]Нда - не тут то было.
Есть IDIRECT3DDEVICE9.CreateRenderTarget - создаёт IDirect3DSurface9 без проблем.
в IDirect3DSurface9.GetDC - выдаёт ошибку. По моему именно через этот метод надо указывать хЭндл.
Может у кого есть примеры как с этим работать ?
← →
A22 (2004-06-11 13:51) [4]по-моему у майкрософт к директу были примеры...
но если нет варианта через вьюпорты (просто не делал, звиняй уж, точно не скажу), то могу предложить такой вариант: создавай N текстур с указанием того, что они могут быть использованы в качестве RenderTarget, переключай на 1-й, рендерь нужный кадр, потом на 2, рендерь и т.д.
Далее делаешь N квадратов, при их создании опираешься на оконные координаты (поcмотри FVF), и выводи эти квады, используя свои рендертаргеты в качестве текстур. Вот пример как рендерить в текстуру:
LPDIRECT3DSURFACE9 pSurface;
Texture->GetSurfaceLevel( 0, &pSurface );
m_pd3dDevice->SetRenderTarget(0, pSurface);
RenderViewport1();
pSurface->Release();
m_pd3dDevice->SetRenderTarget(0, DefaultSurface);
← →
NailMan © (2004-06-11 14:26) [5]Был у мелкомягкого в DX SDK такой пример как что-то-такое-CULL. Там на одном экране было 2 окна - в одном был общий вид на сцену(общая камера), а второй вид "из глаз", тобишь из глаз фрустума.
Вот как раз тебе это и нужно.
Насколько я помню делалось это через Vieport-ы.
---
WBR, NailMan aka 2:5020/3337.13
← →
MrAngel (2004-06-11 20:55) [6]Нет нет, ребята - вью порты точно не подходят. Я выяснил (наконец то) как это делается. Оказывается вообще не через IDirect3DSurface9.GetDC. Да IDirect3DSurface9 там используется, но лишь отчасти.
А нашёл я это дело вот здесь http://www.codesampler.com/dx9src.htm - под пунктом "Swap Chains". Отличный ресурс для начинающих - по крайней мере эта страница.
Спасибо за помощь anyway :)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.029 c