7

私はこのサイトを初めて使用し、プログラミングは比較的初めてです。Visual Studio 2010 を使用してしばらく C++ プログラミングを行っていましたが、OpenGL を使いたいと思ったので、OpenGL Superbible を購入して始めました。第 2 章の「単純な」プロジェクトで行き詰まってしまいました。何時間もの調査の結果、freeGLUT と GLtools を使用するために必要なすべてのファイルをダウンロードすることができました。プログラムが機能するために、すべてが適切な場所にあることを確認しました。これで、すべてがうまくいったように見えます... 1 つの奇妙な問題を除いて。

freeglut.dll を Windows\System32 に配置する必要があると指示されたので、実行しました。プロジェクトはすぐにビルドされますが、実行すると、次のように表示されます

「コンピュータに freeglut.dll が見つからないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてください。」

さて、freeglut.dll が本来あるべき Windows\System32 にあることは確かですが、何が問題なのですか? どうすれば解決できますか?

本の元のコードは次のとおりです。

#include "../../shared/gltools.h"  //OpenGL toolkit

//////////////////////////////////////////////
//called to draw scene

void RenderScene(void)
{
    // clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

 //Flush drawing commands
    glFlush();
}
////////////////////////////////////////////////////////
//set up the rendering state
void SetupRC(void)
{
    glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
}
///////////////////////////////////////////////////////////
//main program entry point
void main(void)
int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();
    glutMainLoop();
    return 0;
    }

これは実際にコンパイルされたが実行されなかったコードです (さまざまなリソースから取得したすべての競合するデータから少し混乱しています)。

 #include <stdio.h>
 #include <stdlib.h>
 #include <windows.h>
 #include <GLTools.h>
 #include <gl/GLUT.h>
 //called to draw scene

 void RenderScene(void)
 {
// clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT);

glFlush();
 }

 //set up the rendering state
 void SetupRC(void)
 {
glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
 }

 //void main(void)
 int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Simple");
glutDisplayFunc(RenderScene);

SetupRC();
glutMainLoop();
return 0;
}
4

2 に答える 2

11

@ ScottMcP-MVP の回答で問題は解決しましたが、コメントに実際には収まらない詳細を追加すると思いました。

私の解決策:

  1. 次のサブディレクトリ構造をソリューション フォルダーに追加します。

ここに画像の説明を入力

x86、32 ビット版の GLut、GLew、その他必要なものを入れます。

x64、同じの 64 ビット バージョンを入れます。

SVN のプロジェクトが正しいバージョンであることを確認するために、Windows SDK (または、Win7+ では "Windows Kits" フォルダー) に配置するのではなく、すべて.dllの 、.lib、およびを対応するフォルダーに配置し、チェックアウトしました。.h別のマシンでは、すべての依存関係を取得します。includeこれには、ターゲット固有のlibフォルダーをプロジェクト プロパティに追加する必要がありました。

ここに画像の説明を入力

Include Directoriesフィールドを次のように設定します

$(SolutionDir)ThirdParty\Include\;$(IncludePath)

そしてあなたのLibrary Directoriesフィールドへ

$(SolutionDir)\ThirdParty\$(PlatformTarget)\lib\;$(LibraryPath)

これらはすべて「すべてのプラットフォーム」ビルド構成に適用する必要があることに注意してください。マクロは$(PlatformTarget)、正しい lib と dll が使用されていることを確認します。includeフォルダーはターゲットに依存しないため、フォルダーのルートに配置しましたThirdParty

必要なファイルを出力フォルダーに入れるには、次のビルド後のイベントをプロジェクト構成 (「すべてのプラットフォーム」の下) に追加します。

xcopy $(SolutionDir)ThirdParty\$(PlatformTarget)\*.dll $(OutputPath) /Y

ここに画像の説明を入力

これにより、ビルド時に正しいバージョンの DLL が出力フォルダーにコピーされます。これにより、手動で DLL を出力フォルダーに配置する必要がなくなり、通常は出力、bin、またはデバッグ フォルダーを含めたくないソース管理との互換性が向上します。

これらすべてを構成したら、VC OpenGL プロジェクト テンプレートを作成しました。これは、すべてを構成するのに 30 分かかったためです。

于 2013-09-28T20:55:36.680 に答える