DirectX. Использование возможностей ОС по выводу графики

курсовая работа

Описание некоторых функций, используемых для работы с Direct3D

Исходя из [3]:

Direct3DCreate9,D3D_SDK_VERSION

Direct3DCreate9 -- запрос указателя на интерфейс IDirect3D9.

Единственным параметром функции Direct3DCreate9 всегда должна быть константа D3D_SDK_VERSION, гарантирующая, что при построении приложения будут использованы правильные заголовочные файлы. Если при работе функции возникли ошибки, она возвращает нулевой указатель.

CreateDevice, pd3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd ,

D3DCREATE_SOFTWARE_VERTEXPROCESSING,

ADDR BackBufferWidth, ADDR pd3dDevice

Метод CreateDevice создает объект IDirect3DDevice9.

HRESULT IDirect3D9::CreateDevice(

UINT Adapter,

D3DDEVTYPE DeviceType,

HWND hFocusWindow,

DWORD BehaviorFlags,

D3DPRESENT_PARAMETERS *pPresentationParameters,

IDirect3DDevice9** ppReturnedDeviceInterface

);

§ Adapter -- указывает физический видеоадаптер, который будет представлять создаваемый объект IDirect3DDevice9.

§ DeviceType -- задает тип используемого устройства (т.е. аппаратное устройство (D3DDEVTYPE_HAL) или программное устройство (D3DDEVTYPE_REF)).

§ hFocusWindow -- дескриптор окна с которым будет связано устройство. Обычно это то окно, в которое будет выводиться изображение и для наших целей мы здесь задаем тот же дескриптор, который указан в члене d3dpp.hDeviceWindow структуры D3DPRESENT_PARAMETERS.

§ BehaviorFlags -- в этом параметре указывается значение D3DCREATE_HARDWARE_VERTEXPROCESSING либо D3DCREATE_SOFTWARE_VERTEXPROCESSING.

§ pPresentationParameters -- указывается инициализированный экземпляр структуры D3DPRESENT_PARAMETERS, задающий параметры устройства.

§ ppReturnedDeviceInterface -- возвращает указатель на созданное устройство.

D3DXMatrixRotationY, ADDR WorldMatrix, NULL

D3DXMatrixRotationY - Вращение по оси Y.

D3DXMATRIX* D3DXMatrixRotationY(

D3DXMATRIX *pOut,

FLOAT Angle

);

Параметры:

§ pOut -- указатель на структуру D3DXMATRIX, в которую помешается исходный результат операции;

§ Angle -- угол вращения в радианах по оси Y

D3DXMatrixRotationZ, ADDR WorldMatrix, RotZ

D3DXMatrixRotationZ - Вращение по оси Z.

D3DXMATRIX* D3DXMatrixRotationZ(

D3DXMATRIX *pOut,

FLOAT Angle

);

Параметры:

§ pOut -- указатель на структуру D3DXMATRIX, в которую помешается исходный результат операции;

§ Angle -- угол вращения в радианах по оси Z

D3DXMatrixLookAtLH, ADDR ViewMatrix, ADDR EyeVector, ADDR LookAtVector, ADDR UpVector

D3DXMatrixLookAtLH - вычислить матрицу преобразования вида.

D3DXMATRIX *D3DXMatrixLookAtLH(

D3DXMATRIX* pOut, // указатель на возвращаемую матрицу преобразования

CONST D3DXVECTOR3* pEye, // местоположение камеры в сцене

CONST D3DXVECTOR3* pAt, // точка, на которую направлена камера

CONST D3DXVECTOR3* pUp // вектор, задающий направление вверх - (0, 1, 0)

);

Параметр pEye задает точку пространства, в которой располагается камера. Параметр pAt задает ту точку сцены, на которую направлена камера. Параметр pUp -- это вектор, который задает направление «вверх» для нашей сцены. Почти всегда это вектор, совпадающий с осью Y -- (0, 1, 0).

D3DXMatrixPerspectiveFovLH, ADDR ProjectionMatrix, FieldOfView, AspectRatio, NearViewPlanZ, FarViewPlanZ

