2

大学のコースユニットのプロジェクトを開始しようとしています。私は、レトロな 2D ゲームである小惑星に少し似たものを C++ で作成しようとしています。

SFML のようなものを使用してこれを行うことができますが、これは確かに論理的なことのように思えます。ただし、Windows ではデフォルトでライブラリが利用できないため、SFML は使用できません。

要件は、私の C++ コードを任意の Windows PC (Visual Studio が既にインストールされている) にコピーして貼り付け、Visual Studio からコンパイル/実行する必要があることです。

これまで Windows API を使用したことはありませんが、これを使用してウィンドウを開き、ウィンドウ内に 2D グラフィックスを描画することができるかもしれないと感じています。私は正しいですか?基本的に、私ができることはこれだけです: ウィンドウを開き、そこにいくつかの線を引きます。

これは「宿題をしてくれませんか」というタイプの質問ではありません。これが必要なツールである場合、誰かが WinAPI を使い始めるための正しい方向を教えてください。そうでない場合は、代わりに使用できるものがありますか? ある種の OpenGL ライブラリはどうですか? OpenGL 2.0 または類似のライブラリは Visual Studio にバンドルされていますか?

(重要な場合は、VS 2010 を使用していると思います。)

みんなで乾杯

4

3 に答える 3

1

Visual Studio Express の一部の古いバージョンでは、Windows SDK がインストールされていないと Windows アプリケーションをコンパイルできないことに注意してください。ビジュアルスタジオのインストールがそうである場合、リストした要件ではグラフィックをまったく実行できません。

WinAPI を使い始めるための正しい方向を教えてください。

もちろん。

要件は、私の C++ コードを任意の Windows PC (Visual Studio が既にインストールされている) にコピーして貼り付け、Visual Studio からコンパイル/実行する必要があることです。

ご存じのとおり、使用するライブラリのコードをプロジェクトに簡単に含めることができます。libsdl のようなプロジェクトは寛容なライセンスを使用するため、それを行うことができます。ただし、それがあなたの「ルール」に違反するかどうかはわかりません。

デフォルトの Visual Studio のインストールでは、あまり得られません。純粋なwinapiを使用して、ウィンドウを作成し、その上に何かを描くことができます。SetDIBitsToDeviceのようなものを使用すると、完全なソフトウェア レンダリングを自分で簡単に実行できます。

高度な OpenGL 機能にはラッパー ライブラリ ( GLEWなど) が必要ですが、拡張機能と高度な機能を自分で初期化できます。Quake3エンジンがそれをしたので、あなたはそれをすることができました。

通常、DirectX を使用するには SDK をインストールする必要があるため、おそらく問題外です。必要なライブラリ/ヘッダーをプロジェクトのサブディレクトリにコピーして貼り付けることができますが、これが「ルール」に違反するかどうかは不明です。

OpenGL 2.0 または類似のライブラリは Visual Studio にバンドルされていますか?

デフォルトの OpenGL ヘッダーは、バージョン 1.1 などをサポートしています。ただし、 を使用して不足している関数を自分でロードできますwglGetProcAddress。コード内で不足している定数を自分で宣言することもできます。価値があるかどうかは別の話です。

結論:

完全なソフトウェア レンダリングが必要な場合は、winapi を使用してウィンドウを作成し、「画面」(RGB 形式) に 2D バッファーを割り当て、SetDIBitsToDevice または StretchDIBitsToDevice を使用してフレームごとにウィンドウにブリットします。Windowsヘッダーが利用可能であれば、それはほとんどどこでも機能し、コンパイルされます。

線などを描画するためにGDI ルーチンを使用することもできますが、それがゲームでうまく機能するかどうかはわかりません。久しぶりに GDI を使ったのですが、気をつけないとちらつきが目立ってしまうと思います。

高度な機能が必要な場合 (たとえば、テクスチャ付きの三角形を描画したり、2D スプライトを回転したりできるソフトウェア レンダリング ルーチンを作成するのが難しい人もいます)、OpenGL を使用し、不足している関数を wglGetProcAddress を使用してロードすることを検討してください。ただし、大学に (何らかの理由で) 古い (または欠陥のある) ハードウェアがある場合は、OpenGL の古いバージョン (OpenGL 1.1) に制限することをお勧めします。その理由は、OpenGL 1.1 が、ハードウェア アクセラレーションを使用して何らかの問題が発生した場合に有効になるソフトウェア OpenGL レンダラーによってサポートされているためです。

于 2013-11-08T01:04:02.267 に答える