Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод окошка DirectX на форму, как реализовать? 
:(
    Опции темы
Lеstat
  Дата 26.8.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Вобщем хотелось бы сделать редактор уровней с использованием форм.
На форме лежат всякие кнопочки,  менюшки и тд, а графику выводим в такой "прямоугольник" на этой же форме.
Очень хотелось бы узнать как такое можно реализовать... 
В поиске мне ничего путного не выпало, сам намучился не знаю что делать! 
Интересуют примеры или просто рекомендации по реализации на C++ или C# в VS2005
PM MAIL ICQ   Вверх
NikotiN
Дата 27.8.2006, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



1. создать весь интерфейс на основе directx, т.е. кнопочка - это тоже спрайт
2. выводи на любой другой контрол, при создании девайса укажи чё нить другое, а не форму.
PM MAIL   Вверх
Able
Дата 27.8.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: 1
Всего: 2



Ищите в DirectX SDK пример CustomUI Direct3D Sample открывайте исходник, и вуаля всё как на лодони, что не понятно спрашивайте  smile 
Хотя рендер можно выводить и на кнопку и на поле и на часть формы  smile 
Редактор то для 2D?
PM MAIL WWW ICQ   Вверх
Lеstat
Дата 27.8.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(Able @ 27.8.2006,  13:07)
Ищите в DirectX SDK пример CustomUI Direct3D Sample открывайте исходник, и вуаля всё как на лодони, что не понятно спрашивайте  smile 
Хотя рендер можно выводить и на кнопку и на поле и на часть формы  smile 
Редактор то для 2D?

Посомтрел пример... у меня в нем все элементы управления рисуются внутри области которую DirectX выдает, а я хочу эту область поместить на форму обычную и выводить в нее кнопочки, менюшки мне не нужно.
Попадаются примеры на С#, но на C++ не видел конкретных примеров с формами.
Мне бы хотелось использовать C++
Я создаю обычный проект Windows Forms Application.
Думаю можно кинуть на форму компонент "Panel" и выводить окошко DirectX'а с размерами и положением этого компонента.
Получиться так что на форме будет просто область в которой рисуется картинка.
Для примера могу подрисовать эту область в фотошопе =)
user posted image

Насчет самого редактора:
Хочу сделать игровой редактор и расставлять им модели по уровню. 
Для начала нужно сделать вывод графики как на приведенном рисунке, а не во всю форму или фуллскрин, реализовать загрузку моделей  и простую функцию перемещения моделей в горизонтальной плоскости с помощью четырех кнопок.
А также прога должна сохранить список моделей и их координаты в текстовый файл.

PM MAIL ICQ   Вверх
Able
Дата 27.8.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: 1
Всего: 2



Работаете с в трехмерном пространстве? 
Как уже сказал NikotiN, просто: 
Цитата

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

По самому С++, не помню точно по-моему так: (пишу по памяти)
Код

HRESULT hr = pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd (куда рендерить укажите здесь),
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&params,
&pDevice);


PM MAIL WWW ICQ   Вверх
Lеstat
Дата 28.8.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата(Able @ 27.8.2006,  19:20)
Работаете в трехмерном пространстве? 
да... пытаюсь

Цитата(Able @ 27.8.2006,  19:20)

Как уже сказал NikotiN, просто: 
Цитата

выводи на любой другой контрол, при создании девайса укажи чё нить другое, а не форму
тут когда я форму сам создаю у меня есть ее hWnd, а hWnd элементов формы я не знаю как получить
в инете вычитал, что их вобще нет!

Цитата(Able @ 27.8.2006,  19:20)

По самому С++, не помню точно по-моему так: (пишу по памяти)
Код

HRESULT hr = pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd (куда рендерить укажите здесь),
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&params,
&pDevice);
Разобрался с этой функцией, только где hWnd панели или кнопки взять? 
В одном месте теперь ошибка... с остальным все понятно!!!

Это сообщение отредактировал(а) Lеstat - 28.8.2006, 14:00
PM MAIL ICQ   Вверх
Able
Дата 28.8.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: 1
Всего: 2



По пробуйте вместо hWnd делать ссылку на компонент... 
PM MAIL WWW ICQ   Вверх
Lеstat
Дата 28.8.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



Вопрос снимается! Огромное спасибо всем кто помог!!!
Наконец-то получилосьsmile  
Могу рисовать в области DirectX'а, которая рисуется только на компаненте "panel1"

Теперь столкнулся с такой проблемой не пойму куда мне цикл рендера затолкать!
Т.е. если я ставлю цикл рендера в функцию, которая вызывается при появлении формы прога как-бы виснет в этом месте, но рендерит.
В каком месте программы выгоднее рендерить?


Это сообщение отредактировал(а) Lеstat - 28.8.2006, 23:18
PM MAIL ICQ   Вверх
$tatic
Дата 29.8.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



цикл рендера должен содержать вызов Application.DoEvents() (это на шарпе для дотнетовой проги) иначе прога будет подвисать. Т.е. должна быть вызвана обработка сообщений, поступающих на форму.
Попробуй сделать контрол, наследующий от Panel. В него добавь функцию рендера
PM MAIL   Вверх
Lеstat
Дата 29.8.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

Репутация: нет
Всего: нет



я пока сделал рендер по таймеру...
получается 40-70 FPS
что-то мне кажется слишком сильно тормозит... 
там только один треугольник выводится
попробую переделать!
PM MAIL ICQ   Вверх
NikotiN
Дата 29.8.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.7.2006

Репутация: нет
Всего: нет



можно повесить и на application.idle
PM MAIL   Вверх
$tatic
Дата 29.8.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Lеstat, нужно поставить в параметрах создаваемого устройства моментальное обновление. Иначе будет рендеринг максимум с частотой развертки экрана.
Код

PresentParameters parms = new PresentParameters();
//по умолчанию PresentInterval.Default == PresentInterval.One;
parms.PresentationInterval = PresentInterval.Immediate;

PM MAIL   Вверх
ILAgent
Дата 30.8.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 1.3.2006

Репутация: нет
Всего: нет



Цитата(Lеstat @ 29.8.2006,  14:09)
я пока сделал рендер по таймеру...
получается 40-70 FPS
что-то мне кажется слишком сильно тормозит... 
там только один треугольник выводится
попробую переделать!

Можно простой обрабатывать, а можно и в параллельном потоке попробовать.
PM MAIL   Вверх
$tatic
Дата 30.8.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Цитата(ILAgent @  30.8.2006,  02:28 Найти цитируемый пост)
рендер по таймеру

Рендер в программах DirectX проводится не по таймеру, а в бесконечном цикле. Наподобие такого кода:
Код

        public static void Main()
        {
            MainForm form = new MainForm();
            form.Show();
            while (form.Created)
            {
                form.Render();
                Application.DoEvents();
            }
        }

PM MAIL   Вверх
Able
  Дата 30.8.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: 1
Всего: 2



Или с++:
Код

while(true){здесь что и как}


Ниже пример:


Это сообщение отредактировал(а) Able - 30.8.2006, 14:25

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  ______.rar 57,32 Kb
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.