Покоряем Windows Phone 7.1 Часть 4

Часть 3

Откомпилируй и проверь: весь дисплей должна покрыть указанная текстура. Далее добавим трехмерные объекты. XNA поддерживает для загрузки два формата: файлы *.х и *.fbx. Формат Х ранее был стандартным для DirectX, однако, начиная с десятой версии библиотеки, этот формат потерял поддержку. К слову, теперь там используется формат .sdkmesh, для которого не существует экспортеров. Но Microsoft не оставила свой новый формат в таком плачевном состоянии и выпустила конвертер — утилиту командной строки meshconvert, который предназначен для конвертирования из X в sdkmesh. Второй формат — *.fbx — очень распространен и поддерживается всеми продуктами от Autodesk. По сути, он является форматом для переноса моделей между приложениями. Теперь у тебя точно не возникнет проблем с созданием собственных моделей для своих игр. С диска можешь взять подготовленную мною модель (я взял из trueSpace то, что было). Она находятся в Х-формате. Загрузи ее в контент пайплайн, соблюдая структуру каталогов, то есть так, чтобы во внешнем каталоге находился х-файл и на этом же уровне — одноименная папка с текстурами. Еще одна замечательная возможность контент пайплайна — это компиляция контента в свой собственный оптимальный для исполнения формат. При первой загрузке приложения контент пайплайн просматривает все имеющие файлы, и если какой-то объект может быть преобразован, он преобразует его. Сейчас можно сначала попробовать загрузить и вывести на экран модель, но я предлагаю этого не делать, а сразу разработать класс для реализации возможности создания нескольких объектов без дублирования кода. Создай новый файл object.cs и напиши в нем код одноименного класса, он инкапсулирует функциональность создаваемых объектов (для подсказки смотри исходник с диска). Пока ты его пишешь, я коротко расскажу, что здесь происходит. Вначале, как всегда, происходит подключение пространств имен — обрати внимание, используется пространство XNA. Затем уже в описании класса объявляются и инициализируются переменные — члены класса. Далее идет конструктор. Безусловно, в нашем примере можно было обойтись без него, потому что переменные уже инициализированы, и с созданием объекта прекрасно бы справился конструктор по умолчанию. Однако, поскольку у нас два объекта этого класса, то необходимо поместить их в разные координаты. Этим и занимается конструктор, получая в качестве параметра множитель для смещения. Lvds cable. Что такое платный хостинг. Семинары о Деньгах для всех электронные деньги.

Дальше идет одна из моих любимейших конструкций языка С# — свойство. Его устройство напоминает мне разработку визуальных компонентов для Delphi. Метод установки значения данного свойства довольно обширен, он производит преобразование переданного угла из градусной меры в радианную, используемую в XNA, а последним шагом создает матрицу поворота по оси У и присваивает ее переменной - члену класса. Затем идет метод DrawObj, который прорисовывает модель, хранящуюся в переменной model. В начале этого метода путем перемножения матрицы сдвига и матрицы вращения создается целевая матрица перемещения объекта. После этого в цикле foreach перебираем все меши объекта, чтобы затем во вложенном цикле через умножение матрицы текущего меша на полученную на предыдущем шаге матрицу получить мировую матрицу. Все эти трансформации нужны для корректного отображения объекта в пространстве.

Объект класса BasicEffect кроме собственно пространственной матрицы содержит многие другие свойства: текстурные координаты, альфа-составляющую материала, параметры для освещения, видовую матрицу, матрицу проекции и многое другое. Вообще, этот объект предоставляет возможности такого механизма, который раньше в DirectX назывался фиксированным конвейером визуализации. Но, начиная с Х, его напрочь удалили, оставив только программируемый конвейер. Для того чтобы с его помощью визуализировать Lvds cable. Что такое платный хостинг. Семинары о Деньгах для всех электронные деньги. хоть что-то, надо писать свои шейдеры. Конечно, это позволяет добиться наилучших результатов, однако иногда вполне подходят стандартные механизмы. В ХNА тоже имеется программируемый конвейер, но мы его рассматривать сегодня не будем. Последняя операция метода DrawObj (также находящаяся в цикле foreach) выводит меш в задний буфер. Единственное действие, выполняемое методом UpdateState, — это обновление позиции объекта в пространстве путем скалярного умножения вектора направления вперед матрицы ratMat-объекта и переданного в параметре значения. Последний метод класса SetupEffects вызывается лишь единожды — при инициализации. В него передаются матрицы проекции и вида, которые впоследствии присваиваются эффекту каждого меша модели. Также, для каждого меша включается стандартное освещение. Результат операции присваивается переменной — члену trans, которая участвует в построении объекта в процессе метода DrawObj (см. выше). Прежде чем запускать построение проекта, надо внести изменения в класс Gamel, который генерируется автоматом и наследуется от Microsoft.Xna.Framework.Game, перегружая некоторые его методы. И снова исходнике диска тебе в помощь, здесь же кратко расскажу, что там к чему. В начале класса Gamel объявляем все глобальные переменные — так, например, объект класса Object — Object carl = new object(20); передавая смещение параметром, здесь же находятся объявления матриц вида и проекции, они будут инициализированы позже. Конструктор класса уже рассмотрен. В функции инициализации производим матрицы:

projectionMatrix = Matrix.CreatePerspectiveFieldOfView (MathHelper.ToRadians(45.0f),aspectRatio,1.0f,100,0f); viewMatrix = Matrix.CreatelookAt(cameraPositionJ VectorB.Zero, Vector3.Up);

Для создания матрицы проекции передаем: поле видимости по оси Y в радианах, соотношение сторон экрана (объявлено ранее), расстояние до ближней и дальней плоскости отсечения. В создании видовой матрицы участвуют такие значения: позиция камеры (объявлена ранее — триплетзначений, представляющий координаты X.Y.Z), направление вида камеры и вектор обзора вверх, относительно текущему виду. В методе LoadContent происходит загрузка ресурсов, так модель для объекта нашего класса загружается такой строчкой: carl.model = Content. Load("Models/Hotrod"); Сразу после загрузки вызывается метод объекта для установки преобразований мешей модели: carl.SetupEffects(projectionMatrix, viewMatrix);, для которого передаются ранее созданные матрицы. В методе Update, который подобно методу Draw вызывается при перерисовки каждого кадра, осуществляется трансформация наших объектов класса Object. Дополнительно в нем вызывается функция Updatelnput, которая детектит нажатие левой клавиши мыши, и в результате увеличивает скорость вращения и перемещения объектов, инкрементируя значения переменных. Последний метод Draw выводит все на экран. Сначала он очищает — закрашивает задний буфер сплошным цветом, затем выводит текстуру и два объекта класса Object. Последняя строчка метода base.Draw(gameTime); меняет положения первичного и заднего буферов. В итоге все, что визуализировалось там, теперь на нашем экране. Сейчас самое время откомпилировать и протестировать проект. В том случае, если все сделано правильно, ты увидишь такую демонстрацию 3D на дисплее эмулятора.

Часть 5

Похожие статьи Меню Опрос Фото Популярное