-
Notifications
You must be signed in to change notification settings - Fork 25
PointObject
点オブジェクトは、幾何形状を構成する最も基本的な描画要素です。数学的には、点は大きさ・面積・長さを持たない無限に小さい要素として定義されていますが、コンピュータグラフィックスにおいては、通常、ディスプレイで表示可能な最小単位(ピクセル)が有限であるため、点は有限の大きさを持ちます。
KVSでは、点オブジェクトは以下のような情報から構成されています。
- 座標
- 点の位置を表します。3 次元の場合、x,y,zの値を持つ。複数の点を表す場合は、x,y,z値を点の数だけ並べて1次元配列として定義します。
- 色(カラー)
- 点の色を表します。一般的には、赤,緑,青の値(RGB値)を持ちます。それぞれの値は、256 階調の整数値で表現されることが多く、プログラム上ではunsigned char 型として定義されます。複数の点に対して個別に色を設定する場合、座標データと同様に、点の数だけRGB値を並べて1次元配列として定義します。
- 法線ベクトル
- 点の法線を表します。3次元の場合、x,y,zの各成分の値を持ちます。座標データと同様に、複数の点に対してベクトルのx,y,z成分を並べて指定します。法線ベクトルを指定しない場合、描画の際にシェーディング処理が無効となります。
- 大きさ(サイズ)
- 点の大きさを表します。大きさを指定しない場合は1となります。単位はピクセル(画素)です。
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ビット実数型である。
点オブジェクトを作成し、それを描画するサンプルコードを以下に示します。例では、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();
}