DirectX11でエラーがでる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
cc

DirectX11でエラーがでる

#1

投稿記事 by cc » 12年前

VC C++2010で以下のようなサンプルコードをデバックするとエラーが出てしまいます。

コード:

#pragma comment(lib,"d3d11.lib")
#pragma comment(lib,"d3dx11.lib")
#include <d3dx11.h>

//定数定義
#define WINDOW_WIDTH 320 //ウィンドウ幅
#define WINDOW_HEIGHT 240 //ウィンドウ高さ

//グローバル変数
HWND hWnd=NULL;
ID3D11Device* Device = NULL;
ID3D11DeviceContext* DeviceContext=NULL;
IDXGISwapChain* SwapChain = NULL;
ID3D11RenderTargetView* RenderTargetView = NULL;

//ダイレクト3Dの初期化関数
HRESULT InitD3D(HWND hWnd)
{
 // デバイスとスワップチェーンの作成
 DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof(sd) );
    sd.BufferCount = 1;         //バックバッファの数
    sd.BufferDesc.Width = WINDOW_WIDTH;     //バッファの幅
    sd.BufferDesc.Height = WINDOW_HEIGHT;    //バッファの高さ
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //バッファのフォーマット
    sd.BufferDesc.RefreshRate.Numerator = 60;   //リフレッシュレート
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.OutputWindow = hWnd;
    sd.SampleDesc.Count = 1;
    sd.SampleDesc.Quality = 0;
    sd.Windowed = TRUE;

 D3D_FEATURE_LEVEL  FeatureLevel = D3D_FEATURE_LEVEL_11_0;


    if( FAILED( D3D11CreateDeviceAndSwapChain( NULL, D3D_DRIVER_TYPE_REFERENCE, NULL,0,
     &FeatureLevel,1,     
                     D3D11_SDK_VERSION, &sd, &SwapChain, &Device ,NULL,&DeviceContext) ) )
    {
        return FALSE;
    }
 //レンダーターゲットビューの作成
 ID3D11Texture2D *BackBuffer;
    SwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ),(LPVOID*)&BackBuffer);   
    Device->CreateRenderTargetView( BackBuffer, NULL, &RenderTargetView );
    BackBuffer->Release();
 DeviceContext->OMSetRenderTargets(1, &RenderTargetView,NULL);

 //ビューポートの設定
 D3D11_VIEWPORT vp;
    vp.Width = WINDOW_WIDTH;
    vp.Height = WINDOW_HEIGHT;
    vp.MinDepth = 0.0f;
    vp.MaxDepth = 1.0f;
    vp.TopLeftX = 0;
    vp.TopLeftY = 0;
    DeviceContext->RSSetViewports( 1, &vp );

 
 return S_OK;
}

//レンダリング
VOID Render()
{
 float ClearColor[4] = {1,1,1,1 }; // クリア色作成 RGBAの順
    DeviceContext->ClearRenderTargetView( RenderTargetView, ClearColor );//画面クリア   
 SwapChain->Present( 0, 0 );//画面更新(バックバッファをフロントバッファに) 
}

//終了時解放処理
VOID Cleanup()
{
 SwapChain->Release();
 RenderTargetView->Release();
 DeviceContext->Release();
 Device->Release();
}

//メッセージプロシージャ
LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
 switch(msg)
 {
  case WM_DESTROY://終了時
   Cleanup();
   PostQuitMessage(0);
   break;
 }
 return DefWindowProc (hWnd, msg, wParam, lParam);
}

