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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

816閲覧

昔触っていたOpenGL 改めてエラーなしで呼び出したい

sterengers

総合スコア5

OpenGL

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2022/12/05 12:05

編集2022/12/05 12:07

実現したいこと

Mac での動作になります
大学生時代に作成したOpenGLのコードを改めて開いて確認しようと思いましたが久しぶりすぎて全く覚えておらずエラーに苦戦しています。

colorの定義がアップデートにより変わったのかエラーを吐きます
動作できるように修正したいです。

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

main07.cpp:271:25: error: use of undeclared identifier 'color' color[0]=1.0; ^ main07.cpp:272:25: error: use of undeclared identifier 'color' color[1]=0.0; ^ main07.cpp:273:25: error: use of undeclared identifier 'color' color[2]=0.0; ^ main07.cpp:276:25: error: use of undeclared identifier 'color' color[0]=0.0; ^ main07.cpp:277:25: error: use of undeclared identifier 'color' color[1]=0.0; ^ main07.cpp:278:25: error: use of undeclared identifier 'color' color[2]=1.0; ^ main07.cpp:281:25: error: use of undeclared identifier 'color' color[0]=0.0; ^ main07.cpp:282:25: error: use of undeclared identifier 'color' color[1]=0.0; ^ main07.cpp:283:25: error: use of undeclared identifier 'color' color[2]=0.0; ^ 9 errors generated.

該当のソースコード

