Модераторы: Partizan, gambit
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Managed DirectX. Появляются искажения.. не при каждом запуске! 
:(
    Опции темы
Kurt
Дата 14.10.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Возникла необходимость работы с Managed DirectX. (теперь буду спецом, блин. smile )
Сейчас делаю первые шаги - верчу подсвеченную пирамидку. Все сделано согласно туториалам, что шли вместе с DX9SDK.
Запускается приложение, а дальше два варианта развития событий:
1) все красиво отрисовывается. (показано в прикрепленном файле t0.jpg);
2) изображение искажается - появляются какие-то дополнительные плоскости, хотя в коде ничего подобного нет (файлы t1.jpg и t2.jpg).
Т.е. происходит следующее - при запуске спонтанно появляются вышеописанные искажения. Раз запущу - все хорошо. Закрою и снова запущу эту же программу - появляются какие-то левые плоскости.
Хотелось бы уточнить, это глюки у меня или у самого Managed DX? Кто-нибудь встречался с подобным? Как это решить?

З.Ы. Используется .NET Framework 2.0
Я все запаковал в архив вместе с самим проектом. На "красоту" кода не обращайте внимания - я просто тренируюсь. smile

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  trouble.zip 103,06 Kb


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
mr.DUDA
Дата 14.10.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



У меня референсы на DirectX светятся жёлтым, хотя установлен DX SDK 9.0 (Summer 2004). Что не так ? smile
Добавлено @ 19:50
З.Ы. навскидку: может быть отключить _presentParams.EnableAutoDepthStencil = true; ?


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


Увлеченный
***


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

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



Цитата(mr @ 14.10.2005, 19:49)
У меня референсы на DirectX светятся жёлтым, хотя установлен DX SDK 9.0 (Summer 2004). Что не так ? smile

ну, поправь референсы в св-вах проекта. Нужны Microsoft.DirectX, Microsoft.DirectX.Direct3D и Microsoft.DirectX.Direct3DX.
Цитата

З.Ы. навскидку: может быть отключить  _presentParams.EnableAutoDepthStencil = true; ?

не. тогда вот на этой строчке:
Цитата
_device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);

выкидывается Exception.
Да и в SDK-примерах _presentParams.EnableAutoDepthStencil поставлено в true.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
-ser-
Дата 15.10.2005, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



у меня во время выполнения выдает Microsoft.DirectX.Direct3D.InvalidCallException was unhandled в
Код

_device.DrawPrimitives( PrimitiveType.TriangleList, 0, _myPyramid.TriangleCount);

всегда при _myPyramid.TriangleCount = 18



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 15.10.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ser @ 15.10.2005, 10:59)
у меня во время выполнения выдает Microsoft.DirectX.Direct3D.InvalidCallException was unhandled в
Код
_device.DrawPrimitives( PrimitiveType.TriangleList, 0, _myPyramid.TriangleCount);
всегда при _myPyramid.TriangleCount = 18

Это потому что инициализация массива _vertexArray производится явно для каждого элемента, а не в цикле:
Код

            _vertexArray[0] = new My3DVertex(-1.0f, -1.0f, -1.0f, Color.Silver);
            _vertexArray[1] = new My3DVertex(-1.0f, -1.0f, 1.0f, Color.Silver);
            _vertexArray[2] = new My3DVertex(1.0f, -1.0f, 1.0f, Color.Silver);

// и так далее

и получается, что сколько ни указывай треугольников, но проинициализированы будут только первые 18 вершин - т.е. 6 полигонов, пирамида.

Пофиксить ошибку с искажениями можно так:
Код

    class MyPyramid
    {

// ...
        public int TriangleCount
        {
            get { return _vertexCount / 3; }
        }


Всё оказалось очень просто: метод
Код

             _device.DrawPrimitives(PrimitiveType.TriangleList, 0, _myPyramid.TriangleCount);

выводит заданное количество треугольников (т.к. PrimitiveType.TriangleList), а их количество равно кол-ву вершин делённому на 3; в твоём коде св-во MyPiramid.TriangleCount возвращало _vertexCount, то есть 18 вместо 6 -- в итоге получалось, что вершины для недостающих полигонов Direct3D брал извне границ вертексного буфера.


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


Увлеченный
***


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

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



Блин, mr.DUDA, ты абсолютно прав. Я лопухнулся.
Вот что бывает, когда ленишься вручную прописать property, а используешь Copy-Paste. smile
А я уже начал думать, что это глюки самой библиотеки.
Спасибо за помощь!
Буду разбираться дальше...

З.Ы. Думаю, тема закрыта.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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