
- •Оглавление
- •DirectX
- •Ключевые особенности версий DirectX
- •Вершинные шейдеры (Vertex Shader)
- •Геометрические шейдеры (Geometry Shader)
- •Пиксельные шейдеры (Pixel Shader)
- •Шейдерные языки
- •Профессиональный рендеринг
- •RenderMan
- •Open Shading Language
- •Рендеринг в реальном времени
- •Шейдерный язык OpenGl
- •Шейдерный язык Cg
- •Шейдерные языки DirectX Низкоуровневый шейдерный язык DirectX (DirectX asm)
- •Описание использующихся функций
- •Исходный код программы
- •Пример работы программы
- •Список литературы
Рендеринг в реальном времени
Шейдерный язык 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 - Сообщение, приходящее, когда на пользователь нажимает клавишу на клавиатуре.