| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Managed DirectX. Появляются искажения.. |
| Автор: Kurt 14.10.2005, 19:30 |
| Возникла необходимость работы с Managed DirectX. (теперь буду спецом, блин. Сейчас делаю первые шаги - верчу подсвеченную пирамидку. Все сделано согласно туториалам, что шли вместе с DX9SDK. Запускается приложение, а дальше два варианта развития событий: 1) все красиво отрисовывается. (показано в прикрепленном файле t0.jpg); 2) изображение искажается - появляются какие-то дополнительные плоскости, хотя в коде ничего подобного нет (файлы t1.jpg и t2.jpg). Т.е. происходит следующее - при запуске спонтанно появляются вышеописанные искажения. Раз запущу - все хорошо. Закрою и снова запущу эту же программу - появляются какие-то левые плоскости. Хотелось бы уточнить, это глюки у меня или у самого Managed DX? Кто-нибудь встречался с подобным? Как это решить? З.Ы. Используется .NET Framework 2.0 Я все запаковал в архив вместе с самим проектом. На "красоту" кода не обращайте внимания - я просто тренируюсь. |
| Автор: mr.DUDA 14.10.2005, 19:49 |
| У меня референсы на DirectX светятся жёлтым, хотя установлен DX SDK 9.0 (Summer 2004). Что не так ? Добавлено @ 19:50 З.Ы. навскидку: может быть отключить _presentParams.EnableAutoDepthStencil = true; ? |
| Автор: Kurt 14.10.2005, 20:08 | ||||||
ну, поправь референсы в св-вах проекта. Нужны Microsoft.DirectX, Microsoft.DirectX.Direct3D и Microsoft.DirectX.Direct3DX.
не. тогда вот на этой строчке:
выкидывается Exception. Да и в SDK-примерах _presentParams.EnableAutoDepthStencil поставлено в true. |
| Автор: -ser- 15.10.2005, 10:59 | ||
у меня во время выполнения выдает Microsoft.DirectX.Direct3D.InvalidCallException was unhandled в
всегда при _myPyramid.TriangleCount = 18 |
| Автор: mr.DUDA 15.10.2005, 11:58 | ||||||||
Это потому что инициализация массива _vertexArray производится явно для каждого элемента, а не в цикле:
и получается, что сколько ни указывай треугольников, но проинициализированы будут только первые 18 вершин - т.е. 6 полигонов, пирамида. Пофиксить ошибку с искажениями можно так:
Всё оказалось очень просто: метод
выводит заданное количество треугольников (т.к. PrimitiveType.TriangleList), а их количество равно кол-ву вершин делённому на 3; в твоём коде св-во MyPiramid.TriangleCount возвращало _vertexCount, то есть 18 вместо 6 -- в итоге получалось, что вершины для недостающих полигонов Direct3D брал извне границ вертексного буфера. |
| Автор: Kurt 15.10.2005, 18:27 |
| Блин, mr.DUDA, ты абсолютно прав. Я лопухнулся. Вот что бывает, когда ленишься вручную прописать property, а используешь Copy-Paste. А я уже начал думать, что это глюки самой библиотеки. Спасибо за помощь! Буду разбираться дальше... З.Ы. Думаю, тема закрыта. |