После того, как вы создали окно приложения, объекты DirectX и подготовили сцену, вы готовы рендерить ее. Рендеринг - это такой процесс прорисовывания сцены, исходя из геометрических фигур объектов на сцене с накладыванием текстур, материалов и освещения. Мы пока текстурами заниматься не будем. Цикл рендеринга в приложении "Triangle" использует создаваемые позже подпрограммы RenderScene и FrameMove. Первая процедура выполняет непосредственно рендеринг, а вторая совершает трансформацию сцены, чтобы мы не уснули со скуки, созерцая неподвижный треугольник.
Чтобы процесс рендеринга не вошел в бесконечный цикл, мы предусмотрели выход из него через логическую переменную g_bRunning. Но об этом мы поговорим в следующей части. А пока, вернемся к рендерингу. Прежде, чем еще раз отрендерить сцену, ее надо обновить. Немедленно, после возвращения процедуры RenderScene, вызывается подпрограмма FrameMove. Эта подпрограмма просто обновляет матрицу Мира, от которой в Direct3D зависит геометрия модели. Приложение отражает вращение вокруг оси Y. Угол вращения передается процедуре через параметр stepVal.
В реальности же ваши приложения в этом месте обновления сцены будут делать гораздо больше, чем приложение вращения к объекту. В этом месте происходят все сложные математические расчеты и перемещения объектов, которые пользователь потом видит на экране. В сущности, чем комактнее и быстрее будет ваш код в этом месте, тем быстрее приложение сможет перейти к рендерингу кадра и тем лучше будут показатели FPS (кадров в секунду). Когда геометрия модели обновлена и отражает желаемый эффект анимации, вы можете рендерить сцену. В нашем приложении этим будет заниматься процедура RenderScene. Она начинает с очистки объекта Viewport.
Этот код вызывает метод Direct3DDevice7.Clear для очистки Viewport. Первые
два аргумента указывают на участок ли участки на Viewport, которые должны
быть очищены и на их количество. В большинстве случаев, как в этом приложении
вы будете очищать один участок, охватывающий целиком весь объект Viewport.
Следующий аргумент говорить что очищать. Так как наше приложение не использует
глубинные буфера, передается только флаг D3DCLEAR_TARGET. Последние три
параметра устанавливают значения очистки для цели рендеринга и буферов.
Методы Direct3DDevice7.BeginScene и Direct3DDevice7.EndScene говорят системе о начале и конце рендеринга. Вы можете помещать команды рендеринга только между этими методами.
|