*3Dモデルファイルの入出力 [#s7ad3df6]
ポリゴンで構成された3Dモデルファイルの入出力を行うライブラリ.現在の対応は以下.
-OBJファイルの入出力
-DXFファイルの入出力(3DFACEエンティティのみ)
-VRMLファイルの入力(IndexedFaceSetのみ)
-3DSファイルの入力(EDITチャンクのみ,KEYFRAMEチャンクには未対応)
-STLファイルの入出力(ASCII,バイナリ両方に対応)
-OFFファイルの入力

***ダウンロード [#qab715e1]
ソースコードは以下.

#ref(rx_model_v0.51b.zip)
#ref(rx_model_v0.52.zip)


***使用例 [#s0039619]
#code(C){{
#include "rx_model.h"

/*!
 * OBJファイル読み込み
 * @param[in] filename objファイルのパス
 * @param[inout] poly 3Dオブジェクト
 * @param[in] cen,ext 入力した3D形状の正規化パラメータ
 */
void ReadOBJ(const string filename, rxPolygons &polys, Vec3 cen, Vec3 ext)
{
	if(!polys.vertices.empty()){
		polys.vertices.clear();
		polys.normals.clear();
		polys.faces.clear();
		polys.materials.clear();
		polys.open = 0;
	}
	rxOBJ obj;
	if(obj.Read(filename, polys.vertices, polys.normals, polys.faces, polys.materials, true)){
		cout << filename << " have been read." << endl;

		if(polys.normals.empty()){
			CalVertexNormals(polys);
		}

		cout << " the number of vertex   : " << polys.vertices.size() << endl;
		cout << " the number of normal   : " << polys.normals.size() << endl;
		cout << " the number of polygon  : " << polys.faces.size() << endl;
		cout << " the number of material : " << polys.materials.size() << endl;

		FitVertices(cen, ext, polys.vertices);

		// テクスチャ読み込み
		if(!polys.materials.empty()){
			rxMTL::iterator iter = polys.materials.begin();
			for(; iter != polys.materials.end(); ++iter){
				if(iter->second.tex_file.empty()) continue;

				cout << iter->first << " : " << iter->second.tex_file;
				LoadGLTexture(iter->second.tex_file, iter->second.tex_name, true, false);

				cout << " : " << iter->second.tex_name << endl;
			}
		}

		polys.open = 1;
	}
}

/*!
 * OBJファイル書き込み
 * @param[in] filename objファイルのパス
 * @param[inout] poly 3Dオブジェクト
 */
void SaveOBJ(const string filename, rxPolygons &polys)
{
	rxOBJ obj;
	if(obj.Save(filename, polys.vertices, polys.normals, polys.faces, polys.materials)){
		cout << filename << " have been saved." << endl;
	}
}
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS