bambooflow Note

テスト7

最終更新:

bambooflow

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

glutでODE


テスト中




  • ObjectBase.h
  • ObjectBase.cpp
  • SimpleSphere.h
  • SimpleSphere.cpp
  • SimpleBox.h
  • SimpleBox.cpp
  • SimpleCylinder.h
  • SimpleCylinder.cpp
  • SimpleCappedCylinder.h
  • SimpleCappedCylinder.cpp
  • SampleMonkey.h
  • SampleMonkey.cpp
  • XReader.h
  • StlReader.h
  • main.cpp

剛体表示。落下。
地面に衝突。


  • 実装機能
    • Sphere(球体)の生成、表示
    • glutによるグラフィック表示
    • Box(箱)の生成、表示
    • vectorにより、3D表示の自動化
    • groundをObjectBaseに変更
    • Cylinder(円柱)、CappedCylinder(カプセル)オブジェクト追加
    • 影表示(簡易のシャドウマトリックスを使用)
    • gluiによるGUI表示。
    • カメラ操作をgluiに変更。(まだ適当。)
    • STLファイル、Xファイル読み込み、表示(Meshのみ)
    • ハイトフィールド表示(bitmapデータから)


下記のチュートリアルを参考にしてます。
  • 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 m_body;
	dGeomID m_geom;
    bool    m_flagShadow;
 
public:
    ObjectBase();
	~ObjectBase();
 
	virtual void render();
	virtual void renderShadow();
	void setPosition(dReal x, dReal y, dReal z);
    const dReal* getPosition() const;
 
    const dBodyID& body() const;
    const dGeomID& geom() const;
 
protected:
	virtual void renderInLocalFrame() const = 0;
};
 
 
void ObjectBase::render() const
{
 
	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();
 
}
 

タグ:

ODE glut
記事メニュー
目安箱バナー