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

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

ただいまの
回答率

91.04%

  • C

    2957questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    2850questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1429questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • OpenGL

    144questions

    OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

visualstudioC++とOpenGL ビルドできるがウィンドウ表示されない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 240

TRON1216.

score 8

visual studioC++で3次元のグラフを作成したく、OpenGLを使用しようと思い、使えるように環境を整えました。以下のソースコードを書き、ビルドしたところ、無事にビルドできたのですが、実行してもウィンドウが表示されません。原因がわかる方いましたらアドバイスよろしくお願いいたします。

#include <GL/glut.h>



int WindowPositionX = 100;    //生成するウィンドウ位置のX座標
int WindowPositionY = 100;    //生成するウィンドウ位置のY座標
int WindowWidth = 512;        //生成するウィンドウの幅
int WindowHeight = 512;        //生成するウィンドウの高さ
char WindowTitle[] = "世界の始まり";    //ウィンドウのタイトル

                                //----------------------------------------------------
                                // 関数プロトタイプ(後に呼び出す関数名と引数の宣言)
                                //----------------------------------------------------
void Initialize(void);
void Display(void);
void Idle(void) {};
//----------------------------------------------------
// メイン関数
//----------------------------------------------------
int main(int argc, char *argv[]) {
    glutInit(&argc, argv);//環境の初期化
    glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定
    glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定
    glutCreateWindow(WindowTitle);  //ウィンドウの作成
    glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display)
    glutIdleFunc(Idle);       //プログラムアイドル状態時に呼び出される関数
    Initialize(); //初期設定の関数を呼び出す
    glutMainLoop();
    return 0;
}
//----------------------------------------------------
// 初期設定の関数
//----------------------------------------------------
void Initialize(void) {
    glClearColor(1.0, 1.0, 1.0, 1.0); //背景色
    glEnable(GL_DEPTH_TEST);//デプスバッファを使用:glutInitDisplayMode() で GLUT_DEPTH を指定する
}
//----------------------------------------------------
// 描画の関数
//----------------------------------------------------
void Display(void) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //バッファの消去

    glutSwapBuffers(); //glutInitDisplayMode(GLUT_DOUBLE)でダブルバッファリングを利用可
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

msys2にmingw-w64-x86_64-freeglut-3.0.0-4のパッケージをインストールして、
ソースコードをコピペしてclangで実行してみましたが、
特に問題は無いですね。

VSのデバッグパネルにfreeglut.dllが見つからない等のエラーメッセージは出ていませんか?
生成された実行ファイルをエクスプローラから実行しても何も出ませんか?

余談ですがOpenGLの入門でGLUT(freeglut)を使用しているサイトは
OpenGL3.x以前のレガシー扱いなAPIを使っているのが多いので、
今から始めるならGLFW + Modern OpenGL(3.3以上が望ましい)に変えたほうが良いです。


コメントに対する追記

プロジェクトをコンソールアプリケーションで作り直す前は、
このようなエラーが出たりしませんでしたか?

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。
1>C:\Users\UserName\Desktop\test\Debug\test.exe : fatal error LNK1120: 1 件の未解決の外部参照
1>プロジェクト "test.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


プロジェクトをWindows コンソール アプリケーションで作成していると、
サブシステムにコンソールが設定されて
main関数からスタートしコンソールウィンドウ(ウィンドウを開く場合であっても)が開くアプリケーションになります。

コンソールウィンドウが開くのを回避する方法が用意されているかもしれませんが、
glutのマニュアルをちゃんと読んだわけじゃないのでその辺はわからないです。

Windows デスクトップ アプリケーションで制作した場合は、
WinMain関数からスタートし、コンソールウィンドウは開かず意図的にウィンドウを生成しない限り何も表示されないアプリケーションになります。
WinMain関数の中からmainを呼ぶというてもありますが…。

設定は後からプロジェクトのプロパティから変更できますが、
間違えた場合は作り直したほうが良いと思います。

サブシステム

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/14 01:57

    https://user.xmission.com/~nate/glut.htmlからhttps://user.xmission.com/~nate/glut/glut-3.7.6-bin.zipをダウンロードし、三つのファイルを規定の場所に移動させました。デバッグしてもエラーをでていません。

    キャンセル

  • 2017/12/14 02:02

    いやデバッグしてよく見てみると「C:\Windows\SysWOW64\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。」などといったことがたくさん書かれています。

    キャンセル

  • 2017/12/14 02:27

    あ、プロジェクトなんですけど、新しく作るときに「空のプロジェクト」を選択してやってました。「Win32 コンソール アプリケーション」を選択してプロジェクトを作り直し、同様に実行するとウィンドウが表示されました。openGLって「空のプロジェクト」からプロジェクトを作成した場合、使えないのでしょうか?

    キャンセル

  • 2017/12/14 02:32

    なるほどなるほど、原因がわかりました。
    コンソールアプリケーションの場合はmain()関数が呼ばれますが、
    Windowsアプリケーションの場合はWinMain()関数からスタートします。

    今回のコードはmain()から始まっているのでコンソールアプリケーションでプロジェクトを作成しないとダメですね。

    あと、「C:\Windows\SysWOW64\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。」のメッセージについては無視して構いません。

    キャンセル

  • 2017/12/14 02:39

    アドバイスありがとうございます。ぼくの希望としては、「空のプロジェクト」より作成した現プロジェクトにopenGLを使いたいのですが、どうすればよいかわかりますでしょうか?よければ助言いただきたいです。

    キャンセル

  • 2017/12/14 02:39

    Winmain()に変えるだけでいいのでしょうか?とりあえずそれをやってみます。

    キャンセル

  • 2017/12/14 02:42

    WinMainに変えるとビルドできませんでした。

    キャンセル

  • 2017/12/14 02:52

    WINAPI WinMain()と入れました。ビルドすると、「関数はオーバーロードできません。」と表示されました。

    キャンセル

  • 2017/12/14 02:56

    追記しました
    コンソールアプリケーションでプロジェクトを作成してmain関数からスタートして下さい。

    キャンセル

  • 2017/12/14 03:02

    「空のプロジェクト」で、つまりWinMain()で大方作り上げたコードに付属させる形でOpenGLを使いたい場合、何か方法を知っていますか?上記のようにリンカーからサブシステムにいき、コンソールにしてしまうと、実行したときに、OpenGLで作ったウィンドウは表示されるのですが、WinMain()で作ったウィンドウたちは表示されないので、、、

    キャンセル

  • 2017/12/14 03:12

    使ったことがないので詳しくは知らないのですが、いわゆる一般的なWindowsアプリケーションとOpenGLを組み合わせる場合は、WGLと言うWindows APIと組み合わせて使うためのOpenGLの拡張APIの様なものがあるらしいです。

    https://www.khronos.org/opengl/wiki/Creating_an_OpenGL_Context_(WGL)

    キャンセル

  • 2017/12/14 03:14

    なるほど、ありがとうございます!調べてみます。

    キャンセル

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

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    2957questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • C++

    2850questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1429questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • OpenGL

    144questions

    OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。