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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Общие вопросы по MDX, MDX для новичков 
:(
    Опции темы
EgoBrain
Дата 11.11.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Предлагаю писать сюда разнообразные вопросы общего плана, касающиеся MDX.
Для начала такие общие вопросы: СБРОС УСТРОЙСТВА - обрабатываю сброс устройства
Код

...
 device.DeviceReset += new EventHandler(OnDeviceReset);
...
 private void OnDeviceReset(object sender, EventArgs e)
        {
            device.PresentationParameters.BackBufferWidth = 320;
            device.PresentationParameters.BackBufferHeight = 200;
        }

Заодно вывожу в тексте текущее разрешение.
Код

protected override void OnPaint(PaintEventArgs e)
        {
             ...
             Draw2DText(device.PresentationParameters.BackBufferWidth.ToString() +
            "\n" + device.PresentationParameters.BackBufferHeight.ToString(), 5, 5, Color.White);
             ...
         }
 
В тексте выводится правильно, а вот картинка получается с другим разрешением. Почему?

Device.Reset() - когда можно использовать? Почему нельзя в обработчике события DeviceReset?
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 11.11.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



DeviceReset генерится после сброса девайса, когда уже ничего нельзя поменять. Чтобы установить новые размеры и т.п., нужно самостоятельно вызвать device.Reset() с новыми значениями в PresentationParameters.

P.S. Сбросом девайса при ресайзе окна занимается инфраструктура D3DX, на основе которой кстати и сделан MDX (как обёртка). К примеру в XNA мы должны ловить событие SizeChanged окна и выполнять сброс девайса самостоятельно, иначе размер backbuffer-а останется как до ресайза. То же самое в "обычном DirectX" на C++, если не используется D3DX.


--------------------
user posted image
PM MAIL WWW   Вверх
EgoBrain
Дата 12.11.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По какому событию самостоятельно вызывать DeviceReset, если я хочу чтобы при любых размеров окна буфер был строго определен?
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 12.11.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(EgoBrain @  12.11.2008,  13:54 Найти цитируемый пост)
если я хочу чтобы при любых размеров окна буфер был строго определен?

Задаёшь размер 1 раз при создании девайса, подписываешься на device.DeviceResizing, пишешь обработчик:

Код
        void device_DeviceResizing(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
        }



--------------------
user posted image
PM MAIL WWW   Вверх
Folk40
Дата 13.11.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А может создать темку типа такой по XNA?Или эту назвать XNA и MDX?Прост MDX устарел вроде.

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


Опытный
**


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

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



Цитата(Folk40 @ 13.11.2008,  19:08)
А может создать темку типа такой по XNA?Или эту назвать XNA и MDX?Прост MDX устарел вроде.

З.Ы. XNA рулит...))

Несогласен. Зачем мешать две разные темы? Что тебе мешает такую же тему по XNA сделать?
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 18.11.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



ХНА не совсем так чтобы "рулит"  smile 

Просто некоторые вещи из Direct3D в ней сильно ООП-изированы и упрощены. С другой стороны, 20% функционала D3D в XNA недоступно.

Если выбирать, то я - за SlimDX.


--------------------
user posted image
PM MAIL WWW   Вверх
Folk40
Дата 18.11.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну я просто эт в отношении того,что для нубов(в частности для меня) XNA - самое то
PM MAIL   Вверх
EgoBrain
Дата 18.11.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так что функциональнее XNA или MDX? 
Как быть с контролами в MDX? Я привязываю окно программы к D3D и весь WinForms интерфейс жестоко тормозит, даже обычный MessageBox 5 минут ждать приходится  smile  Как с этим быть?
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 18.11.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(EgoBrain @  18.11.2008,  14:33 Найти цитируемый пост)
Я привязываю окно программы к D3D и весь WinForms интерфейс жестоко тормозит, даже обычный MessageBox 5 минут ждать приходится