D3DXMatrixPerspectiveFovLH - создает матрицу проекции на основании описания усеченной пирамиды видимого пространства.

D3DXMATRIX *D3DXMatrixPerspectiveFovLH(

D3DXMATRIX* pOut, // возвращает матрицу проекции

FLOAT fovY, // вертикальный угол поля зрения в радианах

FLOAT Aspect, // форматное соотношение = ширина / высота

FLOAT zn, // расстояние до передней полскости

FLOAT zf // расстояние до задней плоскости

);

Параметр форматного соотношения заслуживает дополнительных пояснений. Геометрия в окне проекции в конечном итоге преобразуется в экранное пространство. Перенос изображения из квадратной области (окна проекции) на экран, который, как известно, прямоугольный, приводит к возникновению искажений. Форматное соотношение, являющееся просто соотношением между сторонами экрана, используется для корректировки искажений возникающих при отображении квадрата на прямоугольник.

форматноеСоотношение = ширинаЭкрана / высотаЭкрана

D3DXLoadMeshFromXA, addr Teapot, D3DXMESH_DYNAMIC,pd3dDevice, 0, 0, NULL, 0, addr TeapotP

D3DXLoadMeshFromXA - загружает в приложение X-Файл.

HRESULT D3DXLoadMeshFromX(

LPCTSTR pFilename,

DWORD Options,

LPDIRECT3DDEVICE9 pDevice,

LPD3 DXBUFFER* ppAdjacency,

LPD3DXBUFFER* ppMaterials,

LPD3DXBUFFER* ppEffeetInstances,

DWORD* pNumMaterials,

LPD3DXMESH* ppMesh

);

§ pFilename -- указатель на строку, в которой приведено имя загружаемого Х-файла;

§ Options -- член перечисляемого типа d3dxmesh, определяет комбинацию одного или более флагов для различных вариантов создания мэша. Рассмотрим несколько из имеющихся флагов:

o d3dxmesh_vb_systemmem -- этот флаг необходимо использовать с флагом D3DPOOL_SYSTEMMEM для определения класса памяти буфера вершин;

o D3DXMESH_VB_MANAGED -- применяется с флагом D3DPOOL_MANAGED для определения класса памяти буфера вершин;

o D3DXMESH_IB_SYSTEMMEM -- этот флаг необходимо использовать с флагом D3DPOOL_SYSTEMMEM для определения памяти индексного буфера;

o D3DXMESH_IB_MANAGED -- применяется с флагом D3DPOOL_MANAGED для определения памяти индексного буфера;

o D3DXMESH_USEHWONLY -- используется для обработки только аппаратных средств;

o D3DXMESH_MANAGED -- эквивалент комбинации двух флагов D3DXMESH_VB_MANAGED И D3DXMESH_IB_MANAGED;

o D3DXMESH_SYSTEMMEM -- Он эквивалентен комбинации двух флагов D3DXMESH_VB_SYSTEMMEM и D3DXMESH_IB_SYSTEMMEM;

§ pDevice -- это указатель pDirect3DDevice на интерфейс IDirect3DDevice9, связывающий Х-файл с устройством Direct3D;

§ ppAdjacency -- адрес указателя на буфер, содержащий данные о смежности. В этом параметре используется указатель на интерфейс ID3DXBuffer

§ ppMaterials -- адрес указателя на интерфейс ID3DXBuffer. По возвращению функции этот параметр заполнится данными структуры D3DXMATERIAL для Х-файла;

§ ppEffeetInstances -- адрес указателя на интерфейс ID3DXBuffer, содержащий специфические эффекты.

§ pNumMatегiа1s -- указатель на массив данных для структуры D3DXMATERIAL.

§ ppMesh -- адрес указателя на интерфейс ID3DXMesh, результат всей операции.

d3dxmesh GetFVF,TeapotP

DWORD GetFVF() -- Возвращает значение типа DWORD, описывающее формат вершин сетки.

d3dxmesh GetNumBytesPerVertex,TeapotP

DWORD GetNumBytesPerVertex() -- Возвращает количество байт, занимаемых описанием одной вершины.

