Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчеты по Курсовой Работе / DirectX9 8-78-3 Коробейников Н.С..docx
Скачиваний:
50
Добавлен:
12.03.2015
Размер:
212.14 Кб
Скачать

Рендеринг в реальном времени

  • Шейдерный язык OpenGl

Шейдерный язык OpenGL носит название GLSL (The OpenGL Shading Language). GLSL основан на языке ANSI C. Большинство возможностей языка ANSI C сохранено, к ним добавлены векторные и матричные типы данных, часто применяющиеся при работе с трехмерной графикой. В контексте GLSL шейдером называется независимо компилируемая единица, написанная на этом языке. Программой называется набор откомпилированных шейдеров, связанных вместе.

  • Шейдерный язык Cg

Разработан nVidia совместно с Microsoft (такой же по сути язык от Microsoft называется HLSL, включён в DirectX 9). Cg расшифровывается как C for Graphics. Язык действительно очень похож на C, он использует схожие типы (int, float, а также специальный 16-битный тип с плавающей запятой — half). Поддерживаются функции и структуры. Язык обладает своеобразными оптимизациями в виде упакованных массивов (packed arrays) — объявления типа «float a[4]» и «float4 a» в нём соответствуют разным типам. Второе объявление и есть упакованный массив, операции с упакованным массивом выполняются быстрее, чем с обычными. Несмотря на то, что язык разработан nVidia, он без проблем работает и с видеокартами ATI. Однако следует учесть, что все шейдерные программы обладают своими особенностями, о которых можно узнать из специализированных источников.

  • Шейдерные языки DirectX Низкоуровневый шейдерный язык DirectX (DirectX asm)

По синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию. Существует разделение на вершинные (vertex) и пиксельные (pixel) шейдеры, которые различаются.

Вершинный шейдер

Выполняет обработку геометрии, то есть изменяет параметры вершины, такие, как позицию, текстурные координаты, цвет вершин. Также может выполнять вычисления освещения. Допустимое количество команд может достигать одной-двух сотен. Пример фрагмента кода:

vs.2.0

dcl_position v0

dcl_texcoord v3

m4x4 oPos, v0, c0

mov oT0, v3

Пиксельный шейдер

Выполняет обработку цветовых данных, полученных при рисовании треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено. Так, к примеру, в версии 1.4 оно не может быть больше 32-х. Пример фрагмента кода:

ps.1.4

texld r0, t0

mul r0, r0, v0

Описание использующихся функций

Функция Invoke

function Invoke(имя API функции, параметры): Integer;

Данная функция помещает параметры в стек и вызывает указанную API функцию.

Функция GetModuleHandle

function GetModuleHandle(ModuleName: PChar): THandle;

Считывает описатель модуля.

Паpаметpы:

  • ModuleName: Имя модуля (заканчивающееся пустым символом).

Возвращаемое значение: в случае успешного завеpшения - идентификатоp модуля; 0 - в пpотивном случае.

Функция находится в файле kernel32.dll.

Функция ExitProcess

function ExitProcess (uExitCode);

Закончить данный процесс со всеми подзадачами (потоками).

Параметры:

  • uExitCode Определяет код выхода для процесса, и для всех потоков, которые завершают работу в результате вызова этой функции.

Функция Direct3DCreate9

function Direct3DCreate9 (SDKversion);

Создаёт Direct3D9 объект и выдаёт указатель на его интерфейс.

Параметры:

  • SDKversion – версия подключаемого интерфейса.

Возвращаемое значение: указатель на интерфейс Direct3D9 иначе NULL.

Функция D3DXMatrixRotationY

function D3DXMatrixRotationY (pOut,Angle);

Создаёт матрицу, вращающуюся вокруг оси Y.

Параметры:

  • pOut – указатель на результирующую структуру D3DXMATRIX.

  • Angle – угол.

Возвращаемое значение: указатель на структуру D3DXMATRIX повёрнутую вокруг оси Y на угол.

Функция D3DXMatrixLookAtLH

function D3DXMatrixLookAtLH (pOut,pEye,pAt,pUp);

Строит левостороннюю матрицу вида.

Параметры:

  • pOut - указатель на результирующую структуру D3DXMATRIX.

  • pEye – указатель на структуру D3DXVECTOR3 являющуюся точкой расположения камеры.

  • pAt – указатель на структуру D3DXVECTOR3, определяющую место, куда направлена камера.

  • pUp - указатель на структуру D3DXVECTOR3, определяющую приподнятость мира.

Возвращаемое значение: указатель на структуру D3DXMATRIX, являющуюся левосторонней матрицей вида.

