bambooflow Note

テスト3

最終更新:

bambooflow

- view
メンバー限定 登録/ログイン

glutでODE


テスト中




  • ObjectBase.h
  • ObjectBase.cpp
  • Sphere.h
  • Sphere.cpp
  • Box.h
  • Box.cpp
  • main.cpp

ボールを表示。落下。
ボックス表示。落下。
地面に衝突。


  • 実装機能
    • Sphere(球体)の生成、表示
    • drawstufと類似したカメラ操作(マウス操作)
    • glutによるグラフィック表示
    • Box(箱)の生成、表示
    • vectorにより、3D表示の自動化
    • groundをObjectBaseに変更
    • Cylinderオブジェクト追加



下記のチュートリアルを参考にしてます。
  • http://artis.imag.fr/Membres/Xavier.Decoret/resources/ode/tutorial1.html


  • ObjectBase.h

重要な部分は、render()とrenderInLocalFrame()=0の実装。
3D表示のための簡易的な機構になります。


#include <ode/ode.h>

 
class ObjectBase
{
protected:
	dBodyID body;
	dGeomID geom;
 
public:
	virtual ~ObjectBase();
	virtual void render() const;
	void setPosition(dReal x, dReal y, dReal z);
 
protected:
	virtual void renderInLocalFrame() const = 0;
};
 
 
void ObjectBase::render() const
{
	glPushMatrix();
 
	const dReal *p = dBodyGetPosition(body);
	const dReal *r = dBodyGetRotation(body);
	float m[16];
	m[ 0] = (GLfloat)r[ 0]; m[ 1] = (GLfloat)r[ 4]; m[ 2] = (GLfloat)r[ 8]; m[ 3] = (GLfloat)0;
	m[ 4] = (GLfloat)r[ 1]; m[ 5] = (GLfloat)r[ 5]; m[ 6] = (GLfloat)r[ 9]; m[ 7] = (GLfloat)0;
	m[ 8] = (GLfloat)r[ 2]; m[ 9] = (GLfloat)r[ 6]; m[10] = (GLfloat)r[10]; m[11] = (GLfloat)0;
	m[12] = (GLfloat)p[ 0]; m[13] = (GLfloat)p[ 1]; m[14] = (GLfloat)p[ 2]; m[15] = (GLfloat)1;
	glMultMatrixf( m );
 
	renderInLocalFrame();
 
	glPopMatrix();
}
 

タグ:

ODE glut
記事メニュー
ウィキ募集バナー