d3dxmesh GetNumVertices,TeapotP

DWORD GetNumVertices() -- Возвращает количество вершин в буфере вершин.

d3dxmesh GetNumFaces,TeapotP

DWORD GetNumFaces() -- Возвращает количество граней (треугольных ячеек) в сетке.

d3dxmesh GetVertexBuffer,TeapotP, addr TeapotP_VB

HRESULT GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* ppVB); - Получает буфер вершин для данной сетки.

d3dxmesh GetIndexBuffer,TeapotP, addr TeapotP_IB

HRESULT GetIndexBuffer(LPDIRECT3DINDEXBUFFER9* ppIB); - Получает буфер индексов для данной сетки.

D3DXAssembleShaderFromFile, addr f_VS, 0, 0, D3DXSHADER_DEBUG, addr a_VS,0

D3DXAssembleShaderFromFile - сборка шейдера из файла

HRESULT D3DXAssembleShaderFromFile(

LPCTSTR pSrcFile,

CONST D3DXMACR0* pDefines,

LPD3DXINCLUDE plnclude,

DWORD Flags,

LPD3DXBUFFER* ppShader,

LPD3DXBUFFER* ppErrorMsgs

);

Функция D3DXAssembieShaderFromFile () имеет следующие параметры:

§ pSrcFile -- имя зафужаемого файла, содержащего программу вершинного шейдера;

§ pDefines -- указатель препроцессора;

§ pInciude ~ опциональный указатель интерфейса ID3DXInciude;

§ Flags -- флаги, идентифицирующие шейдер;

§ ppShader -- возвращает буфер, содержащий откомпилированный код шейдера. Здесь используется указатель Code на буфер LPD3DXBUFFER;

§ ppErrorMsgs -- сообщение о возврате ошибок.

d3dev9 CreateVertexShader, pd3dDevice,b_VS ,addr c_VS

CreateVertexShader - создает вершинный шейдер.

HRESULT CreateVertexShader(

const DWORD* pFunction,

IDirect3DVertexShader9** ppShader

);

Функция CreateVertexShader () имеет следующие параметры:

§ рFunction -- указатель, содержащий данные, возвращаемые функцией GetBufferPointer. Эта функция не имеет параметров и возвращает указатель на буфер данных.

§ ppShader -- указатель на интерфейс IDirect3DVertexShader9.

d3dev9 SetVertexShaderConstantF,pd3dDevice,0, addr m_VS1 , 4

SetVertexShaderConstantF -занесение матрицы в необходимый константный регистр

HRESULT SetVertexShaderConstantF(

UINT StartRegister,

CONST float* pConstantData,

UINT Vector4fCount

);

Функция SetVertexShaderConstantFO имеет следующие параметры:

§ StartRegister -- первый номер регистра, в который будут записаны данные;

§ pConstantData -- указатель, содержащий данные для записи в регистр;

§ vector4fCount -- количество необходимых регистров для размещения данных.

d3dev9 SetVertexShader,pd3dDevice,c_VS

SetVertexShader - устанавливает массив векторов.

HRESULT SetVertexShader(

D3DXHANDLE hParameter,

LPDIRECT3DVERTEXSHADER9 pVertexShader

);

Инициализирует идентифицируемый дескриптором hParameter объект вершинного шейдера в файле эффекта на основании вершинного шейдера, на который указывает pVertexShader

d3dev9 SetPixelShader,pd3dDevice,c_PS

HRESULT SetPixelShader(

D3DXHANDLE hParameter,

LPDIRECT3DPIXELSHADER9 pPShader

);

Инициализирует идентифицируемый дескриптором hParameter объект пиксельного шейдера в файле эффекта на основании пиксельного шейдера, на который указывает pPShader

d3dev9 Clear, pd3dDevice, 0, NULL, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,Clearcolor, Zvalue, 0

Clear. - очищает различные буферы цветом

HRESULT Clear(

DWORD Count,

CONST D3DRECT* pRects,

DWORD Flags,

D3DCOLOR Color,

float Z,

DWORD Stencil

);

