/* p4-MovingPlanet.c
* Animation for a solar system ( see p3-planet.c ) using by glutTimerFunc().
*/
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
int year = 0, day = 0;
int samplingTime = 50;
void myKeyboard(unsigned char key, int x, int y)
{
if ( key == 27) exit (0);
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1.0, 1.0, 1.0);
glPushMatrix();
glutWireSphere(1.0, 20, 16);// sun
glRotated((double)year, 0.0, 1.0, 0.0);
glTranslated(3.0, 0.0, 0.0);
glRotated((double)day, 0.0, 1.0, 0.0);
glutWireSphere(0.2, 10, 8);// planet
glPopMatrix();
glutSwapBuffers();
}
void myInit(char *progname)
{
int width = 500, height = 500;
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(width, height);
glutInitWindowPosition(0, 0);
glutCreateWindow(progname);
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0, (double)width / (double)height, 0.1, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void myTimer(int value)
{
if (value==1)
{
glutTimerFunc(samplingTime,myTimer,1);
year = (year+1) % 360;
day = (day+5) % 360;
glutPostRedisplay();
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
myInit(argv[0]);
glutKeyboardFunc(myKeyboard);
glutTimerFunc(samplingTime, myTimer, 1);
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}
このプログラムを改良して太陽系(水星~天王星)のプログラムを作成したいです。何を加えればいいんですか?教えてください><よろしくお願いします!!!
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
// 現在の回転、移動設定を保存
glPushMatrix();
// 原点に半径1の円を描く(太陽)
glutWireSphere(1.0, 20, 16);// sun
// 次に描く惑星を (year)度 だけ回転(公転)させる
glRotated((double)year, 0.0, 1.0, 0.0);
// 次に描く惑星を原点からx方向に3移動
glTranslated(3.0, 0.0, 0.0);
// 次に描く惑星を (day)度 だけ回転(自転)させる
glRotated((double)day, 0.0, 1.0, 0.0);
// 半径0.2の惑星を描く
glutWireSphere(0.2, 10, 8);// planet
// 現在の回転、移動設定を最後にglPushMatrixを実行した時の設定に戻す
glPopMatrix();
これが各関数の意味です。
基本的には原点に太陽があり、各惑星に対し自転→太陽から一定距離離す→公転→描画
とすれば良いという課題のようですね。
あとは上記の処理の組み合わせを使って、各惑星に対し位置関係、半径、公転、自転等の条件を満たして表示していくだけで目的は達成できるのではないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3のつく数と3の倍数を表示 C言語
-
課題;素因数分解
-
C言語でサイコロのプログラムを...
-
2の補数を計算するプログラム
-
2次関数プログラムを描写する...
-
OpenGLの惑星プログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
OpenCVでのメモリエラーについて
-
二分探索アルゴリズムの終了条...
-
| (or) を使った関数の引数の作...
-
異なるn個の整数からr個の整数...
-
C言語 格子点が多角形の中にあ...
-
乱数生成について
-
クリックされた地点が2点の線分...
-
C言語で簡単なパックマンゲーム...
-
#define _CRT_SECURE_NO_WARNIN...
-
【C++】関数ポインタの使い方
-
プログラミングで二番目に大き...
-
プログラムでの数字につく”f”の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
intとlongは同じ?
-
C言語で%を使わない余りの出し方
-
2の補数を計算するプログラム
-
再起呼び出しの回数をカウント...
-
画像の拡大・縮小
-
迷路を脱出する経路探索プログ...
-
分数の足し算をさせるプログラ...
-
OpenCVによる4値化について
-
3のつく数と3の倍数を表示 C言語
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
ヌメロンのプログラム
-
カードシャッフルのブログラム...
-
複数の共有メモリの作成
-
whileとifを使い偶数を出すには
-
関数とビット列
-
異なるn個の整数からr個の整数...
-
条件が多い場合
-
c言語プログラミングについて f...
-
【C#】SQL文の中に変数を埋め込...
おすすめ情報