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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア11996
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 01:53
2020/06/03 04:44
2020/06/03 07:12 編集
2020/06/03 07:32 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。