- 追加された行はこの色です。
- 削除された行はこの色です。
とりあえず使ってみようということで,つぎのプログラムを書いてみました.オイラー法で素朴に斜方投射をシミュレート,描画するプログラムです.
#include <GL/glut.h>
#include <stdlib.h>
int width = 300, height = 600;
/* 初期値 */
float y = .0;
float Vy = 200.;
float g = 9.8;
float t = .0;
float dt = .1;
float x = -1.;
float Vx = .03;
float yi[1000]; /* 軌跡データ格納用 */
float xi[1000];
int i=0, j=0;
void FreeFall(void){
/* axis */
glColor3f(.2, .3, .5);
glBegin( GL_LINES );
glVertex2d(-1, 0);
glVertex2d(1, 0);
glEnd();
/* draw points */
glColor3f( .9, .2, .2 );
glPointSize(4.);
glBegin( GL_POINTS );
glVertex2f( x, y);
glEnd();
/* draw orbits */
glColor3f( .5, .2, .2 );
glBegin( GL_LINE_STRIP );
for(j=0 ; j<i ; j++)
glVertex2f( xi[j], yi[j]);
glEnd();
/* draw points par 10 */
glColor3f( 1., 1., 1. );
glPointSize(4.);
glBegin( GL_POINTS );
for(j=0 ; j<i ; j+=50)
glVertex2f( xi[j], yi[j]);
glEnd();
}
void display(void){
glClearColor( .0, .0, .0, .0);
glClear( GL_COLOR_BUFFER_BIT );
FreeFall();
glutSwapBuffers();
}
void idle(void){
float a;
y += Vy*dt;
a = -g; /* 加速度一定, 下向き */
t += dt;
Vy += a*dt;
x += Vx*dt;
/* 軌跡データ格納 */
yi[i] = y;
xi[i] = x;
i++;
/* 画面右端で停止 */
if(x>=1.)
glutIdleFunc( NULL );
glutPostRedisplay();
}
int main(int argc, char** argv){
/* init gult */
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( width, height );
glutCreateWindow( "FreeFall" );
/* call-back */
glutDisplayFunc( display );
glutIdleFunc( idle );
/* 2D-setup */
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( -1., 1., -10000., 5000. );
glutMainLoop();
return 0;
}
Vine Linux 2.6とWindows XPの両方で,同じソースをそれぞれコンパイルし,実行してみました.
#ref(fig1.png,nolink)
#ref(fig1.png,nolink)
&ref(fig1.png,nolink);
&ref(fig2.png,nolink);
水平投射のシミュレーション on Linux
水平投射のシミュレーション on Windows
左がLinux上,右がWindows上の実行結果です.
見ての通り,同じ出力結果です.うれしいです.詳しいことはよくわかんないのですが,環境依存の激しいグラフィックという分野で同じソースが違うOS,違うコンパイラで使えるということに感動しました.このプログラムは,実際には時間発展とともにアニメーションします.アニメーションの速度はコンピュータの計算速度やグラフィックボードにかなり影響を受けます.
見ての通り,同じ出力結果です.うれしいです.詳しいことはよくわかんないんですが,環境依存の激しいグラフィックという分野で同じソースが違うOS,違うコンパイラで使えるということに感動しました.このプログラムは,実際には時間発展とともにアニメーションします.アニメーションの速度はコンピュータの計算速度やグラフィックボードにかなり影響を受けます.
<Prev]
[Next>
OpenGLのインストールとコンパイル
GLUT関数覚え書き
Valid XHTML 1.1! [home] [プログラミング] [OpenGL] [ページの先頭]
初版:2003-01-04 / 最終更新:2004-11-11 00:23:47