Функция D3DXMatrixPerspectiveFovLH

function D3DXMatrixPerspectiveFovLH (pOut,fovy,Aspect,zn,zf);

Строит левостороннюю матрицу проекции.

Параметры:

  • pOut - указатель на результирующую структуру D3DXMATRIX.

  • fovy – сектор просмотра в направлении Y в радианах.

  • Aspect – отношение ширины пространства к высоте.

  • zn – значение Z вектора ближней поверхности.

  • zf - значение Z вектора дальней поверхности.

Возвращаемое значение: указатель на структуру D3DXMATRIX, являющуюся левосторонней матрицей проекции.

Функция D3DXMatrixTranspose

function D3DXMatrixTranspose (pOut,pM);

Транспонирует матрицу.

Параметры:

  • pOut - указатель на результирующую структуру D3DXMATRIX.

  • pM – указатель на входную структуру D3DXMATRIX.

Возвращаемое значение: указатель на структуру D3DXMATRIX, являющуюся результатом транспонирования входной матрицы.

Функция D3DXMatrixMultiply

function D3DXMatrixMultiply (pOut,pM1,pM2);

Перемножает элементы двух матриц.

Параметры:

  • pOut - указатель на результирующую структуру D3DXMATRIX.

  • pM1 – указатель на первую матрицу.

  • pM2 – указатель на вторую матрицу.

Возвращаемое значение: указатель на структуру D3DXMATRIX, являющуюся результатом перемножения входных матриц.

Функция D3DXCreateTextureFromFile

function D3DXCreateTextureFromFile (pDevice,pSrcFile,ppTexture);

Создаёт текстуру из файла.

Параметры:

  • pDevice - указатель на Direct3D9 интерфейс.

  • pSrcFile – указатель на строку с именем файла текстуры.

  • ppTexture – указатель на Direct3D9 интерфейс, описывающий созданный текстурный объект.

Возвращаемое значение: D3D_OK или сообщение об ошибке.

Функция D3DXLoadMeshFromX

function D3DXLoadMeshFromX (pFilename,Options,pD3DDevice,ppAdjacency,ppMaterials,ppEffectInstances,pNumMaterials,ppMesh);

Загружает 3D модель из .x файла.

Параметры:

  • pFilename – имя файла .x.

  • Options – опции создания модели.

  • pD3DDevice – указатель на Direct3D9 интерфейс.

  • ppAdjacency – указатель на буфер 3х соседей модели в каждой плоскости.

  • ppMaterials – указатель на буфер содержащий D3DXMATERIAL структуры.

  • ppEffectInstances – указатель на буфер примеров эффектов.

  • pNumMaterials – указатель на число структур в ppMaterials.

  • ppMesh – адрес указателя на ID3DXMesh интерфейс.

Возвращаемое значение: D3D_OK или сообщение об ошибке.

Функция D3DXAssembleShaderFromFile

function D3DXAssembleShaderFromFile (pSrcFile,pDefines,pInclude,Flags,ppShader,ppErrorMsgs);

Собирает шейдерный код.

Параметры:

  • pSrcFile – имя файла.

  • pDefines – указатель на массив структур D3DXMACRO, обычно NULL.

  • pInclude – указатель на ID3DXInclude подключаемый к шейдерному коду.

  • Flags – флаги.

  • ppShader – указатель на буфер содержащий шейдер.

  • ppErrorMsgs – указатель на буфер содержащий листинг ошибок.

Возвращаемое значение: D3D_OK или сообщение об ошибке.

Функция MessageBox

function MessageBox(Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;

Создает и отобpажает блок диалога, содеpжащий указанное сообщение и заголовок, а также пpедопpеделенные пиктогpаммы и текстовые кнопки, в соответствии с паpаметpом TexType.

Паpаметpы:

  • Parent: Окно, владеющее блоком сообщений.

  • Txt: Отобpажаемое сообщение (заканчивающееся пустым символом).

  • Caption: Заголовок блока диалога (заканчивающийся пустым символом) или nil для "Error" ("Ошибка").

  • TextType: Одна или комбинация констант mb.

Возвращаемое значение: в случае успешного завеpшения одна из следующих констант: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry или id_Yes.

Функция находится в файле user32.dll.

Сообщение операционной системы Windows:

  • WM_CREATE – Сообщение приходящее при создании окна.

  • WM_DESTROY- Сообщение, приходящее на процедуру окна при его уничтожении.

  • WM_KEYDOWN - Сообщение, приходящее, когда на пользователь нажимает клавишу на клавиатуре.