DirectX9の:章はDirect3Dの初期化

A、Direct3Dの概要

Direct3Dのは、アプリケーションがグラフィックと相互作用仲介装置とみなすことができ、基礎となるグラフィックスAPIのセットです。
アプリケーション、Direct3Dのハードウェアとの間の相互作用:

Direct3Dのグラフィックス機器との間のリンク-Hal(ハードウェアアブストラクションレイヤ、ハードウェアアブストラクションレイヤ)があります。
なぜ、このリンクする必要がありますため、市場で入手可能グラフィックカードの多種多様には、それほどのDirect3Dグラフィックスデバイスは、直接と対話することはできません、Direct3DがHALを達成するために機器メーカーが必要です。HALは、特定のデバイスの動作に関連するコードのセットを完了するためのポインティングデバイスです。Direct3Dのあなたは、デバイスの特定の詳細を知っている必要はありませんし、その仕様は、特定のハードウェアとは独立して指定することができるようにします。
機器メーカーは、それがサポートしているすべての機能は、HALに実装されています。これらのDirect3Dのサポートが、しかし機能をサポートしていないデバイスは、HALに実装されていません。それは頂点処理演算でない限りコールは、Direct3Dの関数呼び出しをもたらすことができるHALに失敗実装されていない、そしてユーザは、ソフトウェア頂点動作モードの使用を指定しています。この場合、ユーザ機能は、所望の方法をシミュレートするDirect3Dの時間を計算することによって実行されるソフトウェアで実施することができます。

REF機器

時には、Direct3Dのは、一部の機能がお使いのグラフィックスデバイスでサポートされていない提供していますが、それでもこれらの機能を使用する場合、この需要を満たすために、Direct3Dのは、参照ラスタ・デバイス(参照ラスタライザデバイス)、ソフトウェアのように動作が可能であるREFデバイスを提供します完全にDirect3DのAPIをサポートしています。REFデバイスを使用すると、テストのために、現在、あなたのコード内のハードウェアでサポートされていないこれらの機能、およびこれらのプロパティを使用することができます。

二、Direct3Dの初期化

1.インターフェースIDirect3D9へのポインタ取得(IDirect3DDevice9を取得するためのインターフェース情報システムの物理的なハードウェアデバイスとインタフェースを作成し、インターフェイスは、我々は、3Dグラフィックスを表示するために使用される物理ハードウェアデバイスを表すC ++オブジェクトです。)

    IDirect3D9 * _d3d9;
    _d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

関数が失敗した場合は、NULLポインタを返します。
2つの主な目的IDirect3D9オブジェクトが存在する:オブジェクト作成デバイスの列挙とIDirect3DDevice9タイプが、デバイスリスト取得には、各グラフィックスカードの表示モードのシステム性能の利用可能な手段、および他のフォーマット情報。(このような物理デバイスのIDrect3DDevice9種類作成されたオブジェクトの種類として、我々は実行可能な設定を見つけるために、我々はIDrect3D9の方法を列挙するためにインタフェースを使用する必要があり、表示形式とモデル構成情報によってサポートされる物理デバイスを知っておく必要があり)

2.検査装置の性能(D3DCAPS9)、メイングラフィックスカードのハードウェア頂点動作をサポートするか否かを判定する。インタフェースIDirect3DDevice9を作成するために、我々は、ビデオカードがこの機能をサポートしているかどうかは明確でなければなりません。

//GetDeviceCaps参数介绍
HRESULT IDirect3D9::GetDeviceCaps{
    UINT Adapter, //指定物理显卡序号
    D3DDEVTYPE DeviceType, //指定设备类型(例如硬件设备(D3DDEVTYTPE_HAL)或软件设备(D3DDEVTYPE_REF))
    D3DCAPS9 *pCaps  //返回已初始化的设备性能结构实例
};
D3DCAPS9 caps;
d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);

int vp = 0;
if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
    vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; //硬件顶点运算
else
    vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //软件顶点运算

私たちは、あなたが作成したときに、オブジェクトIDirect3DDeviceタイプが使用されるように指定しなければならないため、操作のこのタイプは、将来の集大成で、後で使用するために保存された変数VPで操作タイプを頂点ます。

