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

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

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

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

OpenGL ES

携帯電話のような組込み機器のためにデザインされたOpenGLのサブセットです。

C++

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

Q&A

解決済

1回答

1207閲覧

OpenGLの使い方について

beginee

総合スコア1

OpenGL

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

OpenGL ES

携帯電話のような組込み機器のためにデザインされたOpenGLのサブセットです。

C++

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

0グッド

0クリップ

投稿2020/06/02 10:50

編集2020/06/03 07:51

OpenGlの使い方を知りたいです。
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(-0.5, 0.5);
glVertex2f( 0.5, 0.5);
glVertex2f( 0.5,-0.5);
glVertex2f(-0.5,-0.5);
glEnd();
上のコードを使って球体とかも作れるんでしょうか?

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

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

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

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

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

fana

2020/06/03 07:58

話そのものを変更するのはやめてください. 質問文と回答,コメントの内容がミスマッチになると,読んだ人には全く意味がわからなくなってしまいます. 別の話をする場合には,別の新規の質問としてください.
guest

回答1

0

ベストアンサー

話の内容的には,

  • いくつの箱が必要で
  • それぞれの箱をどこに配置すべきか

という,算数の話であろうと思います.

とりあえず,forとかを用いずに(というか別にコードとして書かなくてもいいので)
N段のピラミッドに関して各箱を置くべき座標を列挙してみるとよいでしょう.
何パターンかのNに関する座標値を眺めてみて,それらの座標値に法則性を見出してから「だったら forでこう書けば良いんじゃね?」という実装に移ると良いでしょう.


追記:コード案

C++

1//様子が見やすいようにてきとーに回転してみる用の角度 2double RotAngle = 0; 3 4void OnTimer(int) 5{//回転量を変更して再描画を促す 6 RotAngle += 1; 7 if( RotAngle > 360 )RotAngle -= 360; 8 glutPostRedisplay(); 9 glutTimerFunc( 50, OnTimer, 0 ); 10} 11 12// 13void display(void) 14{ 15 glClear(GL_COLOR_BUFFER_BIT); 16 glLoadIdentity(); 17 //視点設定:見やすい位置に調整してどうぞ 18 gluLookAt(0.0, 2.0, 13.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); 19 //様子が見やすいようにY軸まわりに回転してみる(回転量はOnTimerで一定時間ごとに変更している) 20 glRotated( RotAngle, 0,1,0 ); 21 22 {//座標がわかりやすいように原点から3軸方向に線を描画 23 glBegin( GL_LINES ); 24 { 25 const double AxisLength = 3.5; //線の長さ.てきとー. 26 glColor3d( 1,0,0 ); glVertex3d( 0,0,0 ); glVertex3d( AxisLength,0,0 ); 27 glColor3d( 0,1,0 ); glVertex3d( 0,0,0 ); glVertex3d( 0,AxisLength,0 ); 28 glColor3d( 0,0,1 ); glVertex3d( 0,0,0 ); glVertex3d( 0,0,AxisLength ); 29 } 30 glEnd(); 31 } 32 {//ピラミッド描画 33 const int N = 5; //これがピラミッドの段数 34 const double UnitSize = 0.5; //全体的なサイズ(ピラミッド最上段のCubeのサイズ) 35 glColor3d( 1,1,1 ); 36 37 for( int i=0; i<N; ++i )//N段分のループ 38 { 39 glPushMatrix(); 40 { 41 //段に応じてY方向に位置をずらす 42 const double Y_Offset = (i+0.5) * UnitSize; 43 glTranslated( 0, Y_Offset, 0 ); 44 //段に応じて,XY方向の大きさを決める 45 const double XZ_Scale = UnitSize * (N - i); 46 glScaled( XZ_Scale, UnitSize, XZ_Scale ); 47 // 48 glutWireCube( 1 ); 49 } 50 glPopMatrix(); 51 } 52 } 53 glFlush(); 54} 55 56void resize(int w, int h) 57{ 58 glViewport(0, 0, w, h); 59 glMatrixMode(GL_PROJECTION); 60 glLoadIdentity(); 61 gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0); 62 glMatrixMode(GL_MODELVIEW); 63} 64 65void keyboard(unsigned char key, int x, int y) 66{ 67 switch (key) 68 {//qキーかESCキーで終了させる 69 case 'q': 70 case 'Q': 71 case '\033': /* '\033' は ESC の ASCII コード */ 72 exit(0); 73 default: 74 break; 75 } 76} 77 78int main(int argc, char *argv[]) 79{ 80 glutInit(&argc, argv); 81 glutInitDisplayMode(GLUT_RGBA); 82 glutCreateWindow(argv[0]); 83 glutDisplayFunc(display); 84 glutReshapeFunc(resize); 85 //glutMouseFunc(mouse); 86 glutKeyboardFunc(keyboard); 87 glutTimerFunc( 50, OnTimer, 0 ); 88 glClearColor(0, 0, 0, 1.0); 89 glutMainLoop(); 90 return 0; 91}

投稿2020/06/03 01:39

編集2020/06/03 07:28
fana

総合スコア11996

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

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

fana

2020/06/03 01:53

例えば,とりあえず「N段のピラミッド」の「一番下の段だけ」ならどうでしょうか. それは2次元的に規則正しく並んでいる(例えばforを2重とかで書ける)のではないでしょうか. ↓ それができたら,「下から2段目」についても同様でしょう. やはり2次元的に規則正しく並んでいます. 場所が1段目とは少し違うでしょうけど,その差を実装すればよいですよね. ↓ … と,やっていけば,そのうち見えてくる事柄もあるのでは.(例えば「何段目」のときには「1段目」と比べるとどのくらいずれる,とかに法則性が無いか?とか)
fana

2020/06/03 04:44

コード提示は遠慮したい:GLUT(あるいはそれに準じる物)の用意とかがわりと面倒なうえ,残念ながら本件の内容的に取り組んでもこちらに得るものが無いと思うので…… それはそれとして,【各段を「1個の(立方体ではない,平べったい)箱」として,段ごとに箱のサイズを変える】という方針ならば,(glutSolidCube()は何もしないと箱の中心位置が原点になるので)段ごとに高さ方向にだけ位置をオフセットしてやれば済むと思いますが,それも無理ですか?
beginee

2020/06/03 07:12 編集

なんとか解けました。 アイデア提供ありがとうございます
fana

2020/06/03 07:32 編集

一応,「こんな感じでどうか?」的なコードを追記. ({ライティングなし,ピラミッドはワイヤーフレーム描画}な簡易状態ですが,そこらへんはメイン話題の算数部分とは無関係なので.)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問