#include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <GLUT/glut.h> //OpenGL/GLUTの使用 //三次元ベクトル構造体: Vec_3D typedef struct _Vec_3D { double x, y, z; } Vec_3D; typedef struct _color_3D { double x, y, z; } color_3D; //定数宣言 #define FLOOR 5.0 //床の幅の半分 #define TILE 100 //床頂点格子分割数 //関数名の宣言 void initGL(); void display(); void resize(int w, int h); void mouse(int button, int state, int x, int y); void motion(int x, int y); void keyboard(unsigned char key, int x, int y); void timer(int value); Vec_3D normcrossprod(Vec_3D v1, Vec_3D v2); double vectorNormalize(Vec_3D* vec); //グローバル変数 double eDist, eDegX, eDegY; //視点極座標 int mX, mY, mState, mButton; //マウス座標 int winW, winH; //ウィンドウサイズ Vec_3D floorPoint[TILE][TILE]; //床頂点 Vec_3D boxPos;//ブロックの座標 Vec_3D touch[1000];//ブロックの変数 int i=0; double coll[4]; //メイン関数 int main(int argc, char *argv[]) { glutInit(&argc, argv); //OpenGL/GLUTの初期化 initGL(); //初期設定 glutMainLoop(); //イベント待ち無限ループ return 0; } //初期化関数 void initGL() { //描画ウィンドウ生成 glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); //ディスプレイモードの指定 glutInitWindowSize(800, 600); //ウィンドウサイズの指定 glutCreateWindow("CG_07"); //ウィンドウの生成 //コールバック関数の指定 glutDisplayFunc(display); //ディスプレイコールバック関数の指定("display()") glutReshapeFunc(resize); //リサイズコールバック関数の指定("resize()") glutMouseFunc(mouse); //マウスクリックコールバック関数の指定("mouse()") glutMotionFunc(motion); //マウスドラッグコールバック関数の指定("motion()") glutKeyboardFunc(keyboard); //キーボードコールバック関数の指定("keyboard()") glutTimerFunc(33, timer, 0); //タイマーコールバック関数("timer") //各種設定 glClearColor(0.0, 0.0, 0.2, 1.0); //ウィンドウクリア色の指定(RGBA) glEnable(GL_DEPTH_TEST); //デプスバッファの有効化 glEnable(GL_NORMALIZE); //法線ベクトル正規化の有効化 //光源設定 GLfloat col[4]; glEnable(GL_LIGHTING); //陰影付けの有効化 glEnable(GL_LIGHT0); //光源0の有効化 col[0] = 1.0; col[1] = 1.0; col[2] = 1.0; col[3] = 1.0; glLightfv(GL_LIGHT0, GL_DIFFUSE, col); //光源1の拡散反射の強度 glLightfv(GL_LIGHT0, GL_SPECULAR, col); //光源1の鏡面反射の強度 col[0] = 0.2; col[1] = 0.2; col[2] = 0.2; col[3] = 1.0; glLightfv(GL_LIGHT0, GL_AMBIENT, col); //光源1の環境光の強度 glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.05); //光源1の二次減衰率 glEnable(GL_LIGHT1); //光源1の有効化 col[0] = 1.0; col[1] = 1.0; col[2] = 1.0; col[3] = 1.0; glLightfv(GL_LIGHT1, GL_DIFFUSE, col); //光源1の拡散反射の強度 glLightfv(GL_LIGHT1, GL_SPECULAR, col); //光源1の鏡面反射の強度 col[0] = 0.2; col[1] = 0.2; col[2] = 0.2; col[3] = 1.0; glLightfv(GL_LIGHT1, GL_AMBIENT, col); //光源1の環境光の強度 glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.05); //光源1の二次減衰率 //視点関係 eDist = 15.0; eDegX = 10.0; eDegY = 0.0; //視点極座標 //床頂点座標 for (int i=0; i<TILE; i++) { for (int j=0; j<TILE; j++) { floorPoint[i][j].x = -FLOOR+2*FLOOR/(TILE-1)*i; //x座標 floorPoint[i][j].y = 0.0; //y座標(高さ) // floorPoint[i][j].y=0.5*sin(floorPoint[i][j].x*M_PI); floorPoint[i][j].z = -FLOOR+2*FLOOR/(TILE-1)*j; //z座標 } } boxPos.x=0.0; boxPos.y=0.0; boxPos.z=0.0; } 、、、 //マウスドラッグコールバック関数 void motion(int x, int y) { //マウスの移動量を角度変化量に変換 eDegY = eDegY+(mX-x)*0.5; //マウス横方向→水平角 eDegX = eDegX+(y-mY)*0.5; //マウス縦方向→垂直角 if (eDegX>89.0) eDegX = 89.0; if (eDegX<-89.0) eDegX = -89.0; //マウス座標をグローバル変数に保存 mX = x; mY = y; } //キーボードコールバック関数(key:キーの種類,x,y:座標) void keyboard(unsigned char key, int x, int y) { switch (key) { case 'r': color[0]=1.0; color[1]=0.0; color[2]=0.0; break; case 'g': color[0]=0.0; color[1]=0.0; color[2]=1.0; break; case 'b': color[0]=0.0; color[1]=0.0; color[2]=0.0; break; case 'Q': case 27: exit(0); default: break; } } //タイマーコールバック関数 void timer(int value) { glutPostRedisplay(); //ディスプレイイベント強制発生 glutTimerFunc(33, timer, 0); //タイマー再設定 } //v1とv2の外積計算 Vec_3D normcrossprod(Vec_3D v1, Vec_3D v2) { Vec_3D out; //戻り値用 //外積各成分の計算 out.x = v1.y*v2.z-v1.z*v2.y; out.y = v1.z*v2.x-v1.x*v2.z; out.z = v1.x*v2.y-v1.y*v2.x; //正規化 vectorNormalize(&out); //戻り値 return out; } //ベクトル正規化 double vectorNormalize(Vec_3D* vec) { double len; //ベクトル長 len = sqrt(pow(vec->x,2)+pow(vec->y,2)+pow(vec->z,2)); //各成分をベクトル長で割る if (len>0) { vec->x /= len; vec->y /= len; vec->z /= len; } //戻り値 return len; }

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

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

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

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

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

guest

回答1

0

自己解決

解決はしていませんが同時のコマンドで入力するのではなくコマンド入力を現代の最新版にアップデートしたらいけました。

投稿2022/12/05 14:32

sterengers

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問