Функция clear о имеет следующие параметры:

§ Count -- счетчик, указывает число прямоугольников, подвергающихся очистке. Вся область рендеринга состоит из массива прямоугольников. Если указать значение 0, то будет использована вся поверхность, т. е. весь массив прямоугольников или вся область рендеринга;

§ pRect -- указатель на структуру D3DRECT, описывающей массив очищаемых прямоугольников.

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

o D3DCLEAR_STENCIL -- очистит буфер трафарета до значения в параметре Stencil;

o D3DCLEAR_TARGET -- очистит буфер поверхности до цвета в параметре color. Воспользуемся данным флагом для очистки буфера поверхности в заданный цвет;

o D3DCLEAR_ZBUFFER -- очистит буфер глубины до значения в параметре z;

§ Сolor -- цвет;

§ z -- этот параметр задает значения для Z-буфера. Значение может находится в диапазоне от 0.0 -- это самое близкое расстояние для средства просмотра и 1.0 -- дальнее расстояние.

§ Stencil -- значение буфера трафарета, может быть в диапазоне от 0 до 2n-1 где n разрядная глубина буфера трафарета.

d3dev9 SetStreamSource, pd3dDevice, 0 , TeapotP_VB, 0, TeapotPB

SetStreamSource - Связывает буфер вершин с потоком данных.

HRESULT SetStrearSourse (

UINT StreamNumber,

IDlrect3DVertexBuffer* pStreamData,

UINT OffsetInBytes,

UINT Stride)

Параметры:

§ StreamNumber -- определяет поток данных в диапазоне от 0 до -I,

§ pStrearxData -- это указатель на интерфейс IDirect3DvertexBuffer, созданный для представления буфера вершин, который связывается с определенным потоком данных;

§ OffsetInBytes -- смешение от начата потока до начала данных вершин. Измеряется в байтах. Здесь вы указываете, с какой вершины наминается вывод. Если поставить 0. то вывод будет происходить от первой вершины;

§ Stride -- это своего рода "шаг в байтах", от одной вершины до другой

d3dev9 Present, pd3dDevice, NULL, NULL, NULL, NULL

Present - Предстаазяет содержимое буфера на дисплей.

HRESULT Present(

CONST RECT* pSourceRect,

CCIJST RECT* pDestRect,

HKND hDestWindowOverride,

CONST RGNCDATA* pDirtyRegion

);

Параметры:

§ pSourceRect -- указатель на структуру RECT исходной поверхности. Если использовать значение null, то будет представлена полная исходная поверхность;

§ pDestRect -- указатель на структуру RECT поверхности адресата;

§ hDestWindowOverride -- указатель на окно адресата, чья клиентская область взята как адрес для этого параметра представления Установив значение null, мы тем самым говорим, что используем поле

§ hWndDeviceWindow в структуре D3DPRESENT_PARAMETERS;

§ pDirtyReqion -- последний параметр, "отголосок" прежних версий DirectX и уже не используется. Оставлен просто для совместимости, по-этому устанавливается всегда в значение null.

d3dev9 DrawIndexedPrimitive, pd3dDevice, D3DPT_TRIANGLELIST, 0, 0, TeapotP_NV, 0, TeapotP_NF

DrawIndexedPrimitive - нарисовать примитив из индексного буфера.

HRESULT DrawIndexedPrimitive(

D3DPRIMITIVETYPE Type,

INT BaseVertexIndex,

UINT MinIndex,

UINT NumVertices,

UINT StartIndex,

UINT PrimitiveCount

);

Параметры:

§ Type -- Тип рисуемого примитива.

§ BaseVertexIndex -- Базисная величина, которая будет прибавлена к используемым в данном вызове индексам.

§ MinIndex -- Минимальное значение индекса, которое будет использовано.

§ NumVertices -- Количество вершин, которые будут обработаны данным вызовом.

§ StartIndex -- Номер элемента буфера индексов, который будет отмечен как стартовая точка с которой начнется чтение индексов.

§ PrimitiveCount -- Количество рисуемых примитивов.

Делись добром ;)