Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Direct3d и ViewPort


Автор: dmitry272727 19.1.2007, 13:32
Подскажите пожалуйста принцип, по которому сделать следующее:

В Delphi + Directx9 полноэкранная программа, в окне которой какая-то часть- это 3D а другая -это 2D(текст, картинки и т.п.).

У меня есть вариант:
Сделать 2 фрэйма и один  сделать Direct3d, а другой DirectDraw.

Насколько этот вариант работоспособен.

Спасибо.

Автор: Kesh 19.1.2007, 14:54
Все это делается в 3d. Для вывода 2d-объектов используются спрайты... Производительность не страдает...

Автор: Bitter 19.1.2007, 17:32
Да, именно так! Используй ID3DXSprite. Могу выложить класс работы со спрайтами и класс работы с текстом (если нужно).

Добавлено @ 17:32 
только с использованием DirectX8

Автор: dmitry272727 19.1.2007, 18:55
Я как то плохо описал свою проблему.

Мне нужно, что бы часть экрана использовала Direct3d, а другая НЕ ЗНАЮ какую технологию, но что бы она не перекрывала Direct3D.

В случае использования ID3DXSprite, часть перекрывается.

Спасибо.

Автор: Bitter 20.1.2007, 01:58
Что-то не понятно... Direct3D в полноэкранном режиме работает? Ну сделайте две формы, в одну Direct3D (в оконном режиме) а во вторую что-то другое.
Если нужен полноэкранный режим, то есть функция

 D3Device.SetViewport(aVP);

где aVP:TD3DViewport8;

заполняется так:

 aVP.X:=aX;
 aVP.Y:=aY;
 aVP.Width:=aW;
 aVP.Height:=aH;
 aVP.MinZ:=aMinZ;
 aVP.MaxZ:=aMaxZ;

два последних параметра - буфер глубины (Z буффер)
если нужно, чтобы объект находился всё время сзади остальных (не смотря на его координаты) - ставим

 aVP.MinZ:=0;
 aVP.MaxZ:=0;

спереди

 aVP.MinZ:=1;
 aVP.MaxZ:=1;

обычно принимается равным

 aVP.MinZ:=0;
 aVP.MaxZ:=1;




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)