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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Visual Studio

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

OpenGL

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

C++

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

Q&A

解決済

1回答

5175閲覧

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

TRON1216.

総合スコア37

C

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

Visual Studio

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

OpenGL

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

C++

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

0グッド

0クリップ

投稿2017/12/13 09:14

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)でダブルバッファリングを利用可 }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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/13 09:38

編集2017/12/13 17:54
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TRON1216.

2017/12/13 17:02

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

2017/12/13 17:27

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

退会済みユーザー

2017/12/13 17:32

なるほどなるほど、原因がわかりました。 コンソールアプリケーションの場合はmain()関数が呼ばれますが、 Windowsアプリケーションの場合はWinMain()関数からスタートします。 今回のコードはmain()から始まっているのでコンソールアプリケーションでプロジェクトを作成しないとダメですね。 あと、「C:\Windows\SysWOW64\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。」のメッセージについては無視して構いません。
TRON1216.

2017/12/13 17:39

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

2017/12/13 17:39

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

2017/12/13 17:42

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

2017/12/13 17:52

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

退会済みユーザー

2017/12/13 17:56

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

2017/12/13 18:02

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

退会済みユーザー

2017/12/13 18:12

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

2017/12/13 18:14

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問