mqsdx  310.0.1
MQPluginSDK Extention Library / mqsdkをC++またはCLI(.Net)拡張するサポートライブラリ
 全て クラス 関数 変数 型定義 プロパティ グループ ページ
構造体 MQ0x::Polygon::VertexNormalBuffer

頂点法線(頂点を共有する全ての面法線の平均法線)をバッファリングします。 [詳細]

#include <MQ0x.hpp>

Public 型

typedef std::vector< MQPoint >
::size_type 
size_type
 

Public メソッド

void Clear (const bool isCompact=false)
 バッファをクリアします。 [詳細]
 
void Clear (const ::MQObject obj, const bool isCompact=false)
 新しいオブジェクトを指定してバッファをクリアします。 [詳細]
 
void Compact ()
 不要なヒープ領域を切り詰めます。 [詳細]
 
const MQPoint & FaceNormal (FaceNormalBuffer::size_type index)
 面法線を取得します。 [詳細]
 
const ::MQObject MQObject () const
 関連付けられているMQObjectを取得します。
 
const MQPoint & operator[] (size_type index)
 頂点法線を取得します。 [詳細]
 
const MQPoint & VertexNormal (size_type index)
 頂点法線(頂点を共有する全ての面法線の平均法線)を取得します。 [詳細]
 
 VertexNormalBuffer ()
 デフォルトコンストラクタ
 
 VertexNormalBuffer (const ::MQObject obj)
 コンストラクタ
 

Static Public メソッド

static bool IsInvalid (const MQPoint &src)
 無効な法線か判定します。
 

説明

頂点法線(頂点を共有する全ての面法線の平均法線)をバッファリングします。

オブジェクト側のデータが更新されても VertexNormalBuffer の法線バッファは同期しません(形状を変更しない静的な処理の途中で、法線算出の重複や再計算を回避するために一時的に利用するのに向いています)。 基本的に一つのオブジェクトに対して一つの VertexNormalBuffer が必要ですが、よりシビアなパフォーマンスを要求する場合、 Clear() メソッドを介して新しいオブジェクトを設定し、確保済みのバッファ領域を解放せず値だけクリアして再利用し、ヒープの処理負荷を低減する事が可能です。

関数

void MQ0x::Polygon::VertexNormalBuffer::Clear ( const bool  isCompact = false)
inline

バッファをクリアします。

引数
[in]isCompactヒープを切り詰めるかどうか。

ヒープを切り詰める時、設定されたオブジェクトの頂点数と面数を参照して切り詰めます。オブジェクトが設定されていない時、ヒープサイズはゼロに切り詰められます。

void MQ0x::Polygon::VertexNormalBuffer::Clear ( const ::MQObject  obj,
const bool  isCompact = false 
)
inline

新しいオブジェクトを指定してバッファをクリアします。

引数
[in]isCompactヒープを切り詰めるかどうか。

ヒープを切り詰める時、設定されたオブジェクトの頂点数と面数を参照して切り詰めます。オブジェクトが設定されていない時、ヒープサイズはゼロに切り詰められます。

void MQ0x::Polygon::VertexNormalBuffer::Compact ( )
inline

不要なヒープ領域を切り詰めます。

設定されたオブジェクトの頂点数と面数を参照して切り詰めます。オブジェクトが設定されていない時、ヒープサイズはゼロに切り詰められます。

const MQPoint& MQ0x::Polygon::VertexNormalBuffer::FaceNormal ( FaceNormalBuffer::size_type  index)
inline

面法線を取得します。

インデックスが指定する面の法線は最初に参照された時に計算(初期化)されます。一度バッファされたデータは Clear() メソッドで再び未初期化状態に戻すまで保持されます。 VertexNormal() で頂点法線を取得する際、頂点を共有する面の FaceNormal() を呼び出すため、 VertexNormal() によって FaceNormal() が間接的に取得済み状態になっているケースがあります。

戻り値
バッファされた面法線。法線は正規化済みです。次のケースでは無効な法線が返ります。
  • オブジェクトが指定されていない時に、構築済みバッファの範囲外だったり、まだ初期化されていない要素を参照した時。
  • オブジェクトが指定されている時に、オブジェクトの面配列の範囲外を参照した時。
  • オブジェクトが指定されている時に、三角でも四角でもない面を参照した時。
const MQPoint& MQ0x::Polygon::VertexNormalBuffer::operator[] ( size_type  index)
inline

頂点法線を取得します。

vertex_normal() を呼び出します。

const MQPoint& MQ0x::Polygon::VertexNormalBuffer::VertexNormal ( size_type  index)
inline

頂点法線(頂点を共有する全ての面法線の平均法線)を取得します。

インデックスが指定する頂点の法線は最初に参照された時に計算(初期化)されます。一度バッファされたデータは Clear() メソッドで再び未初期化状態に戻すまで保持されます。

戻り値
バッファされた頂点法線。法線は正規化済みです。次のケースでは無効な法線が返ります。
  • オブジェクトが指定されていない時に、構築済みバッファの範囲外だったり、まだ初期化されていない要素を参照した時。
  • オブジェクトが指定されている時に、オブジェクトの頂点配列の範囲外を参照した時。
  • オブジェクトが指定されている時に、三角または四角の面にまったく利用されていない頂点を参照した時。