アットウィキロゴ

staticNMRLibVer1_4_3_4

('12 6/21
  NativeMeta_data loader plugin ← (Link) NativeMeta Renderer static link library
  の構成でテストするが、なぜかShadeにloader pluginがロードされない。DLLにしても結果は同じ。
  他のresident系のプラグインを調査してみる。
  ↓
  DLL形式にしてShade実行ディレクトリに配置、起動されることを確認。)

現在のところ、メタエリプソイド、Win32bit限定ですが、


ライブラリをリンク、下記インクルードファイルをインクルードして、
オブジェクト・データを
std::vector<MetaElements> meta_elms に、push_back()していって、
convert_scene();を実行すると、スタティックライブラリが利用可能になります。

後は、レイトレース発生毎に
CROSS_INF RayIntersection(const vec3d *eye, const vec3d *view);
を実行すれば、

CROSS_INF
  float t; //交点距離
  vec3d pnt, nrm; //交点座標、法線
  std::vector<INFLU_INF> influ; //影響情報
が取得されます。

INFLU_INF
  MetaElements *elem; //影響するエレメント
  float wgt; //影響する重さ

// staticNMRlib.h -------------------------------------------------------------------------------------------------------

#include <vector>
#include "micro_math.h"

enum eMETA_ELEMENT_KIND { eMETA_ELLIPSOID, eMETA_CUBE, eMETA_CYLINDER, eMETA_POLYHEDRON, eMETA_BILINEAR, eMETA_BICUBIC };

struct MetaElement
{
  enum eMETA_ELEMENT_KIND kind;
  std::string sign;
  float fusion_scale;

  MetaElement(){}
};

struct MetaEllipsoid : public MetaElement
{
  vec3d local_size;
  mtx4 wl;

  MetaEllipsoid() {
    local_size = vec3d(0,0,0);
    wl = mtx4::identity();
  }
};

struct MetaCube : public MetaElement
{
  vec3d vtcs[8];
};

//struct MetaCylinder : public MetaElement
//{
//	float length;
//	float radius;
//	mtx4 wl;
//};

//struct MetaPolygon : public MetaElement
//{
//	float thickness;
//	vec3d vtcs[3];
//};

//struct MetaBilinear : public MetaElement
//{
//	float thickness;
//	vec3d vtcs[4];
//};

//struct MetaBicubic : public MetaElement
//{
//	float thickness;
//	vec3d qp[4][4];
//};

union MetaElements {
  MetaElement *elem;
  MetaEllipsoid *ellip;
  MetaCube *cube;
};

struct CROSS_INF {
  float t;
  vec3d pnt, nrm;
  int inout, sign;
};

struct cNativeMetaScene;
struct NativeMetaScene
{
  float threshold;

  std::vector<MetaElements> meta_elms;	//ネイティブメタ記述ファイルを読み込んでここにストックされる

  void convert_scene();

  cNativeMetaScene *nms;

  CROSS_INF RayIntersection(const vec3d *eye, const vec3d *view);

  NativeMetaScene() {
    nms = 0;
  }
  ~NativeMetaScene() {
    if ( nms ) {
      free( nms );
      nms = 0;
    }
  }
};

//-----------------------------------------------------------------------------------------------------------------------



















.
最終更新:2012年07月31日 22:57