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

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

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

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

Q&A

解決済

2回答

707閲覧

openGLの描画について

Tashiro_luciano

総合スコア1

OpenGL

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

0グッド

0クリップ

投稿2020/08/19 10:23

前提・実現したいこと

openGLで開発していたのですが、何か消してしまったのか、突然描画されなくなってしまいました。
何度もトレースして原因を探していましたが、初心者ですのでわからず進みません。
もしよろしければどなたか原因を教えていただけると幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
#define KEY_ESC 27

GLfloat lightPos[] = { 0.992157, 0.941176, 0.807843, 1.0 };
GLfloat lightDif[] = { 0.780392, 0.568627, 0.113725, 1.0 };
GLfloat lightAmb[] = { 0.329412, 0.223529, 0.027451, 1.0 };

double theta = 0.0;

void myKeyboard(unsigned char key, int x, int y) {
if (key == KEY_ESC)
exit(0);
}
//床を描く
void myfloor() {
int i;

glColor3d(1.0, 1.0, 1.0); glBegin(GL_LINES); for (i = -15; i < 16; i += 2) { glVertex3i(i, 0, -15); glVertex3i(i, 0, 15); glVertex3i(-15, 0, i); glVertex3i(15, 0, i); } glEnd();

}

//描画関数
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //床を描く関数の呼び出し myfloor(); glEnable(GL_DEPTH_TEST); glPushMatrix(); glEnable(GL_LIGHTING); glTranslated(0.0, 0.0, -3.0); glRotatef(90.0, 0, 0.0, 0.0); glColor3d(1.0, 0.0, 0.0); glutSolidCone(0.8, 2.0, 40, 20); glDisable(GL_LIGHTING); glColor3d(1.0, 1.0, 1.0); glTranslated(0.0, 0.0, -3.0); glutSolidTorus(0.3, 0.6, 30, 30); glColor3d(1.0, 1.0, 1.0); glTranslated(0.0, 0.0, -0.4); glutSolidTorus(0.25, 0.5, 25, 25); glColor3d(1.0, 1.0, 1.0); glTranslated(0.0, 0.0, -0.4); glutSolidTorus(0.2, 0.4, 20, 20); glColor3d(1.0, 1.0, 1.0); glTranslated(0.0, 0.0, -0.3); glutSolidTorus(0.15, 0.3, 15, 15); glPopMatrix(); glDisable(GL_DEPTH_TEST); glutSwapBuffers();

}

//idle関数
void idle() {
theta = fmod(theta + 0.5, 360.0);
glutPostRedisplay();
}

//初期化
void myInit(char* progname) {
int width = 500, height = 500;
double aspect = (double)width / (double)height;

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(width, height); glutInitWindowPosition(0, 0); glutCreateWindow(progname); glClearColor(0.0, 0.0, 0.0, 1.0); glutKeyboardFunc(myKeyboard); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, aspect, 1.0, 20.0); //視点変更(少し上から,オブジェクトの位置を見る) gluLookAt(0.0, 1.0, 2.0, 0.0, 0.0, -5.0, 0.0, 1.0, 0.0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDif); glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb); glEnable(GL_LIGHT0);

}

//メイン
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
myInit(argv[0]);
glutDisplayFunc(display);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

glRotatef(90.0, 0, 0.0, 0.0);
の部分を
glRotatef(90.0,1.0, 0.0, 0.0);
とすることで解決できました。

投稿2020/08/19 11:14

Tashiro_luciano

総合スコア1

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

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

0

ベストアンサー

突然描画されなくなってしまいました。

そのコードを実行すると,
床のようなグリッド線が白で表示されるようですが…?
(「描画」はされていると見える)

何か消してしまったのか

idle関数内で変更されているthetaが使われている箇所も見当たりませんので,
それなりの量のコードが結構失われたのかもしれません.
「本来,何がどうなっているハズだったのか?」はあなたにしかわからないので,他者に訊いてもどうしようもない気がします.


追記:

glRotatef(90.0, 0, 0.0, 0.0);

この引数の指定は異常ですね.
これのせいで,以降のオブジェクトが表示されないのかもしれません.
2番目の引数だけ他の引数とは記述の雰囲気が異なるので,ここが消えたのかもしれませんね.

投稿2020/08/19 11:05

編集2020/08/19 11:12
fana

総合スコア11996

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

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

Tashiro_luciano

2020/08/19 11:13

自分の質問が曖昧で、おっしゃる通り、他者に聞いても意味のない質問になってしまっていました、、 実は先ほど自分で確認していたところ解決しました。 丁寧にご回答いただいてありがとうございました!
fana

2020/08/19 11:32

追記が遅すぎたようですね.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問