Если всё процессорное время кидается на отрисовку кадра, то естессно что ни на что другое его не будет оставаться.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
megel
Дата 21.11.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть вопрос по mdx.
В классе Mesh можно найти цифры которые разделяют индексы модели на subset's
типо 
1 - 33 материал № 1
33 -356 материал №2 и тд.

DrawSubset не предлагать - он только рисует
PM MAIL   Вверх
EgoBrain
Дата 22.11.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(megel @ 21.11.2008,  21:20)
есть вопрос по mdx.
В классе Mesh можно найти цифры которые разделяют индексы модели на subset's
типо 
1 - 33 материал № 1
33 -356 материал №2 и тд.

DrawSubset не предлагать - он только рисует

Чтобы получить ответ, необходимо задать вопрос, а это похоже на утверждение.

Цитата

Если всё процессорное время кидается на отрисовку кадра, то естессно что ни на что другое его не будет оставаться.  smile 


Так как же все-таки в одном оконном приложении совмещать и рисование D3D и контролов так, чтобы они друг у дурга производительность не перебивали?  smile  

Это сообщение отредактировал(а) EgoBrain - 22.11.2008, 12:28
PM MAIL ICQ Skype   Вверх
EgoBrain
Дата 13.1.2009, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Задаю объекту текстуру, и она выводится в размноженном виде. Как сделать чтоб просто на всю поверхность растягивалась? Чувствую нада более сложную перегрузку метода Textrure.FromFile юзать, но какую и с какими параметрами?
Код

//------Функция загрузки сетки-------------------------------------------------------------------------------
        public void LoadMesh(string file, ref Mesh mesh, string texturefilename, ref Material[] meshMaterials,
            ref Texture[] meshTextures)
        {
            ExtendedMaterial[] mtrl;

            mesh = Mesh.FromFile(file, MeshFlags.Managed, device, out mtrl);

            if ((mtrl != null) && (mtrl.Length > 0))
            {
                meshMaterials = new Material[mtrl.Length];
                meshTextures = new Texture[mtrl.Length];

                for (int i = 0; i < mtrl.Length; i++)
                {
                    meshMaterials[i] = mtrl[i].Material3D;

                    if (mtrl[i].TextureFilename != null && mtrl[i].TextureFilename != string.Empty)
                    {
                        try
                        {
                            meshTextures[i] = TextureLoader.FromFile(device,
                                Path.GetDirectoryName(file) + mtrl[i].TextureFilename);
                        }
                        catch
                        {

                        }
                    }
                    else
                        if (texturefilename != null && texturefilename != string.Empty)
                        {
                            meshTextures[i] = TextureLoader.FromFile(device,
                                texturefilename);
                        }
                }
            }
        }
Код

//------Функция рисования сетки----------------------------------------------------------------------------
        private void DrawMesh(ref Mesh mesh, ref Material[] meshMaterials,
                    ref Texture[] meshTextures, float yaw, float pitch, float roll, float x, float y, float z,
                    float xScaling, float yScaling, float zScaling)
        {
            device.Transform.World = Matrix.RotationYawPitchRoll(yaw, pitch, roll) *
                 Matrix.Scaling(xScaling, yScaling, zScaling) * Matrix.Translation(x, y, z) *
                 Matrix.RotationX(YWorldAround) * Matrix.RotationY(XWorldAround);

            for (int i = 0; i < meshMaterials.Length; i++)
            {
                device.Material = meshMaterials[i];
                if (meshTextures.Length > 0)
                    device.SetTexture(0, meshTextures[i]);
                mesh.DrawSubset(i);
            }

            device.Material = new Material();
            device.SetTexture(0, null);
        }

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


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата

 void DrawMesh(ref Mesh mesh, ref Material[] meshMaterials,
                    ref Texture[] meshTextures,


Оффтоп: Сразу скажу, ref не нужен, т.к. это и так ссылочные типы. ref употребляется с value-типами. 

по теме, /me summons mr.DUDA


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 14.1.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



В эффекте сделай умножение текстурных координат на число меньшее чем 1, текстура "растянется".


--------------------
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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