質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

1回答

422閲覧

DirectX9解説でどのサイトもわかりにくいです...

MZK_0104

総合スコア23

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2020/04/19 03:30

現在、Microsoft公式サイトでDirectX9を勉強しているものです。

以下のコードを見てほしいのですが...

C++

1#include<windows.h> 2#include<d3dx9.h> 3#include<d3d9.h> 4 5LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 6 switch (msg) { 7 case WM_DESTROY: 8 PostQuitMessage(0); 9 return 0; 10 } 11 return DefWindowProc(hwnd, msg, wp, lp); 12} 13 14int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 15 PSTR lpCmdLine, int nCmdShow) { 16 HWND hwnd; 17 MSG msg; 18 WNDCLASS winc; 19 RECT rw, rc; 20 D3DPRESENT_PARAMETERS d3dpp; 21 22 winc.style = CS_HREDRAW | CS_VREDRAW; 23 winc.lpfnWndProc = WndProc; 24 winc.cbClsExtra = winc.cbWndExtra = 0; 25 winc.hInstance = hInstance; 26 winc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 27 winc.hCursor = LoadCursor(NULL, IDC_ARROW); 28 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 29 winc.lpszMenuName = NULL; 30 winc.lpszClassName = TEXT("Window"); 31 32 if (!RegisterClass(&winc)) return 0; 33 34 hwnd = CreateWindow( 35 TEXT("Wndows"), TEXT("TestWindow"), 36 WS_OVERLAPPEDWINDOW | WS_VISIBLE, 37 175, 50, 1920, 1080, NULL, NULL, 38 hInstance, NULL 39 ); 40 GetWindowRect(hwnd, &rw); // ウィンドウ全体のサイズ 41 GetClientRect(hwnd, &rc); // クライアント領域のサイズ 42 int new_width = (rw.right - rw.left) - (rc.right - rc.left) + 1280; 43 int new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 720; 44 SetWindowPos(hwnd, NULL, 0, 0, new_width, new_height, SWP_NOMOVE | SWP_NOZORDER); 45 if (hwnd == NULL) return 0; 46 47 if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) 48 return E_FAIL; 49 50 ZeroMemory(&d3dpp, sizeof(d3dpp)); 51 d3dpp.Windowed = TRUE; 52 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 53 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; 54 55 if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, 56 D3DCREATE_SOFTWARE_VERTEXPROCESSING, 57 &d3dpp, &g_pd3dDevice))) 58 59 while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); 60 return msg.wParam; 61}

これは、WindowsAPI でウィンドウを表示してDirectXを初期化したコードです。

そして、コード最後当たりの「g_pD3D」
このポインタ(?)がよくわかりません。

VisualStudio2019でエラーの内容を見てみると、

g_pD3Dが定義されていません

とのエラー。

これは見てわかる通り、g_pD3Dが定義されていないよ。
ということです。
ここまではわかるのですが
Microsoft公式の解説には、この「g_pD3Dを定義しろ」との解説は載っていませんでした。

なのでこのg_pD3Dをどのように定義するのかがわかりません...

回答よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/04/19 03:43

> なのでこのg_pD3Dをどのように定義するのかがわかりません... ご提示のコードですが、そもそもどこのサンプルコードを参考にされたのでしょうか。g_pD3Dとかは恐らく自分で定義すべき変数だと思うのですが。 例えばこちらのサイト様の記事(http://marupeke296.com/DXGSmp_No1_Init.html) では同じ名前の変数g_pD3D をLPDIRECT3D9 g_pD3D;と宣言、定義して使われています。
MZK_0104

2020/04/19 03:46

すみません、リンク切れ(?)でサイトが見れないようになっています。 また、 D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; このようなサンプルコードをWindowsAPIで作ったウィンドウを作成する コードの中に貼り付けました
guest

回答1

0

ベストアンサー

Direct3DCreate9 functionに書いてありますよ。

投稿2020/04/19 03:42

SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MZK_0104

2020/04/19 03:47

できました!! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問