OpenGLを使ってみよう のバックアップソース(No.2)

とりあえず使ってみようということで,つぎのプログラムを書いてみました.オイラー法で素朴に斜方投射をシミュレート,描画するプログラムです.

 #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);

水平投射のシミュレーション on Linux
水平投射のシミュレーション on Windows

見ての通り,同じ出力結果です.うれしいです.詳しいことはよくわかんないんですが,環境依存の激しいグラフィックという分野で同じソースが違うOS,違うコンパイラで使えるということに感動しました.このプログラムは,実際には時間発展とともにアニメーションします.アニメーションの速度はコンピュータの計算速度やグラフィックボードにかなり影響を受けます.
<Prev]
[Next>
OpenGLのインストールとコンパイル
GLUT関数覚え書き
Valid XHTML 1.1! [home] [プログラミング] [OpenGL] [ページの先頭]
初版:2003-01-04 / 最終更新:2004-11-11 00:23:47

Valid XHTML 1.1! home >
トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.2.17HTML convert time to 0.027 sec.