glutsetoptionを使ったループ抜けをしたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sahaya
記事: 5
登録日時: 3ヶ月前

glutsetoptionを使ったループ抜けをしたい

#1

投稿記事 by sahaya » 3ヶ月前

openglのfreeglutを使ってglutmainlopp()のループ抜けをしたいと思い以下のサイト(https://seesaawiki.jp/w/mikk_ni3_92/d/freeglut%ca%d403)を参考にしたところコンパイルは通ったもののコマンドプロント上で以下のようなエラーが発生しました
glutinitで初期化を行った後にglutSetOptionを使用しているのにも関わらずエラーが出ている理由が分かりません。
解決よろしくお願いします。

使用した言語C++
開発環境Visual studio 2019

エラー内容

コード:

freeglut ERROR: Function <glutSetOption> called without first calling 'glutinit'

コード:

#include <GL/freeglut.h>
#include <cstdio>

//----------- プロトタイプ宣言 --------------//
void display();
void reshape(int w, int h);
void timer(int value);


//------------- OpenGLの初期設定 ------------------//
void GLUT_INIT()
{
    glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH); //ダブルバッファ、Zバッファ
    glutInitWindowSize(640,480);
    glutCreateWindow("glutSetOption");
}

void GLUT_CALL_FUNC()
{
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutTimerFunc(0,timer,17);
}

void MY_INIT()
{
    glClearColor(1.0, 1.0, 1.0, 1.0);

    glEnable(GL_DEPTH_TEST);//ZバッファON
}



//------------- メイン関数 ----------------//
int main(int argc, char **argv)
{
    glutInit(&argc,argv);

    GLUT_INIT();
    GLUT_CALL_FUNC();
    MY_INIT();
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);
    glutMainLoop();
    puts("Back from the free glutMainloop()");
    return 0;
}

//------------ ここからコールバック関数 ------------------//
void display()
{
    static int r = 0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glColor3f(0,0,1);

    glPushMatrix();
    glRotatef(float(r), 0.0, 1.0, 0.0);
    static double data[]={0,0,0}; //オフセット
    glutWireSierpinskiSponge(2,data,1);//シェルピンスキーの四面体
    glPopMatrix();

    glColor3f(1,1,1);

    glutSwapBuffers();

    if(++r > 360){
        r= 0;
    }
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION); //行列モード切替
    glLoadIdentity();  //行列初期化
    gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);

    glMatrixMode(GL_MODELVIEW); //行列モード切替
    glLoadIdentity();
    gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void timer(int t)
{
    glutPostRedisplay();
    glutTimerFunc(t,timer,17); //タイマー関数
}

Meta3

Re: glutsetoptionを使ったループ抜けをしたい

#2

投稿記事 by Meta3 » 3ヶ月前

コンパイル リンク 実行 と全く問題なく動きました
Windows10 VisualStudio2019  freeglut.3.0.0.v140で確認
三角の立体(3面、中にも図形))が回転してますね
環境がうまく構築されていないのか?

アバター
あたっしゅ
記事: 439
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: glutsetoptionを使ったループ抜けをしたい

#3

投稿記事 by あたっしゅ » 3ヶ月前

 グラボ(NVIDIA GeForce なんたら とか)や openGL のドライバのバーションを公表すると吉。

 オープンソフトな 3DCG アプリ Blender の 2.80 以降は、
openGL のバーションが低い Intel グラフィックな Note PCで動かなくなりました。

 うちでも、コンパイル リンク 実行 と全く問題なく動きました。
 Windows10 PRO(x64) VisualStudio 2019 で確認。freegl のバーションは未確認。
NVIDIA GTX GeForce GTX 1070 Ti
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

アバター
あたっしゅ
記事: 439
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: glutsetoptionを使ったループ抜けをしたい

#4

投稿記事 by あたっしゅ » 3ヶ月前

 バックアップ中に、寝ちまったい。

Intel(R) HD Graphics
Intel(R) Core(TM) i3 CPU M330 @ 2.13GHz 2.13GHz



The following required OpenGL extensions missing:
GL_ARB_multitexture
GL_ARB_vertex_buffer_object
GL_EXT_geometry_shader4.

となりましたので、原因は、グラボが弱すぎるですかね。

 ワイヤーフレームを動かすだけなら、古い openGL/freeglut のライブラリ使えば動くかな ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

sahaya
記事: 5
登録日時: 3ヶ月前

Re: glutsetoptionを使ったループ抜けをしたい

#5

投稿記事 by sahaya » 3ヶ月前

あたっしゅ さんが書きました:
3ヶ月前
 グラボ(NVIDIA GeForce なんたら とか)や openGL のドライバのバーションを公表すると吉。
解答ありがとうございます。
確認したところopenglのドライバのVersionは4.2でした。

sahaya
記事: 5
登録日時: 3ヶ月前

Re: glutsetoptionを使ったループ抜けをしたい

#6

投稿記事 by sahaya » 3ヶ月前

あたっしゅ さんが書きました:
3ヶ月前


となりましたので、原因は、グラボが弱すぎるですかね。

解答ありがとうございます。
グラボはIntel(R) HD Graphics 4400でした。

sahaya
記事: 5
登録日時: 3ヶ月前

Re: glutsetoptionを使ったループ抜けをしたい

#7

投稿記事 by sahaya » 3ヶ月前

Meta3 さんが書きました:
3ヶ月前
環境がうまく構築されていないのか?
解答ありがとうございます。

コード:

#include <Gl/freeglut.h>
#include <iostream>

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glutSwapBuffers();
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
	glutCreateWindow("GLUT");
	glutDisplayFunc(display);
	glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
	std::cout << "Before glutMainLoop()!" << std::endl;
	glutMainLoop();
	std::cout << "Back in main()!" << std::endl;
	return 0;
}
こちらのコードからglutsetoption()を省いた時にはしっかり出力できているのでfreeglutの環境構築ができてないかもしれませんね。
また一から構築してみます。
分かりやすいサイトがあれば教えてくれるとありがたいです。

Meta3

Re: glutsetoptionを使ったループ抜けをしたい

#8

投稿記事 by Meta3 » 3ヶ月前

VisualStudio2019 であればツールのNuGetのパッケージ・マネージャを使えば数十秒で構築してくれると思います

sahaya
記事: 5
登録日時: 3ヶ月前

Re: glutsetoptionを使ったループ抜けをしたい

#9

投稿記事 by sahaya » 3ヶ月前

NuGetのパッケージ・マネージャを使ったところしっかりと出力できました!
皆さん丁寧な解答ありがとうございました!!

返信

“C言語何でも質問掲示板” へ戻る