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

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

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

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

C++

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

Q&A

解決済

1回答

376閲覧

3Dファイルフォーマットについて

windowsaa

総合スコア16

OpenGL

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

C++

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

0グッド

0クリップ

投稿2017/10/28 18:36

編集2017/10/29 22:47

ヘッダーファイルは別にあるのですが、STLデータを描画する際の処理ですが
画面が黒く塗りつぶされてしまいます。

明確におかしな点があればおしえてください

C++

1#include<iostream> 2#include<gl/glut.h> 3#include"stlreader.h" 4 5#define STL_FILE "C:\Users\owner\Desktop\nsx_concept_LOW.stl" 6 7void DRAW_XYZ(); 8void init(void); 9void keyboard(unsigned char key, int x, int y); 10 11 12 13Triangle *triangles; 14int num; 15STLreader stlreader; 16unsigned char key = NULL; 17 18 19int main(int argc, char **argv) 20{ 21 glutInit(&argc, argv); 22 /* ウィンドウの生成 */ 23 glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH); 24 glutInitWindowPosition(200, 50); 25 glutInitWindowSize(400, 400); 26 glutCreateWindow(argv[0]); 27 init(); 28 //glutReshapeFunc(resize); 29 //glutDisplayFunc(display); 30 glutKeyboardFunc(keyboard); 31 glutMainLoop(); 32 if (triangles) 33 delete[] triangles; 34 return 0; 35 36} 37 38 39void init() 40{ 41 glClearColor(0, 0, 0, 0); 42} 43 44void keyboard(unsigned char key, int x, int y) 45{ 46 switch (key) { 47 case '\33': 48 case 'q': 49 case 'Q': 50 exit(0); 51 52 case'r': 53 case'R': 54 55 if (triangles) 56 delete[] triangles; 57 58 if (!(num = STLreader::countTriangles(string(STL_FILE)))) 59 60 break; 61 62 63 triangles = new Triangle[num]; 64 65 stlreader.readASCIISTLFile(STL_FILE, triangles); 66 67 stlreader.readBinarySTLFile(STL_FILE, triangles); 68 69 70 71 glClear(GL_COLOR_BUFFER_BIT); 72 73 74 DRAW_XYZ(); 75 76 glBegin(GL_TRIANGLES); 77 78 glColor3f(1.0, 0.0, 1.0); 79 80 for (int i = 0; i < num; i++) 81 { 82 83 glNormal3dv(triangles[i].nornVec); 84 glVertex3dv(triangles[i].pnt1); 85 glVertex3dv(triangles[i].pnt2); 86 glVertex3dv(triangles[i].pnt3); 87 88 } 89 90 91 glEnd(); 92 glFlush(); 93 94 95 break; 96 default: 97 break; 98 } 99} 100 101 102void DRAW_XYZ() 103{ 104 glBegin(GL_LINES); 105 106 glColor3f(0, 1, 0);//x 107 glVertex2f(-100, 0); 108 glVertex2f(100, 0); 109 110 glColor3f(1, 0, 0);//y 111 glVertex2f(0, 0); 112 glVertex2f(0, 100); 113 114 glColor3f(0, 0, 1);//z 115 glVertex3f(0, 0, -100); 116 glVertex3f(0, 0, 100); 117 glEnd(); 118 119}

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

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

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

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

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

guest

回答1

0

ベストアンサー

glutDisplayFunc()に関数が設定されていません。
case "R" 内の描画処理をdisplayとして宣言しましょう。

恐らくこのような感じです。

cpp

1 2bool isLoaded = false; 3 4void keyboard(unsigned char key, int x, int y) 5{ 6 switch (key) { 7 case '\33': 8 case 'q': 9 case 'Q': 10 exit(0); 11 12 case'r': 13 case'R': 14 15 if (triangles) 16 delete[] triangles; 17 18 if (!(num = STLreader::countTriangles(string(STL_FILE)))) 19 break; 20 21 22 triangles = new Triangle[num]; 23 24 stlreader.readASCIISTLFile(STL_FILE, triangles); 25 26 stlreader.readBinarySTLFile(STL_FILE, triangles); 27 28 isLoaded = true; 29 30 break; 31 default: 32 break; 33 } 34} 35 36 37 38void display(){ 39 glClear(GL_COLOR_BUFFER_BIT); 40 41 DRAW_XYZ(); 42 43 if(isLoaded){ 44 45 glBegin(GL_TRIANGLES); 46 47 glColor3f(1.0, 0.0, 1.0); 48 49 for (int i = 0; i < num; i++) 50 { 51 52 glNormal3dv(triangles[i].nornVec); 53 glVertex3dv(triangles[i].pnt1); 54 glVertex3dv(triangles[i].pnt2); 55 glVertex3dv(triangles[i].pnt3); 56 57 } 58 } 59 60 glEnd(); 61 glFlush(); 62} 63

投稿2017/11/09 09:33

Yukihiro2119

総合スコア49

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問