カテゴリー別アーカイブ: Visual Studio

VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング

今(2017年5月)Windows&C++で3DプログラミングするならDirectXかOpenGLだと思いますが、最新バージョン(DirextX12など)は、性能重視のため手軽にプログラミングができなくなっています。
なので古いバージョンで使えるものを調べて、プログラミングができる環境を作ってみました。
作成した環境は、OpenGL1.1、OpenGL4.5、DirectX9、DirectX11、DirectX12で、初期化と画面クリア、簡単なポリゴンの描画まで行っています。
VSプロジェクト、ソースコードを公開していますので、3Dプログラミングの参考にしてください。
記事最後にあるダウンロードボタンから取得できます。

続きを読む VisualStudio2017(Windows10 DirectX OpenGL)で始める3Dプログラミング

VS2015でDirectX12プログラミング

DirectX12が公開されていたので、プログラミングしてみました。
11とはかなり変わっていて、GPUを効率よく使用できる代わりにリソース管理の一部を自分で行う必要があります。便利な関数やDirectXTexやDirectXTKも用意されていません(2016年4月現在)。
Microsoftから公開されているサンプルプログラムを参考にしながらポリゴンモデルの表示とアニメーションさせるプログラムを作成してみました(以前作成したDirectX11プログラムの移植)。
開発環境はVisual Studio Community 2015、Windows10です。

ss_DX12Prog0

続きを読む VS2015でDirectX12プログラミング

WCHARって何ですか? 文字列の変換

これまでchar型でしか文字列を扱ったことがなかったので、DirectXTexの画像ファイル読み込みでLPCWSTR(const WCHAR*)という型を見ても特に気にせず、L”文字列”と書けばいいやぐらいしか考えてませんでした。しかし、リテラルではなくconst char*のファイルパスを渡そうとするとコンパイルエラー、どうやら簡単に型のキャストで済むようなものではないらしい。

WCHAR( wchar_t )とは
Wikipedia ワイド文字
その他、ググって調べてみた。

文字列の内部表現が違うので、テキストファイル(char)から取得した文字列をそのままでは使えず、変換する必要があるようです。「wchar_t = 1文字」とは限らないので取扱いに注意(なんか中途半端な文字型のような気がする)。
C++11ではchar16_tやchar32_tという文字型があるので、今後慎重に文字列型の扱い方を考えていきたい。

文字列の変換方法を調べていくつか作成してみました。
続きを読む WCHARって何ですか? 文字列の変換

VS2012 ライブラリ(lib)のリンク _ITERATOR_DEBUG_LEVELとRuntimeLibrary

DirectX11 DirectXTexでテクスチャ対応でReleaseビルドしたlibファイルをDebugビルドで使用するとライブラリ実装の不一致エラーが出てしまう問題を回避してみる。(libファイルだけ公開されているライブラリを組み込むときに同じ問題が発生するかもしれないので)

続きを読む VS2012 ライブラリ(lib)のリンク _ITERATOR_DEBUG_LEVELとRuntimeLibrary

security development lifecycle(SDL)チェック VisualStudio2012

VS2012で新規プロジェクト作成時に見慣れないチェックボックス
□security development lifecycle(SDL)チェック
というものを発見。
security development lifecycleでぐぐると
http://msdn.microsoft.com/ja-jp/library/ms995349.aspx
というページを見つけたけどなんか違う。
さらに調べてみるとSDLチェックについて書かれたブログを見つけました。
VisualStudio2012で古い関数を使う(SDLチェック)

strcpy_sなどのセキュリティ強化版の関数の使用を強制するかどうかの設定でした。
ためしにstrcpyを使用するとコンパイラエラー、無効にすると警告が出るけどコンパイル成功(?)。
strcpyなどの関数は、範囲外のメモリアクセスが発生して厄介なバグを引き起こすので、SDLチェックは有効にしておく。

SDLチェックの有無は
プロジェクトのプロパティ>構成プロパティ>C/C++>全般>SDLチェック

VS2012でDirectX11プログラミング

まずはDirectXSDKの入手ですが、調べてみるとWindowsSDKというものにDirectXのSDKが含まれているようなので
http://msdn.microsoft.com/ja-jp/windows/hardware/hh852363.aspx
からダウンロードしてインストール。(Windows SDK for Windows 8)
Windows8用と書いてありますがWindows7でも動作して7用のプログラムもできるようです。

VS2012でWin32プロジェクトを新規作成
まずはヘッダファイルのincludeを試してみる。
#include “d3dx11.h” //以前作成したDX11のソースコードから
コンパイルすると「そんなファイルはない」とエラー発生。
インクルードパスの設定が必要なのか、それともSDKのインストールがおかしい?
こんなときはサンプルプログラムを、ということで
http://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef
からダウンロードしてソースコードを見てみる。

#include “d3d11.h”
でした。どうやらDXSDK2010とはファイル名が変わっているみたい。
インクルードパスは、SDKインストール時点で設定されるらしい。とくに必要なし。

次に簡単なプログラム、DirectX11のデバイスを作成して削除するだけ
_tWinMainのメイン メッセージ ループの直前に挿入

当然のようにリンクエラーがでるので
#pragma comment( lib, “d3d11.lib” )
を追加。コンパイル、リンク成功。
リンクのパス設定も不要でした。
できたプログラムを実行、デバイス作成成功のメッセージボックスが表示される。
準備完了。

簡単にVS2012でのDirectX11プログラミングの準備が終了しました。
・WindowsSDKをインストール
・DXSDK2010とはインクルードファイルが少し違う

Microsoft Visual Studio Express 2012 for Windows Desktop

最初は、以前に購入したVisual Studio 2008を使用する予定でしたが、少し古いのでVS2012に変更します。DirectXのプログラムだけなので、無料で利用できるVisual Studio Express 2012で十分だと思います。仕事ではないので安定性なども不要だし、情報が少なそうなのでここを見てくれる人が増えるかも。

早速インストールしてみる。
Visual Studio Express 2012 for Windows Desktopでググるとすぐに発見。
Microsoftのサイトからダウンロードしてインストール。
30日まで制限なしで使用でき、それ以上は登録(無料)が必要みたいなので登録。
Visual Studio Express 2012の登録の前にMicrosoftへの登録が必要でしたが、すでにXBOX Live用にアカウントを作成していたのでそのまま利用してVS2012の登録完了。
ただ、登録時の個人情報が会社員前提のものだったので少し戸惑いましたが、記入できる項目だけ入力。
少し不安が残るけど……本格的なプログラムを公開するようになれば製品版を購入予定。

早速起動して新規プロジェクト作成でWin32アプリケーションを作成、コンパイル実行、ウインドウ表示までできました。これからDirectX11のプログラムをどうやって作成するか調査開始。

 

 

 

 

PC環境
OS : Windows 7 Professional 64bit
CPU : AMD PhenomII X4 905e Processor
メモリ:8GB