Skip to content

PointObject

Naohisa Sakamoto edited this page Mar 25, 2017 · 2 revisions

3.1 点オブジェクト

点オブジェクトは、幾何形状を構成する最も基本的な描画要素です。数学的には、点は大きさ・面積・長さを持たない無限に小さい要素として定義されていますが、コンピュータグラフィックスにおいては、通常、ディスプレイで表示可能な最小単位(ピクセル)が有限であるため、点は有限の大きさを持ちます。

3.1.1 データ構造

KVSでは、点オブジェクトは以下のような情報から構成されています。

座標
点の位置を表します。3 次元の場合、x,y,zの値を持つ。複数の点を表す場合は、x,y,z値を点の数だけ並べて1次元配列として定義します。
色(カラー)
点の色を表します。一般的には、赤,緑,青の値(RGB値)を持ちます。それぞれの値は、256 階調の整数値で表現されることが多く、プログラム上ではunsigned char 型として定義されます。複数の点に対して個別に色を設定する場合、座標データと同様に、点の数だけRGB値を並べて1次元配列として定義します。
法線ベクトル
点の法線を表します。3次元の場合、x,y,zの各成分の値を持ちます。座標データと同様に、複数の点に対してベクトルのx,y,z成分を並べて指定します。法線ベクトルを指定しない場合、描画の際にシェーディング処理が無効となります。
大きさ(サイズ)
点の大きさを表します。大きさを指定しない場合は1となります。単位はピクセル(画素)です。

3.1.2 kvs::PointObjectクラス

KVSでは、点オブジェクトはkvs::PointObjectクラスとして実装されています。以下では、kvs::PointObjectクラスの主なメソッドについて説明します。


const kvs::ValueArray<kvs::Real32>& coords()

機能
点の座標値の配列を返す。

戻り値
32ビット実数型の座標値の配列クラス


const kvs::ValueArray<kvs::UInt8>& colors()

機能
点のカラー値の配列を返す。

戻り値
8ビット符号なし整数型のカラー値の配列クラス


const kvs::ValueArray<kvs::Real32>& normals()

機能
点の法線ベクトルの配列を返す。

戻り値
32ビット実数型の法線ベクトルの配列クラス


const kvs::ValueArray<kvs::Real32>& sizes()

機能
点の大きさの配列を返す。

戻り値
32ビット実数型の点の大きさの配列クラス


size_t numberOfVertices()

機能
点の数を返す。

戻り値
点の数


size_t numberOfColors()

機能
カラー値の数を返す。

戻り値
カラー値の数。1の場合、すべての点が同一色であることを示す。


size_t numberOfNormals()

機能
法線ベクトルの数を返す。

戻り値
法線ベクトルの数


size_t numberOfSizes()

機能
サイズ値の数を返す。

戻り値
サイズ値の数。1の場合、すべての点が同一サイズであることを示す。


const kvs::Vector3f coord( const size_t index ) const

機能
指定されたインデックス番号の点の座標値を返す。

引数
index 点のインデックス番号。

戻り値
指定されたインデックス番号の点の座標値(3次元ベクトルクラス)


const kvs::RGBColor color( const size_t index ) count

機能
指定されたインデックス番号の点のカラー値を返す。

引数
index 点のインデックス番号。

戻り値
指定されたインデックス番号の点のカラー値(RGBカラークラス)


const kvs::Vector3f normal( const size_t index ) const

機能
指定されたインデックス番号の点の法線ベクトルを返す。

引数
index 点のインデックス番号。

戻り値
指定されたインデックス番号の点の法線ベクトル(3次元ベクトルクラス)


kvs::Real32 size( const size_t index ) const

機能
指定されたインデックス番号の点のサイズを返す。

引数
index 点のインデックス番号。

戻り値
指定されたインデックス番号の点のサイズ


void setCoords( const kvs::ValueArray<kvs::Real32>& coords )

機能
点の座標値を設定する。設定する座標値を、x, y, zを点数分並べた配列として指定する。

引数
coords 座標値の配列。指定する配列の型は32ビット実数型である。


void setColors( const kvs::ValueArray<kvs::UInt8>& colors )

機能
点のカラー値を設定する。設定するカラー値を、R, G, Bを点数分並べた配列として指定する。

引数
colors カラー値の配列。指定する配列の型は8ビット符号なし整数型である。


void setNormals( const kvs::ValueArray<kvs::Real32>& normals )

機能
点の法線ベクトルを設定する。設定する法線ベクトルを、x, y, zを点数分並べた配列として指定する。

引数
normals 法線ベクトルの配列。指定する配列の型は32ビット実数型である。


void setSizes( const kvs::ValueArray<kvs::Real32>& sizes )

機能
点のサイズを設定する。設定する点のサイズを、それを点数分並べた配列として指定する。

引数
sizes サイズ値の配列。指定する配列の型は32ビット実数型である。


3.1.3 作成例

点オブジェクトを作成し、それを描画するサンプルコードを以下に示します。例では、CreatePointObject関数で点オブジェクトを生成しています。

#include <kvs/glut/Application>
#include <kvs/glut/Screen>
#include <kvs/PointObject>

// 点の数
const size_t N = 4;

// 座標値配列の定義
kvs::Real32 CoordArray[ N * 3 ] = {
    1.0, 0.0, 2.0,  // 点0の座標 (1.0, 0.0, 2.0)
    2.0, 0.0, 2.0,  // 点1の座標 (2.0, 0.0, 2.0)
    1.5, 0.8, 1.7,  // 点2の座標 (1.5, 0.8, 1.7)
    1.5, 0.0, 1.1   // 点3の座標 (1.5, 0.0, 1.1)
};

// カラー値配列の定義
kvs::UInt8 ColorArray[ N * 3 ] = {
    255,   0,   0,  // 点0の色 赤(255,   0,   0)
      0, 255,   0,  // 点1の色 緑(  0, 255,   0)
      0,   0, 255,  // 点2の色 青(  0,   0, 255)
    255, 255,   0   // 点3の色 黄(255, 255,   0)
};

// 点オブジェクトを生成する関数
kvs::PointObject* CreatePointObject()
{
    // KVSの配列クラス(kvs::ValueArray)にセットする。
    kvs::ValueArray<kvs::Real32> coords( CoordArray, N * 3 );
    kvs::ValueArray<kvs::UInt8> colors( ColorArray, N * 3 );

    // 点オブジェクトを生成する。
    kvs::PointObject* object = new kvs::PointObject();
    object->setCoords( coords );
    object->setColors( colors );
    object->setSize( 10 );

    // 生成した点オブジェクトのポインタを返す。
    return object;
}

// メイン関数
int main( int argc, char** argv )
{
    kvs::glut::Application app( argc, argv );

    // 点オブジェクトの生成
    kvs::PointObject* object = CreatePointObject();

    kvs::glut::Screen screen( &app );
    screen.setTitle( "Point Object" );
    screen.registerObject( object );
    screen.show();

    return app.run();
}
Clone this wiki locally