Drawstuffによる描画処理

描画スタイル (Color、Texture)

ここで設定した色とテクスチャが、その後のdsDrawXx()関数での描画に適用されます。なおシミュレーションのステップごとに描画色は白、テクスチャは無効に再設定されます。

描画色 (Color)

オブジェクトの描画色を設定します。

void dsSetColor ( float red, float green, float blue );

赤 (red)、緑 (green)、青 (blue) の3色を0.0~1.0の範囲で指定します。

void dsSetColorAlpha ( float red, float green, float blue, float alpha );

alphaは不透明度で、1.0で完全に不透明、0.0で完全に透明となります。

テクスチャ (Texture)

void dsSetTexture ( int texture_number );

texture_numberには、以下の定数から指定します。またテクスチャは現在の描画色に応じて着色されます。

enum DS_TEXTURE_NUMBER
{
  DS_NONE = 0,
  DS_WOOD,
  DS_CHECKERED,
  DS_GROUND,
  DS_SKY,
};

描画モード (Mode、Quality)

void dsSetDrawMode ( int mode );

ポリゴンかワイヤーフレームのいずれで描画するかを指定します。指定には次の定数を使用します。

#define DS_POLYFILL  0
#define DS_WIREFRAME 1

描画品質 (Quality)

void dsSetSphereQuality ( int n );   // 既定値=1
void dsSetCapsuleQuality ( int n );  // 既定値=3

曲面を持つオブジェクト (球とカプセル) の描画品質を設定します。品質を上げると描画速度が低下します。

オブジェクトの描画 (Draw)

種類 関数
球体 (Sphere)
void dsDrawSphere (
    const float pos[ 3 ],   // 中心の座標
    const float R[ 12 ],    // 姿勢
    float radius            // 半径
    );
直方体 (Box)
void dsDrawBox (
    const float pos[ 3 ],   // 中心の座標
    const float R[ 12 ],    // 姿勢
    const float sides[ 3 ]  // 側面の長さ
    );
カプセル (Capsule)
void dsDrawCapsule (
    const float pos[ 3 ],   // 中心の座標
    const float R[ 12 ],    // 姿勢
    float length,           // 長さ
    float radius            // 半径
    );
円柱 (Cylinder)
void dsDrawCylinder (
    const float pos[ 3 ],   // 中心の座標
    const float R[ 12 ],    // 姿勢
    float length,           // 長さ
    float radius            // 半径
    );
(Line)
void dsDrawLine (
    const float pos1[ 3 ],  //
    const float pos2[ 3 ]   //
    );
三角形 (Triangle)
void dsDrawTriangle (
    const float pos[ 3 ],   // 中心の座標
    const float R[ 12 ],    // 姿勢
    const float *v0,        // 1番目の頂点
    const float *v1,        // 2番目の頂点
    const float *v2,        // 3番目の頂点
    int solid               // (0:ワイヤーフレームで描画)
    );
凸形状 (Convex)
void dsDrawConvex(
    const float pos[ 3 ],     // 中心の座標
    const float R[ 12 ],      // 姿勢
    float *_planes,           //
    unsigned int _planecount, //
    float *_points,           //
    unsigned int _pointcount, //
    unsigned int *_polygons   //
    );

ジオメトリの作成

引数posはx、y、zでオブジェクトの中心を指定します。引数Rは、

[ R11 R12 R13 0 ]
[ R21 R22 R23 0 ]
[ R31 R32 R33 0 ]

のように配置された回転行列で、オブジェクトの姿勢を指定します。

double型

倍精度で演算を行う場合のために、上記関数のfloat型の引数をdouble型に置き換えた関数が用意されています。

void dsDrawSphereD ( const double pos[3], const double R[12], const float radius );
void dsDrawBoxD ( const double pos[3], const double R[12], const double sides[3] );
void dsDrawCapsuleD ( const double pos[3], const double R[12], float length, float radius );
void dsDrawCylinderD ( const double pos[3], const double R[12], float length, float radius );
void dsDrawLineD ( const double pos1[3], const double pos2[3] );
void dsDrawTriangleD ( const double pos[3], const double R[12], const double *v0, const double *v1, const double *v2, int solid );
void dsDrawConvexD( const double pos[3], const double R[12], double *_planes, unsigned int _planecount, double *_points, unsigned int _pointcount, unsigned int *_polygons );

ビューポイント (Viewpoint)

void dsSetViewpoint (
    float xyz[ 3 ],   // カメラの位置 (x, y, x)
    float hpr[ 3 ]    // カメラの方向 (heading, pitch, roll)
    );
void dsGetViewpoint (
    float xyz[ 3 ],   // カメラの位置 (x, y, x)
    float hpr[ 3 ]    // カメラの方向 (heading, pitch, roll)
    );