実施例3は、構造体の初期化をD3DPRESENT_PARAMENTERS。データ構造は、多くのメンバーで構成され、我々はこれらの変数の性質によって作成されるインターフェースIDirect3DDevice9を指定することができます

typedef struct _D3DPERSENT_PARAMETERS_{
    UINT BackBufferWidth; //后台缓存区宽度,单位为像素
    UINT BackBufferHeight; //后台缓存区高度
    D3DFORMAT BackBufferFormat; //后台缓存区像素格式(如32为像素格式:D3DFMT_A8R8G8B8)
    UINT BackBufferCount; //后台缓存区个数,通常为1
    D3DMULTISAMPLE_TYPE MultiSampleType; //后台缓存所使用的多重采样类型
    DWORD MultiSampleQuality; //多重采样的质量水平
    D3DSWAPEFFECT SwapEffect; //指定交换链中的缓存的页面置换方式。指定为D3DSWAPEFFECT_DISCARD时效率最高
    HWND hDeviceWindow; //与设备相关的窗口句柄。制定了要进行绘制的应用程序窗口
    BOOL Windowed; //全屏(false)或窗口(true)
    BOOL EnableAutoDepthStencil; //设为true,则Direct3D自动创建并维护深度缓存或模板缓存
    D3DfORMAT AutoDepthStencilFormat; //深度缓存或模板缓存的像素格式(用24为表示深度并将8位保留供模板缓存使用,D3DFMT_D24S8)
    DWORD Flags; //其他的附加特性标志(通常指定为0或NULL)
    UINT FullScren_RefreshRateInHz; //指定屏幕的刷新频率(默认为D3DPRESENT_RATE_DEFAULT)
    UINT PresentationInterval; //D3DPRESENT集合的一个成员。其中两个成员较为常见(D3DPRESENT_INTERVAL_IMMEDIATE,D3DPRESENT_INTERVAL_DEFAULT)
}D3DPRESENT_PARAMETERS;

充填構造の例:

    D3DPRESENT_PARAMETERS d3dpp;
    d3dpp.BackBufferWidth = width;
    d3dpp.BackBufferHeight = height;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferCount = 1;
    d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
    d3dpp.MultiSampleQuality = 0;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = hwnd;
    d3dpp.Windowed = windowed;
    d3dpp.EnableAutoDepthStencil = true;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
    d3dpp.Flags = 0;
    d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

4. D3Dデバイスクラスの作成
初期化IDirect3DDevice9オブジェクトを使用して作成したD3DPRESENT_PARAMENTER構造を(3Dグラフィックスを表示するために私たちの物理的なハードウェアを表します)

HRESULT IDirect3D9::CreateDevice{
    UINT Adapter, //指定我们希望已创建的IDirect3DDevice9对象代表哪块物理显卡
    D3DEVTYPE DeviceType, //制定需要使用的设备类型(如硬件设备D3DDEVTYPE_HAL或软件设备D3DDEVTYPE_REF)
    HWND hFocusWindow, //与设备相关的窗口句柄。通常情况下是指设备所要进行绘制的目标窗口
        DWIRD BehaviorFlags, //该参数可为D3DCREATE_HARDWARE_VERTEXPROCESSING 或 D3DCREATE_SOFTWARE_VERTEXPROCESSING
    D3DPRESENT_PARAMENTERS *pPresentationParmeters, //一个已经完成初始化的D3DPRESENT_PARAMETERS类型的实例,该实例定义了设备的一些特性
    IDirect3DDevice9** ppReturnedDeviceInterface //返回所创建的设备
};

関数の呼び出し:

hr = d3d9->CreateDevice(
    D3DADAPTER_DEFAULT, // primary adapter
    deviceType,         // device type
    hwnd,               // window associated with device
    vp,                 // vertex processing
    &d3dpp,             // present parameters
    device);            // return created device
if (FAILED(hr))
{
    d3d9->Release(); // done with d3d9 object
    ::MessageBox(0, "CreateDevice() - FAILED", 0, 0);
    return false;
}

三、完了したプロセスの実行のD3D例


参考リンク:https://www.cnblogs.com/k5bg/p/11088258.html

おすすめ

転載: www.cnblogs.com/acmlzq/p/11788250.html