//メイン関数
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
 //ウインドウクラスの登録
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      L"Window1", NULL };
    RegisterClassEx( &wc );
 //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定
 RECT rect;
 SetRect(&rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
 AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
 rect.right=rect.right-rect.left;
 rect.bottom=rect.bottom-rect.top;
 rect.top=0;
 rect.left=0;
     //ウインドウの生成
    hWnd = CreateWindow( L"Window1", L"Hello DirectX11 World !!",
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom,
                              NULL, NULL, wc.hInstance, NULL );
 
 MSG msg;
 ZeroMemory(&msg,sizeof(msg));
 //Direct3D初期化
    if(SUCCEEDED(InitD3D(hWnd)))
    {
  //ウインドウ表示
  ShowWindow(hWnd,SW_SHOW);
  UpdateWindow(hWnd);
  while(msg.message!=WM_QUIT)
  {
   if( PeekMessage(&msg,NULL,0,0,PM_REMOVE))
   {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
   else
   {
    Render();
   }
  }
 }

 //終了
 return 0;
}
出力のエラーは次の通りです。

コード:

1>------ ビルド開始: プロジェクト: directx, 構成: Debug Win32 ------
1>  test.cpp
1>c:\users\noname\documents\visual studio 2010\projects\directx\directx\test.cpp(3): fatal error C1083: include ファイルを開けません。'd3dx11.h': No such file or directory
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
何か設定のし忘れなどがあるのでしょうか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#2

投稿記事 by ISLe » 12年前

ウチのハードディスクを覗いてみたところ、d3dx~はDirectX SDKに入ってました。
Windows SDK(単体,Visual C++ 2010 Express付属とも)には入ってませんでした。

アバター
SUE
記事: 41
登録日時: 12年前

Re: DirectX11でエラーがでる

#3

投稿記事 by SUE » 12年前

インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。

設定方法は、ソリューションエクスプローラからプロジェクトを右クリック、プロパティを開き、「構成プロパティ」の「VC++ディレクトリ」をクリック。その中の「インクルード ディレクトリ」を編集し、
$(DXSDK_DIR)Include
と入力するか、駄目ならばDirectX SDKのフォルダ内の"Include"というディレクトリを見つけ、その絶対パスを入力します。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

cc

Re: DirectX11でエラーがでる

#4

投稿記事 by cc » 12年前

SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。

設定方法は、ソリューションエクスプローラからプロジェクトを右クリック、プロパティを開き、「構成プロパティ」の「VC++ディレクトリ」をクリック。その中の「インクルード ディレクトリ」を編集し、
$(DXSDK_DIR)Include
と入力するか、駄目ならばDirectX SDKのフォルダ内の"Include"というディレクトリを見つけ、その絶対パスを入力します。
$(DXSDK_DIR)Includeと入力できません。
またDirectX SDKのフォルダの場所もわかりません

アバター
SUE
記事: 41
登録日時: 12年前

Re: DirectX11でエラーがでる

#5

投稿記事 by SUE » 12年前

入力するときは、右上にある、ファイルが光っているようなアイコンをクリックして新しい行を作ります。

DirectX SDKの場所はインストール中に必ず表示されているはずなのですが。C:のProgram Filesにあります。
もしインストールしていないということであれば、そのサンプルの出典となった文章を読み返してください。多分SDKのインストール方法については載っているはずです。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#6

投稿記事 by ISLe » 12年前

SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
2010からはプロパティシートで設定するように変更されました。
プロパティマネージャーでMicrosoft.Cpp.Win32.userに対して設定すればユーザー設定として記録され、個別に設定する必要は無くなります。
Expressでプロパティマネージャーを表示するには上級者用の設定にする必要があったと思います。

プロジェクト個別に設定するときはVC++ディレクトリは変更できませんので、以下の項目を設定してください。
  • C/C++→全般→追加のインクルードディレクトリ
  • リンカー→全般→追加のライブラリディレクトリディレクトリ

cc

Re: DirectX11でエラーがでる

#7

投稿記事 by cc » 12年前

ISLe さんが書きました:
SUE さんが書きました:インクルードディレクトリの設定はしていますか? ちなみにこいつは、VC++2010からプロジェクトを作るだびに個別に設定するようになりました。
2010からはプロパティシートで設定するように変更されました。
プロパティマネージャーでMicrosoft.Cpp.Win32.userに対して設定すればユーザー設定として記録され、個別に設定する必要は無くなります。
Expressでプロパティマネージャーを表示するには上級者用の設定にする必要があったと思います。

プロジェクト個別に設定するときはVC++ディレクトリは変更できませんので、以下の項目を設定してください。
  • C/C++→全般→追加のインクルードディレクトリ
  • リンカー→全般→追加のライブラリディレクトリディレクトリ
プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えください

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#8

投稿記事 by softya(ソフト屋) » 12年前

そもそも最新のDirectXSDKはインストールされていますか?
あと最大の問題は開発機はWindows7でDirectX11対応のビデオカードはお持ちですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
SUE
記事: 41
登録日時: 12年前

Re: DirectX11でエラーがでる

#9

投稿記事 by SUE » 12年前

cc さんが書きました:プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えください
「と」、というより、どちらの方法でも出来ますよ、という意味です(ですよね?)。

もし無料版であるExpress Editionを使っているのなら、僕が書いた手順の「VC++ディレクトリ」のところを「C/C++→全般」に置き換えるだけです。
有料版を使っているのならプロパティマネージャーから楽に設定できる(らしい)ですが、その方法でやりたいならISLeさんに教わってください。
オフトピック
これでずっと上手くやって来たのに若干間違いだったとは・・・
オフトピック
ていうか「だびに」が何度も引用されてなんか恥ずかしい。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#10

投稿記事 by ISLe » 12年前

cc さんが書きました:プロパティマネージャーの設定のやり方と下の「個別に設定するとき」を詳しくお教えください
まずは訂正させてください。
プロジェクト個別でVC++ディレクトリを使うこともできました。

DirectX SDKがインストールされていることが前提ですが、よろしいでしょうか。

【プロパティマネージャーでユーザー設定する方法】 Expressでも有効です。
  1. Win32プロジェクトを開く。
  2. メニュー『表示(V)』→『プロパティ マネージャー(P)』を選択。
    ※Expressでは上級者用の設定にしておく必要あり
  3. プロパティ マネージャーのツリーを展開して、Microsoft.Cpp.Win32.userにフォーカスし、メニュー『表示(V)』→『プロパティ ページ(Y)』を選択。
    ※構成ごとに表示されるが共通なのでひとつ変更すれば良い
  4. 『VC++ ディレクトリ』→『インクルード ディレクトリ』または『C/C++』→『全般』→『追加のインクルード ディレクトリ』のプルダウンから『<編集...>』を選択。
    ※どちらか一方だけで良い
  5. 『新しい行』ボタンを押し、
    $(DXSDK_DIR)Include
    と入力、『OK』ボタンを押す。
  6. 『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
    ※どちらか一方だけで良い
  7. 『新しい行』ボタンを押し、
    $(DXSDK_DIR)Lib\x86
    と入力、『OK』ボタンを押す。
  8. 『OK』ボタンを押す。
以上です。

【プロジェクトに対して個別に設定する方法】
  1. Win32プロジェクトを開く。
  2. ソリューション エクスプローラーでプロジェクト名にフォーカスし、メニュー『表示(V)』→『プロパティ ページ(Y)』を選択。
あとは【プロパティマネージャーでユーザー設定する方法】の4.以降と同じです。

(追記)
プロジェクトにまだC/C++ソースファイルが追加されてないとプロパティページのC/C++カテゴリが表示されないので、VC++ディレクトリに設定するほうが良いかもしれません。
そのあたりはお好みで。

(さらに追記)
ウチはExpressなので、有償版Visual Studio 2010だと画面の構成などが異なるかもしれません。

cc

Re: DirectX11でエラーがでる

#11

投稿記事 by cc » 12年前

>6.『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
>※どちらか一方だけで良い
>7.『新しい行』ボタンを押し、
>$(DXSDK_DIR)Lib\x86
>と入力、『OK』ボタンを押す。

これの入力ができません。
またその状態でデバックしてみると以下のようなエラーが出ます。

コード:

1>------ ビルド開始: プロジェクト: directx, 構成: Debug Win32 ------
1>  test.cpp
1>LINK : fatal error LNK1104: ファイル 'd3dx11.lib' を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#12

投稿記事 by ISLe » 12年前

cc さんが書きました:>6.『VC++ ディレクトリ』→『ライブラリ ディレクトリ』または『リンカー』→『全般』→『追加のライブラリ ディレクトリ』のプルダウンから『<編集...>』を選択。
>※どちらか一方だけで良い
>7.『新しい行』ボタンを押し、
>$(DXSDK_DIR)Lib\x86
>と入力、『OK』ボタンを押す。

これの入力ができません。
「入力ができません」だけではどうなっているのかさっぱり分からないのですが…。
  1. プロパティページを開くことができない。
  2. プロパティページに該当する項目がない。
  3. プルダウンできない。
  4. プルダウンに『<編集...>』の項目がない。
  5. プルダウンの『<編集...>』の項目を選んでも編集ダイアログが出ない。
  6. 編集ダイアログに『新しい行』ボタンが無い。
  7. 編集ダイアログの『新しい行』ボタンを押しても新しい行を入力する状態にならない。
  8. 編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
  9. 編集ダイアログの『OK』ボタンを押しても反映されない。
とりあえず思い付くだけ書いてみましたが、該当する状況はありますか?

まさかと思いますが、\が入力できないというだけのことではないですよね。

cc

Re: DirectX11でエラーがでる

#13

投稿記事 by cc » 12年前

>8.編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。

新しい行に入力しても警報音が出て何も入力できません

box
記事: 2002
登録日時: 13年前

Re: DirectX11でエラーがでる

#14

投稿記事 by box » 12年前

ところで、
cc さんが書きました:VC C++2010で以下のようなサンプルコードをデバックするとエラーが出てしまいます。
デバック(英語のつづりはdebugだから、デバッグの方が適切のような気がする)と
ビルド
との区別がついていないように見えるのは私だけでしょうか。

デバッグ(バグ取り)というのは、ビルドが成功して実行ファイルは作成できるが、思った通りに動かない、
という状況で行なうことであって、今の質問者さんの状況はそこまでたどり着けていない、と思うのです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#15

投稿記事 by ISLe » 12年前

cc さんが書きました:>8.編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
新しい行に入力しても警報音が出て何も入力できません
以下の症状のどれですか?
  1. 『新しい行』ボタンを押していないので入力枠が出現していない。
  2. 『新しい行』ボタンを押しても入力枠が出現しない。
  3. 入力枠が出現しているがキー入力を受け付けない。
  4. 入力枠が出現するが入力しようとすると消えてしまう。
あと何がありますかね…。
インクルードディレクトリは設定できているようなので、同じ操作をしてるはずなんですけどね。

『新しい行』ボタンを押しても入力枠が出現しなくなっているならば、ウィンドウズを再起動すると改善されるかもしれません。

cc

Re: DirectX11でエラーがでる

#16

投稿記事 by cc » 12年前

ISLe さんが書きました:
cc さんが書きました:>8.編集ダイアログの『新しい行』ボタンを押して新しい行を入力しても消えてしまう。
新しい行に入力しても警報音が出て何も入力できません
以下の症状のどれですか?
  1. 『新しい行』ボタンを押していないので入力枠が出現していない。
  2. 『新しい行』ボタンを押しても入力枠が出現しない。
  3. 入力枠が出現しているがキー入力を受け付けない。
  4. 入力枠が出現するが入力しようとすると消えてしまう。
あと何がありますかね…。
インクルードディレクトリは設定できているようなので、同じ操作をしてるはずなんですけどね。

『新しい行』ボタンを押しても入力枠が出現しなくなっているならば、ウィンドウズを再起動すると改善されるかもしれません。
どういう訳か入力できるようになって正常に動作するようになりました、ありがとうございました。

しかしDirectX11が使用できるように設定して、以下のようなコードをデバックなしで実行しようとすると
エラーが出てしまいます。

コード:

#include	<stdio.h>

void main(void)
{
	printf("表示\n");
}

コード:

1>------ ビルド開始: プロジェクト: directx, 構成: Debug Win32 ------
1>  test.cpp
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\ユーザーネーム\Documents\Visual Studio 2010\Projects\directx\Debug\directx.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#17

投稿記事 by softya(ソフト屋) » 12年前

プロジェクトがWinMainを要求するウィンドウアプリ用なのに入力したプログラムがC言語のコンソール用のプログラムだからです。
WinMainが無いよと言うエラーが出ていますね。

printfなどが使いたい場合は、Win32コンソールアプリケーションを選んでプロジェクトを作成して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

cc

Re: DirectX11でエラーがでる

#18

投稿記事 by cc » 12年前

softya(ソフト屋) さんが書きました:プロジェクトがWinMainを要求するウィンドウアプリ用なのに入力したプログラムがC言語のコンソール用のプログラムだからです。
WinMainが無いよと言うエラーが出ていますね。

printfなどが使いたい場合は、Win32コンソールアプリケーションを選んでプロジェクトを作成して下さい。
ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#19

投稿記事 by softya(ソフト屋) » 12年前

DirectX9ならともかく、DirectX11だとさっぱり分かりません。
「DX9簡易フォントテンプレート」
http://www.geocities.jp/neo_ku_ron/HP_N ... XFont.html

少なくとも簡単には表示できないと思います。

参考。Direcx10の場合。
「その5 DirectX10版高速フォント表示」
http://marupeke296.com/DX10_No5_FontTexture.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#20

投稿記事 by ISLe » 12年前

cc さんが書きました:ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?
逆に質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?

printf("表示\n");
で文字を表示するのにDirectXは必要ありません。

DirectX11で文字を表示する方法はいくつもあります。
そのすべてを説明しようとすれば技術書が一冊できるほどの内容です。

なので質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?

cc

Re: DirectX11でエラーがでる

#21

投稿記事 by cc » 12年前

ISLe さんが書きました:
cc さんが書きました:ではDirectX11を使って文字列を表示するにはどの様なコードを書けばよいのですか?
逆に質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?

printf("表示\n");
で文字を表示するのにDirectXは必要ありません。

DirectX11で文字を表示する方法はいくつもあります。
そのすべてを説明しようとすれば技術書が一冊できるほどの内容です。

なので質問します。
質問者さんはDirectX11を使ってどこにどのような文字を表示したいのですか?
こんな言い方で申し訳ありませんが、このトピックの最初に書いた普通のウィンドウを作るコードを書いて
そのウィンドウの中に普通に文字列を表示したいのです。

>printf("表示\n");
>で文字を表示するのにDirectXは必要ありません。
ところがDirectX11が使えるように設定した環境ではprintfは使えないのですよね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#22

投稿記事 by softya(ソフト屋) » 12年前

DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

cc

Re: DirectX11でエラーがでる

#23

投稿記事 by cc » 12年前

softya(ソフト屋) さんが書きました:DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
いいえ違います。
printfを使うのではなくて、DirectXの機能を使って文字列を表示したいのです
リンク先の方法がそれですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#24

投稿記事 by softya(ソフト屋) » 12年前

cc さんが書きました:
softya(ソフト屋) さんが書きました:DirectXで使うウィンドウはグラフィックを表示するウィンドウですが、printfで表示するウィンドウはコンソールウィンドウです。
グラフィックを表示するウィンドウ以外に2つめのウィンドウとしてAllocConsole()でコンソールウィンドウを作成すれば、そちらにprintfは可能ですがそんな事をしたいのでしょうか?
[追記]私の書いたDirectx9と10のリンク先は読んでもらえました?
いいえ違います。
printfを使うのではなくて、DirectXの機能を使って文字列を表示したいのです
リンク先の方法がそれですか?
DirectX11はいろいろ変わっているみたいなので出来る保証はありません。
あとISLeさんの言う色々ある方法の一つに過ぎません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#25

投稿記事 by softya(ソフト屋) » 12年前

調べて見ましてが、DirectX11だとDirectWriteを使うのが真っ当なやり方のようです。
[補足]これがccさんの聞きたいひねりのない普通にの方法に当たるかと思います。ただし、printfのような簡単なものは存在しません。それがグラフィック・マルチメディアAPIであるDirectXの与えられた役割だからです。文字表示したいならコンソールやWin32APIを使えば良いのですから。

MSDNのDirectWriteサンプル。
「DirectWrite の "Hello World" サンプル (Windows)」
http://msdn.microsoft.com/ja-jp/library ... s.85).aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#26

投稿記事 by ISLe » 12年前

cc さんが書きました:こんな言い方で申し訳ありませんが、このトピックの最初に書いた普通のウィンドウを作るコードを書いて
そのウィンドウの中に普通に文字列を表示したいのです。
「普通に」とはどこにどのような文字列を表示することなのですか?
ウィンドウに文字列を描画する方法に『普通』が無いのでお聞きしているのですが。

ちなみにGDI関連のWin32 APIを使ってもウィンドウに文字列を表示することができます。
GDIを使うコードに比べたらこのトピックの最初に書かれたコードはかなり特殊なウィンドウを作るコードです。
DirectX11を使わなければならない理由があるわけですよね。


DirectWriteは特定のデバイスに依存しないので、GDIやDirect2DやDirect3Dなどと自由に組み合わせて使うことができます。
DirectWriteを使わなくても文字列を描画することはできます。
D3DX11からは文字列描画機能が無くなってしまいましたけどね。
いずれにせよ目的に応じて使い分ける必要があります。

cc

Re: DirectX11でエラーがでる

#27

投稿記事 by cc » 12年前

わざわざ引っ張りださせていただきありがとうございました!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: DirectX11でエラーがでる

#28

投稿記事 by softya(ソフト屋) » 12年前

cc さんが書きました:わざわざ引っ張りださせていただきありがとうございました!
ここのフォーラムルールなのですが、どう解決したか書いていただけますでしょうか。
ソースコードを貼るのもルールなのですが、サンプルのままなら省略は可能です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

cc

Re: DirectX11でエラーがでる

#29

投稿記事 by cc » 12年前

softya(ソフト屋) さんが書きました:
cc さんが書きました:わざわざ引っ張りださせていただきありがとうございました!
ここのフォーラムルールなのですが、どう解決したか書いていただけますでしょうか。
ソースコードを貼るのもルールなのですが、サンプルのままなら省略は可能です。
DirectXの機能を使って文字列を表示させるサンプルコードが発見できましたので

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: DirectX11でエラーがでる

#30

投稿記事 by ISLe » 12年前

DirectWriteとDirect2Dのサンプルで目的を達成できたのですか。
Direct3Dじゃなくて良かったんですかね。

そう言えばWindowsSDKに統合されてDirectXという名称が無くなるようなので、いまのうちにDirectWriteとかDirect2DとかDirect3Dとかはっきり対象を示すようにしていったほうが良いかもしれません。

閉鎖

“C言語何でも質問掲示板” へ戻る