Программирование графики с использованием Direct3D




Глава 8


    Глава 8. Снова о сетках
    Анимация вершин Группы граней сетки Трансформация сеток Сейчас мы более подробно рассмотрим тему анимации. В главе4 мы уже выполняли анимацию сетки с помощью атрибутов вращения. В главе5 мы познак...
    Анимация вершин
    Анимацией вершин называется изменение местоположения одной или нескольких вершин сетки. Реализовать этот вид анимации достаточно просто, гораздо труднее решить когда и куда перемещать вершины. Ани...
    Приложение Cube
    В приложении Cube анимация вершин применяется для изменения формы куба. Поскольку при написании программы во главу угла ставилась простота примера, а не красота результата, анимируются только две...
    Класс CubeWin
    Основная функциональность приложения Cube обеспечивается классом CubeWin: class CubeWin : public RMWin { public: CubeWin(); BOOL CreateScene(); protected: //{{AFX_MSG(CubeWin) afx_msg void OnRende...
    Функция CubeWin::CreateScene()
    Сцена приложения Cube создается в функции CreateScene(), код которой представлен в листинге8.1. Листинг 8.1. Функция CubeWin::CreateScene() BOOL CubeWin::CreateScene() { // ------- СЕТКА --------...
    Функция CubeWin::UpdateCube()
    Функция UpdateCube() является функцией обратного вызова, которая выполняет анимацию вершин в приложении Cube. Код функции UpdateCube() выглядит так: void CubeWin::UpdateCube(LPDIRECT3DRMFRAME fram...
    Функции меню Render в классе CubeWin
    Оставшиеся функции класса CubeWin предназначены для реализации меню Render . Их код приведен ниже: void CubeWin::OnRenderWireframe() { if (mesh) mesh-SetGroupQuality(group, D3DRMRENDER_WIREFRAME);...
    Группы граней сетки
    В приложении Cube мы создали сетку, содержащую только одну группу граней. Все шесть граней куба являлись частью одной группы и изменялись как единая сущность. Однако, сетка может содержать и неско...
    Приложение Cube2
    Приложение Cube2 получило свое название по нескольким причинам. Во-первых, эта программа является непосредственным развитием приложения Cube. Во-вторых, куб в приложении Cube2 представлен с помощь...
    Класс Cube2Win
    Функциональность приложения Cube2 реализована классом Cube2Win: class Cube2Win : public RMWin { public: Cube2Win(); BOOL CreateScene(); protected: //{{AFX_MSG(Cube2Win) afx_msg void OnRenderGroup1...
    Функция Cube2Win::CreateScene()
    Код функции CreateScene() из приложения Cube2 приведен в листинге8.2. Листинг 8.2. Функция Cube2Win::CreateScene() BOOL Cube2Win::CreateScene() { //---------- СЕТКА -------- d3drm-CreateMesh(mesh)...
    Функция Cube2Win::UpdateCube()
    Функция UpdateCube() выполняет две задачи: она осуществляет анимацию вершин и, кроме того, она периодически изменяет атрибуты вращения сетки. void Cube2Win::UpdateCube(LPDIRECT3DRMFRAME frame, voi...
    Функция Cube2Win::UpdateColors()
    Функция UpdateColors() выполняет анимацию цветов для второй группы граней сетки. Код функции выглядит следующим образом: void Cube2Win::UpdateColors(LPDIRECT3DRMFRAME, void* p, D3DVALUE) { Callbac...
    Функции меню Render в классе Cube2Win
    В приложении Cube2 меню Render немного изменено, по сравнению с его обычным вариантом, поскольку каждая группа граней может иметь свои собственные параметры визуализации. По этой причине меню Rend...
    Трансформация
    Термин трансформация часто ассоциируется с телевизионной рекламой или спецэффектами в фильмах, когда один объект плавно превращается в другой. Обычно начальная и конечная форма объекта весьма отли...
    Приложение MorphPlay
    Приложение MorphPlay является универсальным проигрывателем последовательностей трансформаций. Оно позволяет загрузить и воспроизвести файл трансформации (.MRF). На идущем вместе с книгой CD-ROM вы...
    Структура классов
    В отличие от большинства демонстрационных программ на CD-ROM, функциональность приложения MorphPlay разделена между двумя классами. Функции, необходимые для выполнения трансформации сосредоточены...
    Класс MorphWin
    Функциональность класса MorphWin предоставляется следующими функциями: LoadMorphSequence() GetNumMorphTargets() GetMorphMesh() AddMorphKey() DeleteMorphKey() SetMorphTime() Функция LoadMorphSequen...
    Функция MorphWin::LoadMorphSequence()
    Функция LoadMorphSequence() получает в качестве аргумента имя файла и пытается создать на основе содержимого файла последовательность трансформаций: BOOL MorphWin::LoadMorphSequence( const CString...
    Функция MorphWin::LoadMeshes()
    Функция LoadMeshes() отвечает за загрузку сеток из указанного файла. Она должна проверить, что каждая сетка содержит одно и тоже количество вершин, а также извлечь и сохранить данные вершин. По эт...
    Функция MorphWin::CreateAnimations()
    Функция CreateAnimations() вызывается только после успешного завершения работы функции LoadMeshes(). Она отвечает за инициализацию объектов Direct3DRMAnimation, которые будут выполнять вычисление...
    Функция MorphWin::PrepareMorphVertices()
    Функция PrepareMorphVertices() выделяет память для массива, который будет использоваться для хранения вычисленных данных вершин: BOOL MorphWin::PrepareMorphVertices() { if (morphvertex) { delete [...
    Функция MorphWin::GetNumMorphTargets()
    Функция GetNumMorphTargets() определена в объявлении класса MorphWin: DWORD GetNumMorphTargets() { return nummorphtargets; } Функция просто возвращает значение, хранящееся в переменной класса numm...
    Функция MorphWin::AddMorphKey()
    Функция AddMorphKey() связывает шаг трансформации с заданным моментом времени анимации. В качестве аргументов функция получает индекс шага и временную метку. BOOL MorphWin::AddMorphKey(DWORD targe...
    Функция MorphWin::SetMorphTime()
    Функция SetMorphTime() отвечает за генерацию и установку местоположения вершин и нормалей. Код функции выглядит следующим образом: BOOL MorphWin::SetMorphTime(D3DVALUE time) { for (DWORD v = 0; v...
    Функция MorphWin::GetMorphMesh()
    Функция GetMorphMesh() просто возвращает указатель на трансформируемую сетку. Она определена в объявлении класса следующим образом: LPDIRECT3DRMMESH GetMorphMesh() { return morphmesh; } Данная фун...
    Класс MorphPlayWin
    Класс MorphPlayWin построен на базе класса MorphWin для создания законченного приложения. Определение класса выглядит следующим образом: class MorphPlayWin : public MorphWin { public: MorphPlayWin...
    Функция MorphPlayWin::CreateScene()
    Функция MorphPlayWin::CreateScene() выглядит следующим образом: BOOL MorphPlayWin::CreateScene() { // --------НАПРАВЛЕННЫЙ И РАССЕЯННЫЙ СВЕТ-------- LPDIRECT3DRMLIGHT dlight; d3drm-CreateLightRGB(...
    Функция MorphPlayWin::OnFileOpen()
    Выбор команды Open меню File приводит к тому, что MFC вызывает функцию OnFileOpen(). Код этой функции показан ниже: void MorphPlayWin::OnFileOpen() { static char BASED_CODE filter[] = Morph Files...
    Функция MorphPlayWin::InitMorphSequence()
    Функция InitMorphSequence() использует унаследованные от класса MorphWin функции для начала новой последовательности трансформаций: BOOL MorphPlayWin::InitMorphSequence(const CString filename) { i...
    Функция MorphPlayWin::UpdateMorph()
    Воспроизведением последовательности трансформаций управляет функция обратного вызова UpdateMorph(): void MorphPlayWin::UpdateMorph(LPDIRECT3DRMFRAME, void* ptr, D3DVALUE) { MorphPlayWin* win = (Mo...
    Функции класса MorphPlayWin для работы с мышью
    В приложении MorphPlay есть четыре функции для реализации возможности вращения сетки: OnLButtonDown(), OnLButtonUp(), UpdateDrag() и OnIdle(). Давайте сначала взглянем на код функции OnLButtonDown...
    Заключение
    Я не могу считать эту главу законченной, пока не скажу несколько слов о том, как можно создавать собственные шаги трансформации. Итак, не вдаваясь в детали, вот несколько советов: Простейший спосо...









Начало        




Книжный магазин